Situation

J'utilise zim tous les jours, notamment afin de conserver ma veille. Cette veille est issue du traitement de mes flux RSS. Lorsqu'une page contient une information intéressante sur un sujet, j'ajoute le lien dans la page zim qui correspond. J'y ajoute parfois des commentaires. Je fais de même lorsque je navigue (recherche d'astuces, comparatif pour achats...). Je pense que la majorité des personnes utilisent des marques pages dans leurs navigateurs. Je ne trouve pas cela pratique car il est difficile de les ranger, de les manipuler, de les commenter. Zim m'enlève cette difficulté.

Problématique

Cependant, chacun sait que le web bouge sans cesse. Le problème vient lorsque vous décidez de vous pencher sur un sujet. Vous ouvrez la page zim en relation afin de retrouver toutes les informations accumulées aux fils des mois ou des années. Vous retrouvez vos liens mais certains sont morts. Plusieurs raisons à cela : le site peut être inaccessible, avoir changé de CMS (liens cassés), de domaine ou simplement avoir disparu, voir le contenu retiré... dommage le lien était intéressant.

Première tentative

Nous ne sommes pas les premiers à faire ce constat, d'autres ont anticipé en créant des archives du web. La plus connue est sans doute archive.org. D'ailleurs, je vous conseille le module resurrect pages pour firefox.

Il y a toujours un mais... La solution n'est pas idéale, car nous sommes dépendant d'un service qui peut ne pas avoir archivé la page souhaitée : le crawler n'est pas passé au bon moment, le crawler n'est pas parvenu jusqu'à la page ou le site n'a jamais été visité...

Seconde tentative

L'idée est de mettre en place sa propre archive. On n'est jamais mieux servi que par soi-même, pas vrai ? Les outils utilisés par ces sites d'archives me semblent démesurés pour mes besoins. Un wget de la page me suffirait amplement dans 95% des cas. Bien sûr, on ne va pas faire ça à la main, ce serait trop long, et rapidement on ne le ferait plus.

Un script python va donc nous sauver la mise. En scannant à la recherche d'url toutes nos pages zim, il va récupérer la page avec le module urllib.request. Cette page est sauvée dans l'endroit de son choix. On ajoute un lien (comme le fait wikipedia dans les références via wikiwix) vers notre fichier téléchargé. Zim gère l'ouverture des fichiers avec xdg-open, chez moi c'est géré dans

~/.local/share/applications/mimeapps.list

Un simple clic sur l'archive ouvre la page dans le navigateur.

Le script peut être automatisé à l'aide d'une tâche cron ou via la fonctionnalité "outil personnalisé" de zim.

Quelques remarques

Comme je l'ai spécifié, j'utilise urllib.request. Je n'ai pas trouvé mieux dans la récupération de page. Si vous connaissez une bibliothèque plus performantes, je suis toujours preneur.

J'ai du changer le user-agent. Pour ceux qui ne connaissent pas, c'est la façon dont est identifié le visiteur du site. Par défaut, c'est python, je l'ai changé pour Firefox car des sites comme wikipedia me jetais. Sans doute parce qu'ils préfèrent qu'on utilise l'API.

La solution est implémentée pour zim, mais l'idée est générique pour ceux qui utiliseraient d'autres solutions de prise de note.

Idées d'amélioration

Il serait peut être pertinent de rafraîchir les archives tous les mois en conservant les versions anciennes (au cas où). Typiquement, certains commentaires sont très utiles et il peut être bon de les avoir. Une autre bonne chose serait d'avoir la possibilité d'empêcher délibérément l'archivage. Parfois, j'ai des liens vers des dépôts pour lesquels il n'y a aucun intérêt à avoir une copie ! Si vous avez d'autres propositions...

Code

C'est sous GPLv3, nécessite python3. J'ai déposé le code ici, plus pour information que pour production pour le moment, le code est relativement chaud. Si des gens sont intéressés par des versions stables dans le futur, je les proposerai.