52 lines
1.5 KiB
PHP
52 lines
1.5 KiB
PHP
|
<?php
|
||
|
|
||
|
namespace App\Parser;
|
||
|
|
||
|
use Absmoca\Leboncoin;
|
||
|
use App\ParsedHome;
|
||
|
use App\Parser;
|
||
|
|
||
|
class LBC extends Parser
|
||
|
{
|
||
|
public function __construct($url)
|
||
|
{
|
||
|
parent::__construct($url);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @return \App\ParsedHome
|
||
|
*/
|
||
|
public function parse(): ParsedHome
|
||
|
{
|
||
|
$idAnnonce = (int) $this->getIdAnnonceFromUrl($this->url);
|
||
|
$lbc = new Leboncoin();
|
||
|
$annonce = $lbc->getAnnonce($idAnnonce);
|
||
|
$parsedHome = new ParsedHome();
|
||
|
$parsedHome->title = $annonce->getName();
|
||
|
$parsedHome->price = $annonce->getPrice();
|
||
|
$attributes = $annonce->getAttributes();
|
||
|
$parsedHome->surface = $attributes[1]->value;
|
||
|
$parsedHome->rooms = $attributes[2]->value;
|
||
|
$parsedHome->energy = strtoupper($attributes[3]->value);
|
||
|
$parsedHome->ges = strtoupper($attributes[4]->value);
|
||
|
$parsedHome->description = $annonce->getDescription();
|
||
|
$parsedHome->pictures = $annonce->getImages();
|
||
|
$location = $annonce->getLocation();
|
||
|
$parsedHome->city = $location['city'];
|
||
|
$parsedHome->map = ['lat' => $location['lat'], 'lng' => $location['lng']];
|
||
|
|
||
|
return $parsedHome;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @param $url
|
||
|
*
|
||
|
* @return string
|
||
|
*/
|
||
|
private function getIdAnnonceFromUrl($url)
|
||
|
{
|
||
|
// ex : https://www.leboncoin.fr/ventes_immobilieres/1813996383.htm/
|
||
|
return collect(explode('.', collect(array_filter(explode('/', $url)))->last()))->first();
|
||
|
}
|
||
|
}
|