Files
app
Console
Exceptions
Http
Parser
ImmobilierNotaires.php
LBC.php
LannionImmo.php
OuestFrance.php
Pap.php
SeLoger.php
Providers
Home.php
ParsedHome.php
Parser.php
User.php
bootstrap
config
database
public
resources
routes
storage
tests
.editorconfig
.env.example
.gitattributes
.gitignore
.styleci.yml
README.md
artisan
composer.json
composer.lock
package-lock.json
package.json
phpunit.xml
server.php
webpack.mix.js
MyHomeCollection/app/Parser/ImmobilierNotaires.php

78 lines
3.1 KiB
PHP

<?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'];
}
}