Par où commencer pour créer un robot ?

Eléphant du PHP | 130 Messages

22 mai 2007, 15:05

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. :)

ViPHP
ViPHP | 5924 Messages

22 mai 2007, 17:17

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...

Eléphant du PHP | 130 Messages

28 mai 2007, 22:17

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.

ViPHP
ViPHP | 2144 Messages

28 mai 2007, 22:28

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.

Administrateur PHPfrance
Administrateur PHPfrance | 3088 Messages

28 mai 2007, 23:41

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

Eléphant du PHP | 130 Messages

29 mai 2007, 22:29

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.