client->get($this->url); $body = $request->getBody()->getContents(); $crawler = new Crawler($body); $parsed_home = new ParsedHome(); $property_single = $crawler->filter('[data-testid="real-estate"]'); $number_formatter = new NumberFormatter('en', NumberFormatter::DECIMAL); $currency_formatter = new NumberFormatter('en', NumberFormatter::CURRENCY); $currency = 'EUR'; $parsed_home->title = $property_single->filter('h1')->text(); $parsed_home->price = $currency_formatter ->parseCurrency($property_single->filter('.property__price')->text(), $currency); $parsed_home->city = $property_single?->children()?->children('div')?->eq(0)?->filter('p.h4')?->text(); $parsed_home->description = $crawler->filter('[data-testid="real-estate-annonce-single-description"]')->text(); $property__additionals = $crawler->filter('.property__additionals'); $energies = $property__additionals->filter('.energetic-indicator'); if ($energies->count() >= 1) { $parsed_home->energy = substr($energies->eq(0)->text(), 0, 1); } if ($energies->count() >= 2) { $parsed_home->ges = substr($energies->eq(1)->text(), 0, 1); } $crawler ->filter('.property__informations .mobile-extends > div .property__informations__element') ->each(static function (Crawler $property____information, $i) use (&$parsed_home, $number_formatter) { $name = trim($property____information->filter('i')->text()); $value = trim($property____information->filter('b')->text()); switch ($name) { case 'Pièces :': $parsed_home->rooms = (int)$value; break; case 'Surface habitable :': $parsed_home->surface = $number_formatter->parse($value); break; case 'Terrain :': $parsed_home->garden_surface = $number_formatter->parse($value); break; default: // break; } }); $parsed_home->pictures = $crawler ->filter('[data-testid="real-estate-mosaic-photo"]') ->filter('img') ->each(static function ($img) { return $img->attr('src'); }); return $parsed_home; } }