Web-Archiv Teil 6: RSS-Import zu Wallabag

Es gibt sicherlicht gute Gründe, warum die Wallabag-Macher von Haus aus keinen RSS-Import vorgesehen haben. Andererseits gibt es genau so viele gute Gründe, dies doch zu tun. Je nach Setup möchte man beispielsweise alle Artikel einer Nachrichtenseite zu einem bestimmten Thema abonnieren und dies automatisch zu Wallabag hinzufügen. Ein anderer Usecase ist es, die eigenen Twitter-Postings zu archivieren. Einen offiziellen Twitter-RSS-Feed gibt es nicht mehr, aber es gibt Alternativen.

Es gibt ein Python-Script, was diese Aufgabe für einen oder mehrere RSS-Feeds übernehmen kann: Jeder Eintrag des Feeds wird als neuer Link zu Wallabag hinzugefügt. Da Wallabag selbst in einem Docker-Container läuft, ist es ratsam, dieses Script ebenfalls in einen Container auszulagern, alleine schon deshalb, weil man auf seinem Host-System so wenig Pakete wie möglich installieren will, da es sonst zu Versionskonflikten installierter Software kommen kann.

Das Script ist simpel und braucht nicht viel – deshalb können wir das offizielle Python-Docker-Image als Basis installieren, welches sich einfach in der Registry finden lässt. Der Container braucht keine besondere Konfiguration oder Ports. Nachdem wir das Python-Image heruntergeladen und den Container gestartet haben, verbinden wir uns in die Shell des Containers hinein:
sudo docker exec -i -t python1 /bin/sh

Nun installieren wir erst einmal Updates und vi via

apt-get update
apt-get upgrade
apt-get install vim

Anschließend ziehen wir uns das Git-Repo des Projektes runter:

git clone https://github.com/Findus23/rss2wallabag.git

Dieses Python-Projekt führt praktischerweise eine requirements.txt-Datei mit, die alle Pakete enthält, die man zur Ausführung des Scripts braucht, diese installieren wir nun:

cd rss2wallabag
pip install -r requirements.txt

Das Script wird über zwei Dateien konfiguriert, config.yaml und sites.yaml. Von beiden Dateien gibt es eine Beispieldatei, die wir uns nun kopieren und editieren.

cp config.example.yaml config.yaml
cp sites.example.yaml sites.yaml

Anschließend werden die Dateien mit vi bearbeitet. Die config.yaml wird mit Hostname, Client-ID, Client-Secret, Wallabag-Username und Passwort gefüttert. Für jedes externe Programm muss man in Wallabag eine Client-ID mit einem automatisch generieren Secret erzeugen; im Menu unter API clients management zu finden.
Den Github-Username kann man auskommentieren und Debug auf False belassen, möchte man bloß RSS-Feeds importieren. Achtung: Setzt man Debug auf True, werden keine Links zu Wallabag hinzugefügt, selbst wenn alles in Ordnung ist. Um das Script produktiv nutzen zu können, muss man dies deaktivieren, auch wenn die Shell-Nachrichten anderes behaupten.

In der sites.yaml gibt man den oder die Feeds an, die man parsen möchte, zusammen mit ihren Tags. Die erste Zeile, der Titel des Feeds, wird automatisch als Tag hinzugefügt. Das Feld latest_article muss ein <title> des Feeds sein — ab diesem Beitrag wird alles neue importiert. Diese Datei wird laufend aktualisiert, sodass hier stets der zuletzt hinzugefügte Beitrag zu sehen ist.

Das Script kann nun per python main.py laufen – die Ausgabe in der Shell zeigt an, was passiert ist. Genauso leicht lässt sich dies via DSM-Cron fernsteuern, einfach

docker exec -i python1 /bin/sh -c 'cd rss2wallabag && python main.py' als Cron mit root einrichten; den Container-Namen gegebenenfalls anpassen.

Das Script bietet leider keine Möglichkeit, Beiträge automatisch als gelesen zu markieren. Ich habe eine Quick-and-Dirty-Lösung gefunden, die allerdings nicht sehr elegant ist. Für meinen Anwendungsfall funktioniert sie aber, da ich alles, was per RSS zu Wallabag kommt, ohnehin als gelesen markieren will. Möchte jemand nur manche Feeds als gelesen markieren, sollte er sich diese Sache nochmals genauer anschauen und gegebenenfalls jemanden fragen, der von Python mehr Ahnung hat als ich.

Die Wallabag Python-API führt den Befehl post_entries aus, der hier im Detail zu sehen ist. Diese Funktion muss nun um das archive-Attribut mit dem Wert 1 ergänzt werden.
Wir müssen also das main.py-Script bearbeiten, in Zeile 117 findet sich, was wir suchen.

Diese Zeile sieht so aus:
await wall.post_entries(url=url, title=title, tags=tags), wir ändern sie wie folgt ab:

await wall.post_entries(url=url, title=title, tags=tags, starred=0, archive=1)

und speichern die Datei.
Beim nächsten Lauf wird das Script die Einträge nun als gelesen markieren.

Die folgenden Themen werden in der Wallabag-Artikelserie behandelt:
Einleitung —  Auf Vorrat gespeichert: Das eigene Web-Archiv auf dem NAS
Teil 1: Was kann Wallabag?
Teil 2: Wallabag via Docker auf Synology NAS
Teil 3: Wallabag-Tuning
Teil 4: Wallabag und Paywalls
Teil 5: Wallabag-Backup und Versionsupdates
Teil 6: RSS-Import zu Wallabag
Teil 7: Wallabag und eReader
Teil 8: Archivebox und Wallabag

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.