public function process($content, Filter $filter = null, $scheme = "http") { if (!$content) { return; } $this->scheme = $scheme; $this->loadHTML($content); $timeToday = strtotime(date("Y-m-d") . " 23:59:59"); $dateYesterday = $timeToday - 24 * 3600; $divsAd = $this->getElementsByTagName("div"); $ads = array(); foreach ($divsAd as $result) { if (false === strpos($result->getAttribute("class"), "lbc")) { continue; } $ad = new Ad(); $ad->setProfessional(false)->setUrgent(false); $parent = $result->parentNode; if ($parent->tagName == "a") { $a = $parent; } else { $aTags = $result->getElementsByTagName("a"); if (!$aTags->length) { continue; } $a = $aTags->item(0); } if (!preg_match('/([0-9]+)\\.htm.*/', $a->getAttribute("href"), $m)) { continue; } // permet d'éliminer les annonces déjà envoyées. if ($filter && $m[1] <= $filter->getMinId()) { continue; } $ad->setLink($this->formatLink($a->getAttribute("href")))->setId($m[1]); foreach ($result->getElementsByTagName("div") as $node) { if ($node->hasAttribute("class")) { $class = $node->getAttribute("class"); if ($class == "date") { $dateStr = preg_replace("#\\s+#", " ", trim($node->nodeValue)); $aDate = explode(' ', $dateStr); if (false !== strpos($dateStr, 'Aujourd')) { $time = strtotime(date("Y-m-d") . " 00:00:00"); } elseif (false !== strpos($dateStr, 'Hier')) { $time = strtotime(date("Y-m-d") . " 00:00:00"); $time = strtotime("-1 day", $time); } else { if (!isset(self::$months[$aDate[1]])) { continue; } $time = strtotime(date("Y") . "-" . self::$months[$aDate[1]] . "-" . $aDate[0]); } $aTime = explode(":", $aDate[count($aDate) - 1]); $time += (int) $aTime[0] * 3600 + (int) $aTime[1] * 60; if ($timeToday < $time) { $time = strtotime("-1 year", $time); } $ad->setDate($time); } elseif ($class == "title") { $ad->setTitle(trim($node->nodeValue)); } elseif ($class == "image") { $img = $node->getElementsByTagName("img"); if ($img->length > 0) { $img = $img->item(0); $ad->setThumbnailLink($this->formatLink($img->getAttribute("src"))); } } elseif ($class == "placement") { $placement = $node->nodeValue; if (false !== strpos($placement, "/")) { $placement = explode("/", $placement); $ad->setCountry(trim($placement[1]))->setCity(trim($placement[0])); } else { $ad->setCountry(trim($placement)); } } elseif ($class == "category") { $category = $node->nodeValue; if (false !== strpos($category, "(pro)")) { $ad->setProfessional(true); } $ad->setCategory(trim(str_replace("(pro)", "", $category))); } elseif ($class == "price") { if (preg_match("#[0-9 ]+#", $node->nodeValue, $m)) { $ad->setPrice((int) str_replace(" ", "", trim($m[0]))); } } elseif ($class == "urgent") { $ad->setUrgent(true); } } } $h2Tags = $result->getElementsByTagName("h2"); if ($h2Tags->length) { $h2 = $h2Tags->item(0); $ad->setTitle(trim($h2->nodeValue)); } if ($filter && !$filter->isValid($ad)) { continue; } if ($ad->getDate()) { $ads[$ad->getId()] = $ad; } } return $ads; }