app
Console
Exceptions
Http
Parser
LBC.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
87 lines
2.8 KiB
PHP
87 lines
2.8 KiB
PHP
<?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(), '"');
|
|
}
|
|
}
|