Archivage des liens dans mes notes zim

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.

À propos François
Doctorant en Physique fondamentale, libriste, membre de l'April et bidouilleur à ses heures perdues.

7 Réponses à Archivage des liens dans mes notes zim

  1. Desidia dit :

    Donc, si j’ai bien compris, tu insères une URL dans une note de Zim, puis un processus automatisé scanne ces notes à la recherche d’URLs et, le cas échéant, rapatrie la page correspondante.

    Le lien dans la page est alors modifié pour pointer vers ton archive au lieu du site original ?

    Est-ce qu’à chaque scan de tes notes, il doit vérifier si une archive existe pour ne pas répéter le rapatriement, ou bien est-ce qu’il y a une façon de taguer le lien pour dire que c’est déjà fait ?

    Tout ça est ingénieux, mais je t’avoue que ça me paraît un peu lourd.

    Concernant ta remarque sur l’user-agent, j’en profite pour signaler que wget est lui-aussi l’objet de rejet par certains sites, et que pour ne plus être contrarié par cela, il suffit de créer un .wgetrc spécifiant un user-agent plus «conventionnel»:

    $ cat .wgetrc
    user_agent = Mozilla/5.0 (X11; Linux i686; rv:7.0.1) Gecko/20100101 Firefox/7.0.1

    Cordialement,

    • François dit :

      Tu as tout compris. En gros, à partir de
      Un lien : http://www.sciunto.org qui propose…
      ça me donne
      Un lien : http://www.sciunto.org Archive qui propose…
      Si tu cliques sur l’url, c’est le lien classique, si c’est sur archive, c’est l’archive.

      Le script détecte la présence de l’archive (il teste la chaine de caractères qui suit un lien en pratique)

      C’est peut être lourd, mais c’est automatique. Il faut juste faire le boulot une fois, et de ce coté, ça avance :)

      J’ignorais pour wget, merci.

  2. Pascal Martin dit :

    Si tu veux quelques explications sur l’archivage de wikiwix n’hésites pas à me contacter.

  3. Robert45 dit :

    Merci de m’avoir fais découvrir zim

    Pour la gestion de mes notes et de mes liens/pages web j’utilise zotero qui permet de sauvegarder une page pour la relire + tard.
    Mais la souplesse de zim pour la prise de notes est intéressante
    Je vais voire comment mixer les +
    Cordialement

  4. Nicolas dit :

    Bonsoir,

    Comment ça se passe pour l’installation, c’est un greffon pour zim ou on lance la fichier .py indépendamment et quand on le souhaite.

    Merci pour l’idée et le partage code ;)

    Nicolas(Boyquotes)

    • François dit :

      Ce n’est pas un greffon (je ne me suis pas penché sur la doc pour savoir comment faire ça, mais ça peut venir…). Pour l’instant, tu as deux possibilités. Soit tu lances le script (à la main, cron…), soit tu passes par outils > outils perso. dans zim. Ca a pour conséquence d’ajouter une icone dans la barre de tâche.

      Un inconvénient (quel que soit la méthode, greffon ou autre) est que zim ne sait pas (encore, un patch est en cours) recharger les data quand un/des fichier(s) sont modifiés. Pour l’instant, il faut recharger le notebook si on veut voir les liens apparaître.

      Maintenant que j’ai un “proof of concept” valide, je suis en train de travailler sur un refactoring du code et aussi sur des actions (options) plus flexibles afin de mieux intégrer l’outil. Je vais essayer de pousser régulièrement des versions de devel sur le repo git.

Répondre

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Twitter picture

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Connexion à %s

Suivre

Get every new post delivered to your Inbox.