Vérifier la validité de ses marque-pages Firefox
En effet, j’ai accumulé au fil des années quantité de liens qui pour certains ont du mourir. Plutôt que de les tester tous un par un, je me suis dit qu’il y avait des outils. Las, je suis tombé soit sur le nom d’une extension dont le développeur a retiré toute trace après s’être fâché avec les devs Firefox (j’ai pas ausculté l’affaire, je ne juge donc rien à part le résultat, à savoir plus d’extension), soit un freeware WIndows-Only. Youpi. J’ai donc opté pour une solution semi-automatique.
C’est du bon gros bash de porc brut de décoffrage que je vous livre là, libre à vous de l’améliorer, de le « terminer », bref, c’est même pas du GPLv3, c’est du WTFPL pur jus. Le fonctionnement est simple, on exporte ses marques-pages (dans le fameux fichier bookmarks.html), et ensuite, le script va le lire pour en faire une mega-liste de liens à tester et créer autant de fichier /tmp/*.list que de codes de retours différents qu’il aura reçu à partir des liens. Les liens purement morts (souvent plus de domaines) seront dans le fichier 000.list, les liens valides 200.txt, les redirections dans les fichiers 30x.list, les pages non trouvées dans 404.list, etc. A la fin il vous donne la liste des fichiers créés :
1 2 3 4 5 6 7 8 9 10 11 12 |
-rw-r--r-- 1 seboss666 users 1103 25 aoû 16:46 /tmp/000.list -rw-r--r-- 1 seboss666 users 11707 25 aoû 16:46 /tmp/200.list -rw-r--r-- 1 seboss666 users 40 25 aoû 16:40 /tmp/250.list -rw-r--r-- 1 seboss666 users 4527 25 aoû 16:46 /tmp/301.list -rw-r--r-- 1 seboss666 users 817 25 aoû 16:45 /tmp/302.list -rw-r--r-- 1 seboss666 users 28 25 aoû 16:39 /tmp/303.list -rw-r--r-- 1 seboss666 users 149 25 aoû 16:45 /tmp/403.list -rw-r--r-- 1 seboss666 users 462 25 aoû 16:45 /tmp/404.list -rw-r--r-- 1 seboss666 users 677 25 aoû 16:45 /tmp/405.list -rw-r--r-- 1 seboss666 users 62 25 aoû 16:40 /tmp/410.list -rw-r--r-- 1 seboss666 users 188 25 aoû 16:42 /tmp/500.list -rw-r--r-- 1 seboss666 users 50 25 aoû 16:39 /tmp/501.list |
Attention : dans le fichier 000.txt, qui regroupe tous les liens sans réponse, vous trouverez des lignes du genre « place:… » qui sont en fait les marque-pages spéciaux (Récemment marqués…). Aussi, je n’ai pas testé avec du marque-page dynamique (RSS mon amour), ils apparaitront peut-être ici aussi.
Je vous conseille quand même de double-vérifier certains liens qui vous paraissent mal classés, j’ai par exemple pris un timeout sur la liste des attributions de plage IPv4 de l’IANA juste parce que mon cousin a chargé une vidéo YouTube à ce moment-là ce qui a ralenti le traitement des liens au-delà des 20 secondes. Tiens à ce propos j’ai placé cette limite pour limiter le temps d’attente sur les liens dont les domaines ne répondent plus. Si vous pensez que c’est trop bas, libre à vous de modifier/supprimer.
Pour récupérer le code de retour d’une page, j’ai utilisé curl, dans un usage assez méconnu, car je pensais parser le résultat d’un curl -I, mais finalement, je n’ai pas eu besoin :
1 |
curl -I -s -o /dev/null -w "%{http_code}" http://blog.seboss666.info |
Le -I, tout le monde connaît, ça fait un HEAD à la place d’un GET. Le moins connu, c’est le -w « %{http_code} » qui fait un peu penser à une syntaxe de type Apache, et qui permet d’afficher le contenu de variables, dont la liste se trouve sur la page de manuel de curl.
Voici le script rapide :
1 2 3 4 5 6 7 8 9 10 11 12 |
#!/bin/bash urls="$(cat bookmarks.html |grep HREF |cut -d\" -f2)" rm /tmp/*.list for url in $urls;do result=$(curl --connect-timeout 20 -I -s -o /dev/null -w "%{http_code}" "$url") echo -ne "$url \n" >> /tmp/${result}.list done echo -ne "Results in the following files : \n" ls -l /tmp/*.list |
Résultat : Je peux m’assurer de directement supprimer les liens en 404, parce qu’ils ne sont tout simplement plus là. Les 410 aussi. Le 250 est étrange, mais en fait, c’est parce qu’il concerne un serveur FTP (celui d’OVH en l’occurrence), 250 étant le fait que le serveur est toujours là et qu’il a répondu parfaitement. Les 405 concernaient tous des pages Amazon. Apparemment chez eux, vous affichez ou vous affichez pas, mais vous ne vérifiez pas si ça existe encore (probablement pour limiter les actions des robots, mais comme ils parsent les pages pour l’indexation, c’est très rare). J’ai aussi eu droit à du 429 de la part de Reddit, parce que j’ai tenté trop de requêtes dans un temps qu’il considère trop court. Certains ont aussi détecté que c’était curl et donc bloqués les requêtes.
Il y a plus de 80 liens en redirection (301/302/303). Ce sont les plus longs à vérifier, parce qu’ils peuvent soit juste être dus à un passage à HTTPS, soit un changement de domaine. Soit un rachat pur et simple, avec le domaine qui existe toujours mais pas le site derrière et un hébergeur/registrar qui ne respecte pas le protocole en ne renvoyant pas le bon code d’erreur.
Au passage j’en ai profité pour corriger mes favoris qui seraient toujours valides pour les liens « finaux ». A force de vérifications, je réduis la liste de redirections/codes bizarres pour n’avoir que du lien valide. Ca fait toujours trop de marque-pages, et je pense que je pourrais supprimer certains d’entre eux qui au final ne m’ont plus jamais resservis par la suite. Mais ça, aucun script ni aucun outil ne peut le savoir à ma place. Pour l’instant…
Bonjour,
ça faisait un moment que je cherchais ça sous linux, merci !
Le script commence par dire qu’il ne trouve pas de fichier .list dans /tmp, ok je comprends.
Mais après on ne voit pas ce qui se passe, or les fichiers .list sont bien créés.
Du coup, après une petite recherche (parce que je n’y connais rien en scripts), j’ai ajouté un -x en fin de ligne 1, ce qui rend le script (très) bavard, et c’est assez ‘rassurant’ de voir qu’il avance bien.
Ca donne donc simplement:
#!/bin/bash -x
@+
C’est vraiment super basique, comme je l’ai dit, j’y suis allé en mode « crade, mais ça fait le taf ». Le premier message que tu rencontres, c’est parce que je lance la suppression des vieux .list sans vérification, et cette erreur t’indique, si c’est la première fois que tu le lances, qu’il n’y a aucun fichier, tout simplement.
Sinon en un peu moins verbeux que le -x, tu peux aussi rajouter une ligne
echo -ne $url » : « $result »\n »
avant le done, tu affichera chaque URL et son code de retour sur la sortie standard.
Y’a pas de souci, crade ou pas ça fait le boulot et c’est tout ce que je demandais 😉
Je rajoute la ligne que tu m’as donné et je vois.
Merci encore
Alors là merci ! Je suis en train de tester ton script et je vais enfin pouvoir faire le ménage dans cette horreur qu’est devenu mon gestionnaire de favoris ^^
A quand un dépôt git avec le code de tes astuces du coup? 🙂
Celui-là est vraiment trop crade pour être posé sur un git public. Ça m’a pas empêché de créer un git local ceci dit 😀
Mais oui à terme, pourquoi pas. J’attendrai de pouvoir l’héberger moi-même par contre. J’hésite encore, Gitlab me parait assez compliqué à gérer (pas nécessairement l’install, mais les mises à jour surtout). Avec à terme un miroir auto sur github. C’est prévu. Quand par contre, c’est une grande question.
framagit.org ?
Il ne faut jamais discriminer le code ! Crade ou pas ton code peut servir à quelqu’un
Bien ! Comment détecter les liens cybersquattés ?
C’est une très bonne question. Comme je ne teste que le code de retour, en l’état c’est impossible. Il faudrait parser le contenu pour vérifier par exemple qu’un des termes de l’URL est contenu, mettons dans le titre. Pas parfait, et beaucoup plus lent.