Aller au contenu

Automatisation De Recherches Par Internet


superyenyen

Messages recommandés

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('&amp;nbsp;&amp;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 :D. 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.

Lien vers le commentaire
Partager sur d’autres sites

  • 2 mois après...
  • 2 semaines après...
  • 3 mois après...

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 ?

Lien vers le commentaire
Partager sur d’autres sites

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.

Invité
Répondre à ce sujet…

×   Collé en tant que texte enrichi.   Coller en tant que texte brut à la place

  Seulement 75 émoticônes maximum sont autorisées.

×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

×   Votre contenu précédent a été rétabli.   Vider l’éditeur

×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.

×
×
  • Créer...

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer.