LeBonCoinBridge.php 7.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186
  1. <?php
  2. class LeBonCoinBridge extends BridgeAbstract{
  3. public function loadMetadatas() {
  4. $this->maintainer = "16mhz";
  5. $this->name = "LeBonCoin";
  6. $this->uri = "http://www.leboncoin.fr";
  7. $this->description = "Returns most recent results from LeBonCoin for a region, and optionally a category and a keyword .";
  8. $this->parameters[] = array(
  9. 'k'=>array('name'=>'Mot Clé'),
  10. 'r'=>array(
  11. 'name'=>'Région',
  12. 'type'=>'list',
  13. 'values'=>array(
  14. 'Alsace'=>'alsace',
  15. 'Aquitaine'=>'aquitaine',
  16. 'Auvergne'=>'auvergne',
  17. 'Basse Normandie'=>'basse_normandie',
  18. 'Bourgogne'=>'bourgogne',
  19. 'Bretagne'=>'bretagne',
  20. 'Centre'=>'centre',
  21. 'Champagne Ardenne'=>'champagne_ardenne',
  22. 'Corse'=>'corse',
  23. 'Franche Comté'=>'franche_comte',
  24. 'Haute Normandie'=>'haute_normandie',
  25. 'Ile de France'=>'ile_de_france',
  26. 'Languedoc Roussillon'=>'languedoc_roussillon',
  27. 'Limousin'=>'limousin',
  28. 'Lorraine'=>'lorraine',
  29. 'Midi Pyrénées'=>'midi_pyrenees',
  30. 'Nord Pas De Calais'=>'nord_pas_de_calais',
  31. 'Pays de la Loire'=>'pays_de_la_loire',
  32. 'Picardie'=>'picardie',
  33. 'Poitou Charentes'=>'poitou_charentes',
  34. 'Provence Alpes Côte d\'Azur'=>'provence_alpes_cote_d_azur',
  35. 'Rhône-Alpes'=>'rhone_alpes',
  36. 'Guadeloupe'=>'guadeloupe',
  37. 'Martinique'=>'martinique',
  38. 'Guyane'=>'guyane',
  39. 'Réunion'=>'reunion'
  40. )
  41. ),
  42. 'c'=>array(
  43. 'name'=>'Catégorie',
  44. 'type'=>'list',
  45. 'values'=>array(
  46. 'EMPLOI'=>'_emploi_',
  47. 'VEHICULES'=>array(
  48. 'Tous'=>'_vehicules_',
  49. 'Voitures'=>'voitures',
  50. 'Motos'=>'motos',
  51. 'Caravaning'=>'caravaning',
  52. 'Utilitaires'=>'utilitaires',
  53. 'Équipement Auto'=>'equipement_auto',
  54. 'Équipement Moto'=>'equipement_moto',
  55. 'Équipement Caravaning'=>'equipement_caravaning',
  56. 'Nautisme'=>'nautisme',
  57. 'Équipement Nautisme'=>'equipement_nautisme'
  58. ),
  59. 'IMMOBILIER'=>array(
  60. 'Tous'=>'_immobilier_',
  61. 'Ventes immobilières'=>'ventes_immobilieres',
  62. 'Locations'=>'locations',
  63. 'Colocations'=>'colocations',
  64. 'Bureaux & Commerces'=>'bureaux_commerces'
  65. ),
  66. 'VACANCES'=>array(
  67. 'Tous'=>'_vacances_',
  68. 'Location gîtes'=>'locations_gites',
  69. 'Chambres d\'hôtes'=>'chambres_d_hotes',
  70. 'Campings'=>'campings',
  71. 'Hôtels'=>'hotels',
  72. 'Hébergements insolites'=>'hebergements_insolites'
  73. ),
  74. 'MULTIMEDIA'=>array(
  75. 'Tous'=>'_multimedia_',
  76. 'Informatique'=>'informatique',
  77. 'Consoles & Jeux vidéo'=>'consoles_jeux_video',
  78. 'Image & Son'=>'image_son',
  79. 'Téléphonie'=>'telephonie'
  80. ),
  81. 'LOISIRS'=>array(
  82. 'Tous'=>'_loisirs_',
  83. 'DVD / Films'=>'dvd_films',
  84. 'CD / Musique'=>'cd_musique',
  85. 'Livres'=>'livres',
  86. 'Animaux'=>'animaux',
  87. 'Vélos'=>'velos',
  88. 'Sports & Hobbies'=>'sports_hobbies',
  89. 'Instruments de musique'=>'instruments_de_musique',
  90. 'Collection'=>'collection',
  91. 'Jeux & Jouets'=>'jeux_jouets',
  92. 'Vins & Gastronomie'=>'vins_gastronomie'
  93. ),
  94. 'MATÉRIEL PROFESSIONNEL'=>array(
  95. 'Tous'=>'_materiel_professionnel_',
  96. 'Matériel Agricole'=>'mateiel_agricole',
  97. 'Transport - Manutention'=>'transport_manutention',
  98. 'BTP - Chantier - Gros-œuvre'=>'btp_chantier_gros_oeuvre',
  99. 'Outillage - Matériaux 2nd-œuvre'=>'outillage_materiaux_2nd_oeuvre',
  100. 'Équipements Industriels'=>'equipement_industriels',
  101. 'Restauration - Hôtellerie'=>'restauration_hotellerie',
  102. 'Fournitures de Bureau'=>'fournitures_de_bureau',
  103. 'Commerces & Marchés'=>'commerces_marches',
  104. 'Matériel médical'=>'materiel_medical'
  105. ),
  106. 'SERVICES'=>array(
  107. 'Tous'=>'_services_',
  108. 'Prestations de services'=>'prestations_de_services',
  109. 'Billetterie'=>'billetterie',
  110. 'Évènements'=>'evenements',
  111. 'Cours particuliers'=>'cours_particuliers',
  112. 'Covoiturage'=>'covoiturage'
  113. ),
  114. 'MAISON'=>array(
  115. 'Tous'=>'_maison_',
  116. 'Ameublement'=>'ameublement',
  117. 'Électroménager'=>'electromenager',
  118. 'Arts de la table'=>'arts_de_la_table',
  119. 'Décoration'=>'decoration',
  120. 'Linge de maison'=>'linge_de_maison',
  121. 'Bricolage'=>'bricolage',
  122. 'Jardinage'=>'jardinage',
  123. 'Vêtements'=>'vetements',
  124. 'Chaussures'=>'chaussures',
  125. 'Accessoires & Bagagerie'=>'accessoires_bagagerie',
  126. 'Montres & Bijoux'=>'montres_bijoux',
  127. 'Équipement bébé'=>'equipement_bebe',
  128. 'Vêtements bébé'=>'vetements_bebe'
  129. ),
  130. 'AUTRES'=>'autres'
  131. )
  132. )
  133. );
  134. }
  135. public function collectData(array $param){
  136. $html = '';
  137. if (empty($param['c'])) {
  138. $link = 'http://www.leboncoin.fr/annonces/offres/' . $param['r'] . '/?f=a&th=1&q=' . urlencode($param['k']);
  139. }
  140. else {
  141. $link = 'http://www.leboncoin.fr/' . $param['c'] . '/offres/' . $param['r'] . '/?f=a&th=1&q=' . urlencode($param['k']);
  142. }
  143. $html = $this->getSimpleHTMLDOM($link) or $this->returnServerError('Could not request LeBonCoin.');
  144. $list = $html->find('.tabsContent', 0);
  145. if($list === NULL) {
  146. return;
  147. }
  148. $tags = $list->find('li');
  149. foreach($tags as $element) {
  150. $element = $element->find('a', 0);
  151. $item = array();
  152. $item['uri'] = $element->href;
  153. $title = html_entity_decode($element->getAttribute('title'));
  154. $content_image = $element->find('div.item_image', 0)->find('.lazyload', 0);
  155. if($content_image !== NULL) {
  156. $content = '<img src="' . $content_image->getAttribute('data-imgsrc') . '" alt="thumbnail">';
  157. } else {
  158. $content = "";
  159. }
  160. $date = $element->find('aside.item_absolute', 0)->find('p.item_sup', 0);
  161. $detailsList = $element->find('section.item_infos', 0);
  162. for($i = 0; $i <= 1; $i++) $content .= $detailsList->find('p.item_supp', $i)->plaintext;
  163. $price = $detailsList->find('h3.item_price', 0);
  164. $content .= $price === NULL ? '' : $price->plaintext;
  165. $item['title'] = $title;
  166. $item['content'] = $content . $date;
  167. $this->items[] = $item;
  168. }
  169. }
  170. }