Lire un robots.txt

WRInaute occasionnel
Bonjour,

Un post pas très ancien ne m'a pas apporté de réponse claire. En plus, ce n'était pas le sujet principal du post, alors je me permets d'ouvrir celui-ci.
Voici la question...

Il faut que je lise un robots.txt. Supposons que je sois dans une section de "user-agent" qui va bien, et que j'ai stocké dans $pattern la chaîne de caractères indiquée en face d'un "Disallow:".
Quelle devrait être la regex à écrire pour comparer une url $url à ce $pattern ?
Je propose ceci, mais je n'en suis pas sûr:
Code:
$pattern = str_replace(array('+', '.', '*', '?'), array('\+', '\.', '.*', '\?'), $pattern);
$pattern = '@^'.$pattern.'@';
if (preg_match($pattern, $url))
   print('ça matche, donc à exclure'."\n");

Des avis ?
 
WRInaute impliqué
ok je vais le faire, patience :)
tu fais un robot en php ? perso je te conseille python pour se genre de truc, c plus rapide et plus elegant je trouve..
 
WRInaute occasionnel
Je l'ai fait, c'est juste que comme je trouve la doc officielle pas très claire, je voulais un avis sur la regex !! (sans compter Google qui reconnait maintenant des caractères génériques...)
 
WRInaute occasionnel
fbparis a dit:
ok je vais le faire, patience :)
MDR tout le monde avait compris et personne a voulu s'y coller !
j'avoue, je me suis dit "si à minuit y'a rien, je m'y mets"
(ça tient toujours...)
(r'gardez, y'a fbparis qui se frotte les mains en se disant "j'lui laisse ?")
 
WRInaute impliqué
bah je viens de verifier les specs, il semble que tu pourrais meme te passer de regex

genre pour chaque ligne de disallow il faut que :

strpos($host . $path, $host . $disallow) !== 0

ou $host est le domaine (www.example.com)
et $path la suite.. : / , /index.html, etc

oublis pas que pour un user-agent donné, il peut y avoir plusieurs lignes de disallow (mais pas de regex dans les disallow)

sinon je dirais que ton truc est bon, a condition que ton $url soit en fait seulement le path, non ?
 
WRInaute occasionnel
Oui, pardon, j'ai extrait un bout de mon code, et effectivement, $url ne doit être que le path.
Sinon, je ne pense pas pouvoir me passer du regex puisque Google reconnait des patterns du type:
Disallow: /path/tata*
ou encore
Disallow: *.jpg$

Ce qui m'inquiète en fait, ce sont les caractères qui pourraient apparaître dans un disallow et qui ont une signification particulière pour la regex. Par exemple, le signe "+" que je dois échapper pour qu'il soit compris comme un caractère par la regex. Je pense avoir oublier des caractères dans le même genre...
 
WRInaute impliqué
je pige pas bien ton probleme, que le google bot le fasse ou pas, ca change rien pour toi.. c'est mieux si ton robot respecte la norme pour robots.txt...

sinon tu remplaces "*" par ".*" dans ton pattern...
 
WRInaute occasionnel
Mon seul souci, c'est de pas oublier un truc. Si un gars commence à mettre des wildcards pour le bot Google, il peut (je l'ai vu) se dire que c'est OK pour les autres bots, et utiliser aussi des wildcards pour les autres robots.
Mais bon, je me fais peut-être ch... pour rien, après tout, la faute au gars s'il n'est pas dans la norme, hein ?
Bon, dans ce cas, j'ai bien noté le coup du strpos plutôt que tu preg_match. Ça me facilitera la vie.
Merci pour votre aide :)
 

➡️ Offre MyRankingMetrics ⬅️

pré-audit SEO gratuit avec RM Tech (+ avis d'expert)
coaching offert aux clients (avec Olivier Duffez ou Fabien Faceries)

Voir les détails ici

coaching SEO
Discussions similaires
Haut