[Outils] Partage et archive d'articles

Tags: Services Open Source


Bonjour à tous,

Cet article fait notamment suite à celui-ci où le but était de partager des outils/logiciels Open Source. Aujourd'hui, nous allons parler de 2 logiciels: Shaarli et ArchiveBox.

Shaarli

Présentation

Nombre d'entre vous connaissent sûrement ce logiciel créé par sebsauvage. Shaarli vient de shaaring your links, il fallait bien un nom après tout :) Cet outil en PHP, HTML et JavaScript permet tout simplement de publier des liens sur une page. Il est minimaliste, ultra-rapide et n'utilise pas de base de données. Il s'installe super simplement sur un serveur et est conçu pour être mono-utilisateur (le prix de la simplicité). Son code source est disponible ici (miroir ici).

Installation

Cette étape ne peut pas être plus simple. La dernière version étant la v0.11.1, la manière la plus rapide pour installer est la suivante:

wget https://github.com/shaarli/Shaarli/releases/download/v0.11.1/shaarli-v0.11.1-full.zip
unzip shaarli-v0.11.1-full.zip
mv Shaarli /path/to/shaarli/

Faîtes ensuite pointer votre serveur web sur le dossier /path/to/shaarli/.

Mon instance

Lien
Lien

Mon instance disponible à cette adresse, est (si j'en crois le premier article partagé) en ligne depuis le 17 juin 2019. Ça ne l'aura pas échappé aux plus curieux d'entre vous (sauf ceux sur mobiles), mais un lien vers l'instance se trouve derrière cette icône.

Depuis Shaarli, vous pouvez retrouver en haut à droite le flux RSS si ça vous intéresse.

Shaarli permet la mise en place de plugins, j'ai notamment mis en place le service de commentaires isso (le même que sur ce site) si l'envie vous prend de commenter un shaare (c'est accessible en cliquant sur permalink ou sur l'icône commentaire pour chaque shaare).

Les articles sont issus notamment de ma veille technologique mais aussi de NextINpact et Le Monde que je suis globalement au quotidien. Sur certains articles que je trouve les plus pertinents, j'y ajoute l'étiquette top, en voici quelques-uns depuis juin:

Les liens ci-dessus redirigent vers mon instance de Shaarli afin que vous puissiez profiter de mes commentaires (désobligeants ou pour créer la polémique pour certains bien sûr, je ne peux pas m'en empêcher).

Voir plus loin

J'hésite encore à intégrer un peu plus ces articles partagés sur mon site.

  • Est-ce que je les partage à la fin de certains articles (tous les 3-4 mois par exemple) ?
  • Est-ce que je les laisse sur l'instance Shaarli sans les rapatrier ?
  • Est-ce que je fais une petite section (sous le sommaire ?) dans laquelle je mets les liens (marqués comme top ?) un peu à la manière de Lord et son Blogroll ?

Je partirai bien sur la troisième idée en ne mettant que les derniers liens marqués comme top depuis le dernier article publié. Qu'en pensez-vous ?

ArchiveBox

Avant d'aborder l'autre moitié de l'article, il faut savoir que je suis assez maniaque sur certain points. Par exemple sur mon site, je ne pourrai supporter d'avoir un lien mort dans un article. Vous allez me dire qu'il existe plusieurs solutions: le cache de Google ou bien Archive.org. Mais que se passe-t-il si le lien n'est pas/plus dans le cache de Google ou bien que Archive.org soit down, bloqué ou censuré dans un pays ? On retombe dans le piège du lien mort.

Présentation

Ceux qui connaissent Archive.org vont très vite comprendre le fonctionnement d’ArchiveBox bien que ce soit légèrement différent. Concrètement, ArchiveBox prend une liste d'URL que l'on souhaite archiver et crée un clone HTML local, statique et navigable de ces pages Web. Il enregistre à la fois HTML, JavaScript, fichiers multimédias, PDF, images, etc.

La différence avec Archive.org est qu'il fonctionne à partir d'une liste d'URL (il n'y a pas de champ où renseigner une URL depuis le service), c'est à la fois un avantage et un inconvénient: ça évite le troll ou le spam des utilisateurs mal intentionnés, mais on ne peut pas ajouter une page à archiver directement depuis le service.

Son code source est disponible ici (miroir ici). Vous pouvez remarquer ma parano en ayant quasiment toujours un miroir du code source des outils que j'utilise. Mon instance est disponible ici.

ArchiveBox est écrit en python 3.5 et utilise des outils tels que:

  • wget: un programme en ligne de commande de téléchargement de fichiers depuis le Web
  • Chromium headless: littéralement Chromium sans tête comme le dirait Wikipédia, c'est en fait Chromium sans interface graphique
  • youtube-dl: un programme en ligne de commande pour télécharger des vidéos depuis YouTube mais également de nombreuses autres plateformes
  • pywb: un framework d'archivage et de capture en python

Son avantage est de stocker les données de façons statique, c'est-à-dire qu'il ne requiert pas d'avoir un serveur qui tourne en permanence et qu'il peut servir uniquement en ligne de commande pour sauvegarder/archiver le Web.

Installation

Je ne vais pas ici parler de l'installation avec Docker, mais sachez qu'une image Docker existe.

Commençons par installer les quelques dépendances: apt install python3 python3-pip git curl wget youtube-dl chromium-browser. Nous allons ensuite télécharger le logiciel: git clone https://github.com/pirate/ArchiveBox.git && cd ArchiveBox. Libre à vous de rester sur la branche master ou d'aller sur le dernier tag posé (il date un peu cela dit).

Passons ensuite au sujet qui fâche: la configuration. Je ne suis vraiment pas fan de la façon dont la configuration de ce logiciel est gérée. En effet, celui-ci fonctionne à partir de variables d'environnements, un fichier de configuration serait pour moi bien plus simple à utiliser mais passons.

Je vous laisse donc gérer la configuration à partir de la documentation officielle. Le but est ensuite d'appeler le script ./archive en lui donnant la liste des liens que l'on souhaite sauvegarder et il crée ou mets à jour le dossier statique /output/ (pour info, j'ai actuellement 245 pages sauvegardées pour 2.1 Go de données).

Si on utilise la configuration via variables d'environnements, pour archiver une seule page, la commande serait du type:

source ~/.ArchiveBox.conf && echo 'https://www.pofilo.fr/post/20190428-open-source-tools/' | ./archive

Nous verrons plus tard comment l'utiliser avec des flux RSS ou des listes d'URL.

Customisation

Les 2 points suivants sont des dirty fix que j'utilise moi-même pour me simplifier la vie, peut-être que ça peut également vous intéresser.

Archiver uniquement les nouveaux liens

Pour mon besoin personnel, j'ai besoin de faire une capture à un instant donné, mais je n'ai pas besoin d'avoir les versions modifiées de la page. Les raisons sont multiples: ne pas parser systématiquement toutes les pages sauvegardées, économiser un peu d'espace disque et ne pas multiplier les requêtes vers les sites à sauvegarder (économie de bande passante pour les sites à archiver notamment).

Théoriquement, le paramètre ONLY_NEW est là pour choisir de tout parser à chaque fois ou que les liens qu'il ne connaissait pas, mais il semblerait que cette option ne marche pas. J'avais alors créé une issue en précisant que j'avais un fix et que je pouvais créer une merge request si besoin. Finalement, il s'avérait que le mainteneur d'ArchiveBox l'avait probablement déjà corrigé dans une grosse mise à jour (passage à Django), je ne l'ai donc pas partagé.

Bref, voici un dirty fix qui byepassera la configuration mais qui ne sauvegardera que les liens qu'il ne connaissait pas, je vous laisse faire un cherry-pick si ça vous intéresse.

Configuration

Pour ne pas avoir de soucis d'environnement en cas d'archivage en tâche cron ou autre, j'ai hard-codé ma configuration dans le fichier ./archivebox/config.py. J'en conviens que ce n'est pas propre, mais c'est plus pratique :)

Archiver c'est bien, mais quoi archiver ?

Personnellement, j'ai une liste sur mon Nextcloud dans lequel je répertorie les liens que je veux garder à tout jamais. Mais je souhaite également archiver les liens que je partage via l'outil Shaarli dont je vous ai précédemment parlé.

Voici donc la version simplifiée du script que j'appelle (pour l'instant manuellement mais ça marcherait sans soucis via une tâche cron):

#!/bin/bash

ARCHIVEBOX_PATH="~/ArchiveBox"
ARCHIVEBOX_BIN="./bin/archivebox"
# Nextcloud link containing the list of URL you want to archive
URL_MANUAL="replace-by-your-url"
# Shaarli RSS feed
URL_SHAARLI="https://links.pofilo.fr/?do=atom"

echo "--> Entering ${ARCHIVEBOX_PATH}"
pushd ${ARCHIVEBOX_PATH}

echo "--> Archiving ${URL_MANUAL}"
${ARCHIVEBOX_BIN} ${URL_MANUAL}

echo "--> Archiving ${URL_SHAARLI}"
${ARCHIVEBOX_BIN} ${URL_SHAARLI}

popd

echo "--> Done"

J'ai ensuite un lien symbolique entre /var/www et le dossier ./output généré. De plus, quand je donne la page RSS de Shaarli, il voulait par défaut archiver les pages Shaarli, j'ai pour pallier à cela (et à l'archive des pages YouTube) configuré la blacklist pour les exclure:

URL_BLACKLIST = r'http(s)?:\/\/(.+)?(youtube\.com)\/.*|http(s)?:\/\/links\.pofilo\.fr\/.*'

Voir plus loin

Pour chaque article publié sur Shaarli, vous pouvez voir une icône qui redirige vers l'archive de l'article vers archive.org. Pourquoi ne pas créer un plugin qui ferait la même chose vers une instance d’ArchiveBox ? De cette façon, chaque article que je partage serait automatiquement archivé et le lien serait accessible directement. Je ferai ça quand j'aurai un petit peu de temps :)

Conclusion

Bref, j'ai quitté les réseaux sociaux il y a quelques mois mais pour avoir un espace de partage (avec vous mais aussi le moi du futur), j'ai installé une petite instance de Shaarli. Et pour ma parano des liens morts ou des articles qualitatifs qui pourraient être indisponibles sur le Web (censure, fermeture du site …), j'ai mis en place une instance d’ArchiveBox qui grossit jour après jour (ça pourrait être un problème dans 10 ans, mais on se reposera la question).

Sur ce, je vous dis à la prochaine !

Commentaires




Ailleurs sur le Web


(2) laydgeur sur Twitter : "Au milieu de cette image, la centrale nucléaire de #Fessenheim. Tout autour, 850 éoliennes. Ça fait beaucoup ? Et pourtant, c’est juste le quart de ce qu’il faudrait pour produire autant d’électricité que la centrale. Explications en #thread ⬇️⬇️ https://t.co/Fu8povk6cg" / Twitter

A ressortir aux "écolos" qui n'ont pas encore compris que le nucléaire est l'une des solutions les plus propres.

via Shaarli le 09 décembre 2019

BMFTV sur Twitter : "Marine Lepen : « Pourquoi ne pas renommer le Black Friday en White Friday ? Nous sommes en France, pas en Afrique. » https://t.co/7CMj6jGgLj" / Twitter

Les commentaires sont tops: Pourquoi ne pas renommer patinoire en patiblanche? Pourquoi ne pas renommer Marine Lepen en Marine Lestylo ? On est pas en Angleterre ici En revanche, "broyer du noir", on garde. On parle de BMF hein, pas BFM ! ^^ — Permalin…

via Shaarli le 01 décembre 2019

Black Fuckday | Grise Bouille

Autant des gens vont beaucoup trop loin, autant les réductions peuvent être intéressantes. Pour des revenus modestes, bien que moralement contestable, le Black Friday permets d'acheter ce qui ne serait pas possible en temps normal.

via Shaarli le 30 novembre 2019

Généré avec openring