Page 1 sur 1

Par où commencer pour créer un robot ?

Posté : 22 mai 2007, 15:05
par bravegars
Salut,

Je voudrais créer un robot, qui irait repérer la présence d'un lien retour. Que me conseillez-vous de faire ? Connaissez-vous des sites qui traitent de ce sujet ? Que me conseillez-vous de faire pour commencer ? Merci. :)

Posté : 22 mai 2007, 17:17
par Sékiltoyai
Je te conseille déjà de ne pas le faire en PHP.
Ce genre de choses, ce sont des services, donc des programmes qui restent exécutés en permamence. Personnellement je l'aurais fait en JAVA ou en C...

Posté : 28 mai 2007, 22:17
par bravegars
Merci pour ta réponse. Je vais l'écrire en php car je n'y connais rien en C et java. Je n'ai pas besoin qu'il soit connecter en permanence. En fait il se chargera de récolter des données tous les 15 jours, qui seront ensuite enregistrées dans une base de données.

Posté : 28 mai 2007, 22:28
par iclo
Oui, mais tout dépend du volume de données à récupérer, mais si tu dois "scanner" un grand nombre de pages web, php risque vite d'être dépassé.
Essaie de nous donner plus de détails.

Re: Par où commencer pour créer un robot ?

Posté : 28 mai 2007, 23:41
par Hubert Roksor
Que me conseillez-vous de faire
Je te conseille d'y réfléchir à huit fois :P

Il y a un gros potentiel de problèmes divers liés à ce genre de système. Je pourrais par exemple bombarder ton site de liens vers un autre site et ton serveur me servirait alors d'outil à DoS'er ou tout un tas d'autres abus que certains ne manqueront pas de trouver (même par hasard).

J'ai voulu tester la méthode HEAD en PHP et je me suis laissé emporter, je te recopie une routine qui pourrait t'être utile :
error_reporting(E_ERROR);

$status = array();
$urls = array(
	'http://localhost/lien1.php',
	'http://localhost/lien2.php'
);

$context = stream_context_create(array(
	'http'	=>	array(
		'method'	=>	'HEAD'
	)
));

foreach ($urls as $k => $url)
{
	// $http_response_header est une variable magique qui apparait quand on ouvre un flux HTTP
	unset($http_response_header);

	$fp = fopen($url, 'r', false, $context);

	if ($fp)
	{
		// Ça a marché, on présume une réponse 200
		$code = 200;
		fclose($fp);
	}
	elseif (isset($http_response_header))
	{
		// Voir http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html
		if (preg_match('#^HTTP.* ([1-5][0-9][0-9])#', $http_response_header[0], $m))
		{
			$code = $m[1];
		}
		else
		{
			// Ne devrait pas arriver
			$code = 'wtf';
		}
	}
	else
	{
		// Timeout?
		$code = 500;
	}

	$status[$code][] = $url;
}
Clique sur les fonctions que tu ne connais pas, le manuel est très bien à ce sujet. Inspire-t'en si tu le souhaites, mais je n'ai pas prévu de faire du support dessus donc j'espère que tu t'en sortiras :P

Posté : 29 mai 2007, 22:29
par bravegars
Salut, et merci encore pour vos commentaires.

Je vais vous expliquer un peu le projet. Je voudrais créer un annuaire d'un nouveau genre, qui établirait un classement suivant le nombre de liens pointant vers l'annuaire.

Donc, il faudrait que mon robot soit capable de retrouver tous les liens pointant vers mon annuaire.
Bien entendu il n'ira scanner que les sites qui se seront inscrits dans mon annuaire, ce qui réduit quand même pas mal sa tâche. :)

Merci pour ton code Hubert, je vais m'en servir et vais l'ajouter à tous les exemples que j'ai déjà récoltés de ci de la sur le net.