URL: https://linuxfr.org/news/publication-de-ua-universal-aggregator--2 Title: Publication de UA (Universal Aggregator) Authors: Moonz Benoît Sibaud, Nils Ratusznik et NeoX Date: 2014年03月18日T18:18:54+01:00 License: CC By-SA Tags: rss, atom, agrégation et atom_syndication Score: 40 La plupart des lecteurs vivent probablement la même expérience que moi : chaque jour, de très (trop) nombreuses minutes gaspillées à aller voir d’éventuelles mises à jour sur différents sites et forums. Avec RSS et maintenant Atom, un premier pas a été fait pour résoudre ce problème, avec des agrégateurs spécialisés. Restaient deux soucis : 1. Que faire des sites ne possédant pas de flux RSS ? 2. L’information à surveiller reste dispersée à deux endroits différents: le client de courriel et l’agrégateur RSS. Pour le second point, différentes solutions sont apparues, toutes avec des noms assez explicites (liste loin d’être exhaustive) : *rss2mail*, *rss2email*, *rss-to-mail*, et ma propre solution [maildir-feed](https://github.com/sloonz/maildir-feed). Restait le premier point. Jusqu’ici, ma solution ([par exemple](https://gist.github.com/sloonz/cec96c88e50632575b4f) pour le site [mangareader](http://mangareader.net)) était d’écrire un serveur web par source d’information qui faisait la transformation sous RSS. Solution vaguement satisfaisante jusqu’à un certain point que j’ai fini par atteindre, et qui m’a forcé à penser à une solution un peu plus générique, dont UA (Universal Aggregator) est le résultat. ---- [Le projet sur github](http://github.com/sloonz/ua) ---- UA est une solution très générique, dans le sens où il s’agit plus d’un méta-projet rassemblant plusieurs minuscules projets : * tout d’abord, la définition d’un format (JSON) pour décrire un message, pour que les différents composants communiquent entre eux ; * des producteurs, qui produisent des messages à partir d’une source d’information. Pour l’instant, seuls trois existent: `rss2json` (le nom se suffit à lui-même), `mangareader2json` (l’équivalent à mon exemple plus haut) et `ipboard2json` (exporte les messages d’un forum IPBoard) ; * d’éventuels filtres pour transformer les messages. Pour l’instant un seul est présent, `ua-inline`, qui télécharge les images pour les introduire dans le message lui-même (pour les clients de courriels interdisant le téléchargement de ressources externes) ; * un consommateur, qui présente ces messages à l’utilisateur. Pour l’instant, un seul est présent, `maildir-put`, qui envoie les messages sous forme de courriel dans une boîte de type [[maildir]] ; * un « chef d’orchestre » pour faire le lien entre tout ce beau monde, `ggs`. # Configuration La configuration se fait à partir du chef d’orchestre, `ggs`. Il est donc nécessaire de le présenter un peu. Il s’agit d’un service lançant périodiquement des commandes, un peu comme cron. Trois points le différencient de ce dernier : * il fonctionne à l’aide d’une logique d’intervalle entre deux lancements (« lance moi cette commande toutes les deux heures »), alors que cron fonctionne avec une logique d’évènement temporel (« lance moi cette commande toutes les heures impaires ») ; * il sait limiter le nombre de processus lancés en parallèle (à l’aide de la directive de configuration `workers`) et le temps alloué à chaque tâche (`timeout=`) ; * sa configuration est beaucoup plus riche: le fichier de configuration est un script shell. Commençons simple : nous voulons recevoir par courriel tous les journaux de LinuxFr.org : ```sh command 2000 "rss2json https://linuxfr.org/journaux.atom | maildir-put" ``` Cette ligne signifie « toutes les 2000 secondes » (environ une demi-heure), lance la commande `rss2json https://linuxfr.org/journaux.atom | maildir-put`. Cette commande n’a rien de spécifique à ua : vous pouvez tout autant la lancer telle quelle dans le shell et aura le même résultat. Vous comprenez immédiatement que pour une autre source, il suffit donc de remplacer la partie gauche du pipe. Effectuons-le pour mangareader, par exemple: ```sh command 2000 "mangareader2json http://mangareader.net/yotsubato | maildir-put" command 2000 "mangareader2json http://mangareader.net/kuroshitsuji | maildir-put" ``` Ajoutons les news de LinuxFr.org, ainsi que le flux pour XKCD et SMBC. Pour peu que vous ayez beaucoup de sources d’informations actives, votre boîte risque d’être rapidement en désordre. Le choix de maildir (plutôt que d’envoyer les messages en SMTP) vient de cette problématique : la possibilité d’envoyer les messages dans des dossiers spécifiques. Par exemple, mettons les messages de LinuxFr.org dans le dossier DLFP, mangareader dans mangareader et XKCD et SMBC dans Fun : ```sh command 2000 "rss2json https://linuxfr.org/journaux.atom | maildir-put -folder DLFP" command 2000 "rss2json https://linuxfr.org/news.atom | maildir-put -folder DLFP" command 2000 "mangareader2json http://mangareader.net/yotsubato | maildir-put -folder Mangas" command 2000 "mangareader2json http://mangareader.net/kuroshitsuji | maildir-put -folder Mangas" command 2000 "rss2json http://xkcd.com/atom.xml | maildir-put -folder Fun" command 2000 "rss2json http://feeds.feedburner.com/smbc-comics/PvLb | maildir-put -folder Fun" ``` Tout ceci est un peu fastidieux à écrire. Aucun problème, le fichier de configuration est un script shell, il est tout à fait possible de factoriser : ```sh rss() { command 2000 "rss2json \"1ドル\" |"\ " maildir-put -folder \"2ドル\"" } manga() { command 2000 "mangareader2json http://mangareader.net/1ドル | maildir-put -folder Manga" } rss https://linuxfr.org/journaux.atom DLFP rss https://linuxfr.org/news.atom DLFP manga yotsubato manga kuroshitsuji rss http://xkcd.com/atom.xml Fun rss http://feeds.feedburner.com/smbc-comics/PvLb Fun ``` Dernier souci : le client de courriel n’affiche pas les images par défaut, ce qui est particulièrement gênant pour XKCD et SMBC. Si vous avez suivi la description plus haut, vous aurez vu qu’il y a un filtre pour ça : ```sh rss() { command 2000 "rss2json \"1ドル\" | ua-inline |"\ "maildir-put -folder \"2ドル\"" } manga() { command 2000 "mangareader2json http://mangareader.net/1ドル | maildir-put -folder Manga" } rss https://linuxfr.org/journaux.atom DLFP rss https://linuxfr.org/news.atom DLFP manga yotsubato manga kuroshitsuji rss http://xkcd.com/atom.xml Fun rss http://feeds.feedburner.com/smbc-comics/PvLb Fun ``` Et voilà le résultat :  # Installation Pour les utilisateurs d’Arch, un PKGBUILD est disponible sur AUR. Pour les autres, rien de plus simple : ```sh git clone https://github.com/sloonz/ua.git make && sudo make install ``` Vous aurez besoin de libxml et go ; les scripts mangareader2json et ipboard2json nécessitent Python 3, PyQuery et aiohttp. Le tout est installé dans `/usr/local` ; vous pouvez polluer `/usr` en ajoutant `PREFIX=/usr` à `make install`. # Licence Ce logiciel est distribué sous licence MIT. Quant au nom, toute suggestion pour en trouver un meilleur est la bienvenue.