MyHomeCollection/app/Parser/ImmobilierNotaires.php

78 lines
3.1 KiB
PHP
Raw Permalink Normal View History

<?php
namespace App\Parser;
use App\ParsedHome;
use App\Parser;
use Symfony\Component\DomCrawler\Crawler;
class ImmobilierNotaires extends Parser
{
/**
* @inheritDoc
*/
public function parse(): ParsedHome
{
$idAnnonce = $this->getIdAnnonceFromUrl($this->url);
$url = sprintf('https://www.immobilier.notaires.fr/pub-services/inotr-www-annonces/v1/annonces/%s', (int)$idAnnonce);
$request = $this->client->get(
$url,
[
'headers' => [
'Referer' => $this->url,
'User-Agent' => 'Dalvik/2.1.0 (Linux; U; Android 6.0.1; D5803 Build/MOB30M.Z1)',
'Connection' => 'Keep-Alive',
'Accept-Encoding' => 'gzip'
],
]
);
$annonce = json_decode($request->getBody()->getContents(), true);
$parsedHome = new ParsedHome();
$transaction = $annonce[strtolower($annonce['typeTransaction'])];
$images = $transaction['multimedias'];
$parsedHome->pictures = [];
foreach ($images as $image) {
$parsedHome->pictures[] = $image['vga'];
}
$parsedHome->description = $transaction['descriptions'][0]['descLongue'];
if (array_key_exists('prixTotal', $transaction)) {
$parsedHome->price = $transaction['prixTotal'];
} elseif ($transaction['redevableEmoluments'] === 'ACQUEREUR') {
$parsedHome->price = $transaction['prix'] + $transaction['emoluments'];
} else {
$parsedHome->price = $transaction['prix'];
}
$bien = $annonce['bien'];
$maison = $bien['maison'];
$parsedHome->city = $maison['communeNom'];
$parsedHome->surface = $maison['surfaceHabitable'];
$parsedHome->garden_surface = $maison['surfaceTerrain'] ?? null;
$parsedHome->rooms = $maison['nbPieces'];
$parsedHome->title = $transaction['descriptions'][0]['descCourte'];
$parsedHome->energy = $maison['consommationClasse'] === 'Y' ? null : $maison['consommationClasse'];
$parsedHome->ges = $maison['emissionGesClasse'] === 'Y' ? null : $maison['emissionGesClasse'];
if (array_key_exists('coordonneesExactesW84', $maison)) {
$parsedHome->map = [
'lat' => $maison['coordonneesExactesW84']['coordonneeY'],
'lng' => $maison['coordonneesExactesW84']['coordonneeX']
];
}
return $parsedHome;
}
private function getIdAnnonceFromUrl($url)
{
// ex: https://www.immobilier.notaires.fr/fr/annonce-immo/immo-interactif/maison/rognac-13/1263723
// ou : https://www.immobilier.notaires.fr/fr/annonce-immo-detail?idAnnonce=1268978&utm_source=alert&utm_medium=email&utm_campaign=annonces
if (strpos($url, 'idAnnonce=') === false) {
$url = parse_url($url, PHP_URL_PATH);
return collect(explode('/', $url))->last();
}
parse_str(parse_url($url, PHP_URL_QUERY), $query_string);
return $query_string['idAnnonce'];
}
}