Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?php
- namespace App\Services;
- use App\Entity\Hotels;
- use App\Entity\ImagesHotels;
- use GuzzleHttp\Client;
- use Symfony\Component\DomCrawler\Crawler;
- use Symfony\Component\Filesystem\Filesystem;
- class AirBnbCrawler{
- /** @var $crawler Crawler */
- protected $crawler;
- protected $dataCrawler;
- protected $imgCrawler;
- protected $em;
- public function __construct(EntityManager $em)
- {
- $this->em = $em;
- }
- protected function getCrawler($link)
- {
- $client = new Client();
- $raw = $client->get($link);
- $this->crawler = new Crawler($raw->getBody()->getContents());
- $this->dataCrawler =($this->crawler->filter('._czm8crp')->each(function (Crawler $node){
- if (strpos($node->text(),'huéspedes')!== false || strpos($node->text(),'dormitorios')!== false || strpos($node->text(),'baños')!== false )
- return $node->text();
- }));
- $this->imgCrawler = $this->removeNull(($this->crawler->filter('img')->each(function (Crawler $node){
- if (strpos($node->attr('src'),'base64')=== false )
- return $node->attr('src');
- })));
- }
- protected function removeNull($array)
- {
- $data = [];
- foreach ($array as $item) if (!is_null($item)) $data[] = $item;
- return $data;
- }
- protected function getData($element)
- {
- $data = [];
- foreach ($this->dataCrawler as $item) if (strpos($item,$element) !== false) $data[] = $item;
- if(count($data) > 0) $data = explode(' ',array_pop($data));
- return ($data > 0) ? $data[0] : 0 ;
- }
- protected function getPathImg(Hotels $hotel)
- {
- $url = 'images\\hotels\\'.$hotel->getSlug().'\\';
- $fs = new Filesystem();
- if($fs->exists($url) === false)
- $fs->mkdir($url);
- return $url;
- }
- protected function saveImages(Hotels $hotel)
- {
- foreach ($this->imgCrawler as $key => $img)
- {
- $name = $uniq = uniqid() . '.jpg';
- $url = $this->getPathImg($hotel) .$name;
- file_put_contents($url, file_get_contents($img));
- $img =( new ImagesHotels())->setHotel($hotel)->setPosition($key)->setSlug($name)->setImageName($name);
- $this->em->save($img);
- }
- }
- public function createProperty($url)
- {
- $this->getCrawler($url);
- $hotel = new Hotels();
- $hotel->setTitleAdvert($this->crawler->filter('title')->text())
- ->setName($this->crawler->filter('title')->text())
- ->setDescription($this->crawler->filter('#details')->text())
- ->setMaxGuests($this->getData('huéspedes'))
- ->setRooms($this->getData('huéspedes'))
- ->setBathrooms($this->getData('dormitorios'))
- ->setAddress('')->setCp(0)->setType('type.home')
- ->setUrl($url)
- ;
- $this->em->save($hotel);
- $this->saveImages($hotel);
- return $hotel;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement