diff --git a/bridges/DonnonsBridge.php b/bridges/DonnonsBridge.php new file mode 100644 index 00000000..77413499 --- /dev/null +++ b/bridges/DonnonsBridge.php @@ -0,0 +1,123 @@ + array( + 'name' => 'Url de recherche', + 'required' => true, + 'exampleValue' => '/Sport/Ile-de-France', + 'pattern' => '\/.*', + 'title' => 'Faites une recherche sur le site. Puis copiez ici la fin de l’url. Doit commencer par /', + ), + 'p' => array( + 'name' => 'Nombre de pages à scanner', + 'type' => 'number', + 'defaultValue' => 5, + 'title' => 'Indique le nombre de pages de donnons.org qui seront scannées' + ) + ) + ); + + public function collectData() { + $pages = $this->getInput('p'); + + for($i = 1; $i <= $pages; $i++) { + $this->collectDataByPage($i); + } + } + + private function collectDataByPage($page) { + $uri = $this->getPageURI($page); + + $html = getSimpleHTMLDOM($uri) + or returnServerError('No results for this query.'); + + $searchDiv = $html->find('div[id=search]', 0); + + if(!is_null($searchDiv)) { + $elements = $searchDiv->find('a.lst-annonce'); + foreach($elements as $element) { + $item = array(); + + // Lien vers le don + $item['uri'] = self::URI . $element->href; + // Id de l'objet + $item['uid'] = $element->getAttribute('data-id'); + + // Grab info from json + $jsonString = $element->find('script', 0)->innertext; + $json = json_decode($jsonString, true); + + $name = $json['name']; + $category = $json['category']; + $date = $json['availabilityStarts']; + $description = $json['description']; + $city = $json['availableAtOrFrom']['address']['addressLocality']; + $region = $json['availableAtOrFrom']['address']['addressRegion']; + + // Grab info from HTML + $imageSrc = $element->find('img.ima-center', 0)->getAttribute('data-src'); + $image = self::URI . $imageSrc; + $author = $element->find('div.avatar-holder', 0)->plaintext; + + $content = ' + +
+

' . $name . '

+

' . $description . '

+

Lieu : ' . $city . ' - ' . $region . '

+

Par : ' . $author . '

+

Date : ' . $date . '

+
+ '; + + // Titre du don + $item['title'] = '[' . $category . '] ' . $name; + $item['timestamp'] = $date; + $item['author'] = $author; + $item['content'] = $content; + $item['enclosures'] = array($image); + + $this->items[] = $item; + } + } + } + + private function getPageURI($page) { + $uri = $this->getURI(); + $haveQueryParams = strpos($uri, '?') !== false; + + if($haveQueryParams) { + return $uri . '&page=' . $page; + } else { + return $uri . '?page=' . $page; + } + } + + public function getURI() { + if(!is_null($this->getInput('q'))) { + return self::URI . $this->getInput('q'); + } + + return parent::getURI(); + } + + public function getName() { + if(!is_null($this->getInput('q'))) { + return 'Donnons.org - ' . $this->getInput('q'); + } + + return parent::getName(); + } +}