Fonction / Classe simple pour parser un robots.txt

Voici une fonction simpliste pour gérer les fichiers robots.txt :

class robots {
	function formatRobot($Instruction) {
		$Instruction=str_replace("*", ".*", $Instruction);
		$Instruction=str_replace("/", "\/", $Instruction);
		return $Instruction;
	}
	function robot($robots, $url) {
		$block=false;
		foreach($robots as $RobotLine) { // Boucle sur chaque règle
			preg_match("/^([^:]+):(.*)$/Usi", $RobotLine, $RobotInsctruction); // Explosion de la règle
			if(count($RobotInsctruction)!=3) continue; // Comptage du résultat et ignore si vide
			if(strtolower(trim($RobotInsctruction[1]))=="disallow"&&preg_match("/".$this->formatRobot(trim($RobotInsctruction[2]))."/", $url)) $block=true; // Blocker si vrai
			if(strtolower(trim($RobotInsctruction[1]))=="allow"&&preg_match("/".$this->formatRobot(trim($RobotInsctruction[2]))."/", $url)) $block=false; // Autoriser si vrai
		}
		return $block; // Retour
	}
}

Usage :

$robots=new robots;
$robotfile=file("http://www.monsite.com/robots.txt"); // Important, utilise la fonction file et non file_get_contents();
if(robots->robot($robotfile, $url)==true) echo "blocké !";

Pré-requis :

  • PHP

Ce qu’elle fait :

  • Explosion du robots.txt en expression régulière et application des règles sur une url.
  • Retourn false (ne pas bloquer) ou true (bloquer)

Ce qu’elle ne fait pas :

  • Tester le User Agent pour vérifier que la règle s’applique au robot en cours.

N.B. : Il se peut que les url’s sans wildcard après un path soient un peu mal gérées

N.B. : Il s’avère que lorsque Google lit un peu différemment l’instruction Allow par rapport à cette fonction. il ignore les wildcard suivants, sauf si ce dernier commence par la chaine autorisée au préalable. Bon a savoir.

Vous aimerez aussi...