title: Croquer des liens
slug: croquer-liens
date: 2015-10-08
chapo: Un outil pour vérifier les liens cassés.

> **This is a very sad graph** · But to be hon­est I was expecting worse. I won­der if, a hun­dred years af­ter I’m dead, the on­ly ones that re­main alive will be­gin with “en.wikipedia.org”?
> 
> <cite>*[Web Decay Graph](https://www.tbray.org/ongoing/When/201x/2015/05/25/URI-decay)* ([cache](/david/cache/b8dd4f6d72c7810d42bc733cbab7509e/))</cite>

Entre [deux cours](/david/pro/enseignement/) et [trois entrainements](/david/stream/2015/), j’ai aussi le plaisir de bosser avec [Axel](http://noirbizarre.info/) pour faire tourner [data.gouv.fr](https://www.data.gouv.fr/fr/) :-). L’un des développements que l’on a réalisé au cours des six derniers mois est [croquemort](https://github.com/davidbgk/croquemort) : **un outil pour vérifier les liens cassés** en allant leur [croquer les orteils](https://fr.wikipedia.org/wiki/Croque-mort#Origine_de_l.E2.80.99appellation) régulièrement. Je considère qu’il est temps d’en parler suite à un premier gros bug en production qui représente symboliquement une version 1.0 (et deux jours d’indisponibilité…).

Concrètement, il s’agit d’un *microservice* consistant en une `API` à laquelle on peut passer des liens, unitairement ou en groupe, qui sont ensuite vérifiés de manière asynchrone avec une requête `HEAD`. C’est [nameko](http://nameko.readthedocs.org/en/stable/) qui a été utilisé couplé à Redis et Rabbitmq et le résultat est plutôt performant. Les métadonnées correspondant à chaque lien sont stockées mais non versionnées dans le temps. Il manque encore une interface de type *dashboard* pour avoir un résumé des liens vérifiés.

On s’en sert sur data.gouv.fr pour afficher [la disponibilité des ressources distantes](https://www.data.gouv.fr/fr/datasets/produits-alimentaires-ingredients-nutrition-labels/) aux visiteurs et prochainement avertir les producteurs s’ils ont des fichiers qui deviennent inaccessibles. C’est une manière d’améliorer la qualité de la plateforme en sensibilisant les acteurs sur la pérennité des données proposées. Le code est sous [licence MIT](http://opensource.org/licenses/MIT) — tout comme [celui du site](https://github.com/etalab/udata/) — et vous êtes bien évidemment invités à y participer et à l’adapter à votre propre usage.

> Think about speech, letters, newspapers, books, smoke signals... Each medium serves only a particular subset of social purposes, and each medium is technically transparent enough that people can understand what’s happening when they use it.
>
> The web is a single, increasingly complex infrastructure which has been adopted for mutually incompatible purposes. And almost nobody has a clear understanding of what the hell is actually happening when they type into a box on their screen.
>
> <cite>*[The Web of Alexandria (follow-up)](http://worrydream.com/TheWebOfAlexandria/2.html)* ([cache](/david/cache/8b4942e22d7d228bca3ba1a438499d8e/))</cite>
