superyenyen Posté(e) le 19 janvier 2010 Posté(e) le 19 janvier 2010 Bonjour, Suite au sujet qui n'a pas déchaîné les passions (sujet) , j'ai mis la main à la patte pour me permettre d'être prévenu quand un site web dispose d'informations qui m'intéressent et je vous fais un petit tuto si vous avez des besoins similaires. Dans l'exemple, le système va régulièrement et automatiquement scruter le site de petites annonces leboncoin.fr à la recherche d'objets que je recherche et transmet les nouvelles annonces par mail et/ou dans un flux RSS. Il est tout à fait possible de modifier le script pour rechercher sur d'autres sites d'annonces (ebay, priceminister, …) ou bien pour d'autres besoins (nouvelles annonces pour un site qui n'a pas de flux RSS, être informé quand un site ne répond plus …) Edit 24/01/2010 : la nouvelle version permet l'édition des mots clefs via une page web, amélioration du traitement et génération d'un flux rss. Fichiers du tuto : http://www.nas-forum...s-automatiques/ Vous avez besoin : [Obligatoire] Un NAS connecté à internet ou un espace web (Free par exemple). [Obligatoire] Un Serveur Web installé dessus (apache pour le synology) avec un php V5. [Obligatoire] La possibilité d'utiliser la fonction mail de php. [Obligatoire] Un système de CRON pour pouvoir exécuter la recherche régulièrement sans intervention manuelle. [Optionnel] Une base de données (mysql pour le synology), elle peut être remplacé par un fichier texte si vous n'en disposez pas. Le système se décompose en plusieurs fichiers ou services : 1 fichier php "annonce.php" qui a pour but d'aller faire les recherches et de les stocker en bases. 1 fichier php "config.php" que vous devrez modifier pour renseigner vos informations personnelles pour vous connecter à votre base de donnée. 1 fichier php "creation_db.php" qui s'occupe de la création des tables. 1 fichier php "rss.php", c'est tout simplement le flux rss. 1 fichier php "gestion/motclef.php" qui vous permettra d'éditer, supprimer, ajouter vos mots clefs (merci à ajax_crud). 1 fichier script qui a simplement pour but d'appeler la page php. 2 tables en base de données. 1 commande CRON qui appelle le script à intervalle régulier. La table mysql : 2 tables, une pour les annonces déjà lues , une pour les mots clefs. Pour ajouter cette table dans votre synology, il faut activer mysql dans votre interface d'administration et le plus simple est d'utiliser PhpMyAdmin (http://www.synology....s/valueapps.php) pour gérer vos bases mysql. Ou alors utilisez le script php "creation_db.php" Le fichier "Config.php" : Vous devez obligatoirement éditer le fichier pour : - Renseigner les informations de connexion à mysql. Le fichier "gestion/motclef.php" : Vous devez exécuter cette page pour ajouter vos mots clef, renseigner si les données doivent générer un flux rss et/ou l'adresse mail de notification. Sinon, vous pouvez utiliser phpmyadmin pour renseigner vos mots clefs. Le fichier PHP "annonces.php": C'est la base du système, les commentaires sont assez explicites pour comprendre le fonctionnement. Le script utilise « simplehtmldom » http://simplehtmldom.sourceforge.net/ qui permet de parser une page web facilement. <?php //ajoute le script qui permet de parser facilement une pageweb. //le fichier est disponible avec des exemples ici : http://simplehtmldom.sourceforge.net/ include('simple_html_dom.php'); //Fichier de configurations, les fonctions utilisées et tous les paramètres sont ici. include('config.php'); //récupération des motsclefs $db = mysql_connect($host, $username, $password); $db_selected = mysql_select_db($base, $db); $result = mysql_query("select M.* from SYNO_MOTSCLEF M;") or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error()); while($row = mysql_fetch_array($result, MYSQL_ASSOC)) { //petite variable qui permet de limiter les recherches, tant que la variable est à oui, on continue de rechercher les //annonces pour le mot clef $ajoute=true; $nombre_annonce=0; //on récupère la page web de recherche auquel on a ajouté $motclef=str_replace(' ', '+',$row['libelle_motsclef']); $html = file_get_html('http://www.leboncoin.fr/li?q='.$motclef.'&ca=7_s&th=1&c=0&w=137&fu=&gb=&ct=&zz=ex%3A75001'); //3 - on parcourt la liste des résultats (corresponds aux annonces foreach($html->find('*[nowrap]') as $element) { //petit filtre que je n'ai pas réussi à supprimer dans la recherche de base, si vous savez comment faire ? if ( ! ereg('Aujour', $element->plaintext) && ! ereg('class="date"', $element->outertext)) { $nombre_annonce+=1; if ($ajoute && $nombre_annonce<=$nb_annonces_max) { //on extrait le nom de l'annonce et le lien de l'annonce $name=$element->plaintext; //str_replace("NBSP","",recsec(filter($element->plaintext),false,true)); echo $name."<br/>"; $lien="http://www.leboncoin.fr".$element->find('a',0)->href; //on affiche l'annonce que l'on recherche //echo '<a href="'.$lien.'" >'.$name.'</a><br/>'; //A t-on déjà enregistré l'annonce ? $sql = "SELECT count(*) as count from SYNO_ANNONCES where link_annonce='".$lien."'"; $existe = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error()); $data =mysql_fetch_assoc($existe); if ($data[count]==0) { //L'annonce recherché n'a pas été trouvé en base, on va donc la rajouter //juste avant, on va récupèrer la description de l'annonce $description_annonce=" "; $contenu_html = file_get_html($lien); $contenu=$contenu_html->find('div[id=display_image]',0); $description_annonce = $description_annonce.$contenu->outertext; $contenu=$contenu_html->find('span[class=ad_text]',0); $description_annonce =$description_annonce.$contenu->plaintext; $requete="insert into SYNO_ANNONCES (title_annonce,link_annonce,id_motsclef,description_annonce) values ('".htmlentities($name,ENT_QUOTES)."','".$lien."',".$row['id_motsclef'].",'".htmlentities($description_annonce,ENT_QUOTES)."')"; $ret=mysql_query($requete) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error()); //on envoie le mail pour signaler qu'on a trouvé l'information si le mot clef le permet if ($row['adressemail_motsclefs'] != NULL) { $name=html_entity_decode(trim(str_replace('&nbsp;&euro;', ' euro', htmlentities($name,ENT_QUOTES))),ENT_QUOTES); sendingAutoMail($row['adressemail_motsclefs'],$name,$lien); } } else { $ajoute = false; } } } } } mysql_close(); ?> La page doit être installé dans votre répertoire web. Vous devez pouvoir la tester en tapant : http://IP_DU_SYNO/CHEMIN_DU_REPERTOIRE/NOM_DU_FICHIER.php Le fichier script : Tout simple, appelle simplement la page php, vous devez donc remplacer l'adresse par l'adresse de votre fichier php #!/bin/sh #appel de la page wget http://IP_DU_SYNO/CHEMIN_DU_REPERTOIRE/NOM_DU_FICHIER.php >/dev/null 2>&1 nommez ce fichier avec l'extension ".sh" et vous pouvez l'enregistrer dans un de vos répertoires de votre syno (pourquoi pas votre répertoire web) et donner les droits pour que le CRON puisse l'exécuter (en telnet ou ssh sur votre syno) : chmod 777 nom_du_fichier.sh La commande CRON : Maintenant, pour appeler le script régulièrement, il faut exécuter sous telnet ou ssh sur votre syno : Éditer le fichier cron avec vi ou utilisez nano: vi /etc/crontab ou nano /etc/crontab Et ajoutez la ligne suivante pour exécuter le script toutes les 15 minutes entre 7 heures et 22 heures : */15 7-22 * * * root sh /volume1/web/nom_du_fichier.sh Enfin, arrêtez et relancez CRON pour prendre en compte les modifications, toujours en telnet : /usr/syno/etc.defaults/rc.d/S04crond.sh stop /usr/syno/etc.defaults/rc.d/S04crond.sh start Autre solution pour relancer le cron, faite une modification de la mise à l'heure dans le portail d'administration du synology, cela relance le service cron. Et voilà. Merci à tous les autres tutos du site et fredlime pour son moniteur et pour tout le reste . Si vous avez des questions ou besoins de précisions, des remarques ou des critiques, des propositions et des conseils, n'hésitez surtout pas. 0 Citer
PatrickH Posté(e) le 21 janvier 2010 Posté(e) le 21 janvier 2010 Idem ils disposent souvent de flux RSS auquels il suffit de s'abonner ? non ? Patrick 0 Citer
superyenyen Posté(e) le 21 janvier 2010 Auteur Posté(e) le 21 janvier 2010 Certains de ces sites, leboncoin par exemple, ne propose pas ce service. C'est donc pour 0 Citer
Patrick21 Posté(e) le 21 janvier 2010 Posté(e) le 21 janvier 2010 Idem ils disposent souvent de flux RSS auquels il suffit de s'abonner ? non ? Patrick D 0 Citer
cricx Posté(e) le 21 janvier 2010 Posté(e) le 21 janvier 2010 Bonjour, Suite au sujet qui n'a pas d 0 Citer
PatrickH Posté(e) le 21 janvier 2010 Posté(e) le 21 janvier 2010 Merci pour le compliment, j'ai en effet les mots clefs en base sur ma version personnelle, mais je n'ai pas encore fait l'interface de saisie. Si d'autres personnes sont int 0 Citer
Patrick21 Posté(e) le 21 janvier 2010 Posté(e) le 21 janvier 2010 Merci pour le compliment, j'ai en effet les mots clefs en base sur ma version personnelle, mais je n'ai pas encore fait l'interface de saisie. Si d'autres personnes sont int 0 Citer
superyenyen Posté(e) le 24 janvier 2010 Auteur Posté(e) le 24 janvier 2010 Bonjour, Le tuto est mis 0 Citer
EtienneB Posté(e) le 18 avril 2010 Posté(e) le 18 avril 2010 Bonjour, merci pour ce script. j'ai d 0 Citer
superyenyen Posté(e) le 27 avril 2010 Auteur Posté(e) le 27 avril 2010 Toutefois, si quelqu'un pouvait m'aider, car je ne re 0 Citer
griffon Posté(e) le 27 avril 2010 Posté(e) le 27 avril 2010 Bonjour, J'ai fait l'installation du script que vous proposez et ca fonctionne (super!!), sauf pour le contenu des mails dont les sujets et corps de messages sont vides! Dommage... 0 Citer
superyenyen Posté(e) le 27 avril 2010 Auteur Posté(e) le 27 avril 2010 En effet, tout fonctionne super sauf depuis la mise 0 Citer
superyenyen Posté(e) le 27 avril 2010 Auteur Posté(e) le 27 avril 2010 Remarque, si vous souhaitez des modifications ou des am 0 Citer
EtienneB Posté(e) le 27 avril 2010 Posté(e) le 27 avril 2010 Remarque, si vous souhaitez des modifications ou des am 0 Citer
wanhaddou Posté(e) le 23 août 2010 Posté(e) le 23 août 2010 Merci pour ton commentaire. En effet, les recherches ont changés récemment sur le bon coin, remplace dans le fichier annonces.php la ligne suivante : $html = file_get_html('http://www.leboncoin.fr/li?q='.$row['libelle_motsclef'].'&ca=7_s&th=1&c=0&w=137&fu=&gb=&ct=&zz=ex%3A75001'); par $html = file_get_html('http://www.leboncoin.fr/annonces/offres/centre/occasions/?f=a&th=1&q='.$row['libelle_motsclef']); c'est la nouvelle fonction de recherche. Bon test. ça y est cela fonctionne, c'est top ! flux rss -> ok envoi email -> ok mais il m'a fallu modifier aussi la ligne 35 du fichier annonces.php ligne 35 $lien="http://www.leboncoin.fr".$element->find('a',0)->href; par $lien="".$element->find('a',0)->href; autre question: je ne comprend pas bien comment sont gérés les mots clés est ce que je peux mettre plusieurs mots clés dans la meme cellule ? faut il les séparer par un & ou autre caractère ? si je mets un mot clé par cellule (par ligne) sont ils affectés à une recherche ou a plusieurs recherches ? est ce que je peux pister plusieurs annonces différentes ? Fonctionalité : est il possible de mettre deux adresses email à la suite ? 0 Citer
wanhaddou Posté(e) le 24 août 2010 Posté(e) le 24 août 2010 Je rencontre un bug concernant l'ajout de plusieurs mots cl 0 Citer
superyenyen Posté(e) le 24 août 2010 Auteur Posté(e) le 24 août 2010 Je rencontre un bug concernant l'ajout de plusieurs mots cl 0 Citer
Messages recommandés
Rejoindre la conversation
Vous pouvez publier maintenant et vous inscrire plus tard. Si vous avez un compte, connectez-vous maintenant pour publier avec votre compte.