From bb5721f911f225318a3fe56256f4d671d35de8db Mon Sep 17 00:00:00 2001 From: Shikiryu Date: Mon, 5 Feb 2018 22:29:17 +0100 Subject: [PATCH] =?UTF-8?q?:arrow=5Fup:=20Met=20=C3=A0=20jour=20le=20scrip?= =?UTF-8?q?t=20suite=20au=20passage=20=C3=A0=20React?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- library/Deal.php | 135 +++++++++++++++++++++---------- library/JsParser.php | 147 ++++++++++++++++++++++++++++++++++ library/JsParserException.php | 9 +++ 3 files changed, 249 insertions(+), 42 deletions(-) create mode 100644 library/JsParser.php create mode 100644 library/JsParserException.php diff --git a/library/Deal.php b/library/Deal.php index 380408d..965502f 100644 --- a/library/Deal.php +++ b/library/Deal.php @@ -43,48 +43,6 @@ class Deal $this->id = $id; } - public static function fromURL(Account $account, $url) - { - $client = $account->getClient(); - $crawler = $client->request('GET', $url); - $deal = new self($crawler->filter('[data-savead-id]')->attr('data-savead-id')); - $deal->setAccount($account); - $deal->setSubject(trim($crawler->filter('h1')->first()->text())); - $deal->setCategory(array_search($crawler->filter('.breadcrumbsNav >ul >li')->eq(2)->text(), Categories::$categories)); - $deal->setType(self::TYPE_OFFER); - $deal->setBody(trim($crawler->filter('.properties_description')->first()->filter('p')->eq(1)->text())); - $deal->setPrice($crawler->filter('[itemprop=price]')->first()->attr('content')); - $date_node = $crawler->filter('[itemprop=availabilityStarts]')->first(); - $date = \DateTime::createFromFormat('Y-m-d', $date_node->attr('content')); - $hours = current($date_node->extract(['_text'])); - $hours = substr($hours, strpos($hours, 'à')+2); - list($hour, $min) = explode(':', $hours); - $date->setTime((int) $hour, (int) $min); - $deal->setDateCreation($date); - if ($crawler->filter('.item_photo')->count() > 0) { - $script = $crawler ->filter('.item_photo')->first()->nextAll() - ->filter('script')->first()->html(); - preg_match_all("/\"(http.*ad-thumb.*)\"/m", $script, $urls); - $urls = $urls[1]; - $images = []; - foreach ($urls as $i => $url) { - $images[] = [sprintf('setImage%s', $i) => str_replace('thumb', 'large', $url)]; - } - } else { - $images = $crawler->filter('[data-popin-content]')->each( - function (Crawler $node, $i) { - return [ sprintf('setImage%s', $i) => $node->attr('data-popin-content')]; - } - ); - } - foreach ($images as $image) { - foreach ($image as $method => $uri) { - $deal->$method($uri); - } - } - return $deal; - } - /** * @return int */ @@ -351,6 +309,99 @@ class Deal return true; } + /** + * @param Account $account + * @param string $url + * + * @return Deal + */ + public static function fromURL(Account $account, $url) + { + $client = $account->getClient(); + $crawler = $client->request('GET', $url); + preg_match('/