<?php namespace App\Parser; use App\ParsedHome; use App\Parser; /** * Thanks to https://github.com/axeleroy/untoitpourcaramel/issues/3 * Class SeLoger * @package App\Parser */ class SeLoger extends Parser { public const TOKEN_URL = 'https://api-seloger.svc.groupe-seloger.com/api/v1/security/authenticate'; public const LISTING_URL = 'https://api-seloger.svc.groupe-seloger.com/api/v1/listings/'; public const SELOGER_TOKEN = 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJTZUxvZ2VyLW1vYmlsZSIsImFwcCI6IjYzZWU3MTRkLWE2MmEtNGEyNy05ZmJlLTQwYjdhMmMzMThlNCIsImlhdCI6MTUzOTQ0MjMyMCwianRpIjoiNWYzODRhNDYtZjk5MS00ODZkLWFkN2YtMmE2M2YxZTdkM2UwIiwiYXVkIjoiU2VMb2dlci1Nb2JpbGUtNi4wIn0.Qib13Y4395f_bi5Df0IhMQRvIxQZEfpf8Ac66oTfyiA'; public const SELOGER_GUID = '63ee714d-a62a-4a27-9fbe-40b7a2c318e4'; /** * @inheritDoc */ public function parse(): ParsedHome { $token = $this->retrieveToken(); $idAnnonce = $this->getIdAnnonceFromUrl($this->url); $url = sprintf('%s%s', self::LISTING_URL, $idAnnonce); $request = $this->client->request( 'GET', $url, [ 'headers' => [ 'AppToken' => $token, ], ] ); $annonce = json_decode($request->getBody()->getContents(), true); $parsedHome = new ParsedHome(); $parsedHome->city = $annonce['city']; //ex: Vente maison 110 m² Tréguier (22220) $parsedHome->title = $annonce['title']; $parsedHome->price = $annonce['price']; $parsedHome->surface = $annonce['livingArea']; $parsedHome->rooms = $annonce['rooms']; $parsedHome->energy = $annonce['energy']['grade']; $parsedHome->description = $annonce['description']; $parsedHome->pictures = $annonce['photos']; $location = $annonce['coordinates']; $parsedHome->map = ['lat' => $location['latitude'], 'lng' => $location['longitude']]; return $parsedHome; } /** * @param string $url * * @return string */ private function getIdAnnonceFromUrl($url) { // ex : https://www.seloger.com/annonces/achat/maison/franconville-95/vieux-marche-mare-des-noues/159100953.htm $url = parse_url($url, PHP_URL_PATH); return collect(explode('.', collect(explode('/', $url))->last()))->first(); } /** * @return string * @throws \GuzzleHttp\Exception\GuzzleException */ private function retrieveToken() { $request = $this->client->request( 'GET', self::TOKEN_URL, [ 'headers' => [ 'AppToken' => self::SELOGER_TOKEN, 'AppGuid' => self::SELOGER_GUID, ], ] ); return trim($request->getBody()->getContents(), '"'); } }