Es begann als eigentlich simple Idee: Ich lese als alter Onlinesuchti viele Artikel und habe bereits seit Jahren Instapaper bzw. nun Pocket als ReadLater-Dienst im Einsatz. Es ist nämlich deutlich angenehmer, Artikel nicht sitzend am Schreibtisch, sondern gemütlich auf dem Sofa in angenehmem Layout zu lesen. Volle Empfehlung von meiner Seite dafür. Internetdienste zum Linksammeln und Später Lesen haben aber als Genre die unangenehme Eigenschaft, dass sie alle nach und nach richtig bescheiden werden. Entweder die Entwicklung stagniert komplett (siehe Pinboard) oder sie verschwinden komplett (siehe del.icio.us) oder sie machen sonstigen Unfug wie Instapaper zum Start der DSGVO, wo dann plötzlich alle europäischen Nutzer ausgesperrt wurden. Oder sie arbeiten mit monatlichen Abos mit erschreckend hoher Eurosumme. Zusätzlich haben Internetseiten auch die unangenehme Eigenschaft, dass sie entweder irgendwann offline gehen oder – fast noch schlimmer – hinter einer Paywall verschwinden. Was nützt das schönste Lesezeichen, wenn man dann zum Aufruf ein Jahresabo der Washington Post abschließen muss?
Daher hatte ich die eigentlich simple Idee: Ein Offline-Volltext-Archiv aller gelesenen und für gut befundenen Artikel erstellen. In einem möglichst simplen Format, das die Zeiten überdauert, plattformunabhängig ist und auf keine spezielle Software angewiesen ist: Markdown. Eine simple Auszeichnungssprache, die leichte Formatierungen enthält, aber lesbarer ist als reines HTML. Sie ist in ihrer Flexibilität sowohl im Plaintext problemlos lesbar, kann aber auch von zig verschiedenen Anwendungen dargestellt werden.
Das erwies sich dann als erstaunlich kompliziert: Pocket selbst bietet keinen Volltext-Download des Artikelarchivs an. Es gibt eine Premium-Version, die ein Volltextarchiv anbietet, aber fast 50€ pro Jahr kostet. Genau wie die durchschnittliche deutsche Kommune will ich aber nicht für mein Archiv bezahlen müssen.
Also habe ich mich auf die Suche nach einer passenden Software gemacht und war etwas überrascht, dass es zwar sehr viele Optionen gibt, aber dass alle haarscharf an meinen Requirements vorbei gingen:
- Pocket bietet einen Export an, der allerdings nur alle Links in „read“ und „unread“ sortiert, weder die Favoriten enthält noch die Tags
- Instapaper ist seit der Katastrophe bei der DSGVO-Einführung kein verlässlicher Partner mehr
- Diverse Tools wie MarkDownload bieten einen Download von Webseiten als Markdown an, aber automatisieren dies nicht. Man muss also jede Webseite manuell speichern. Wäre theoretisch ok, integriert sich aber extrem schlecht in meinen Workflow, da es MarkDownload nicht für Android gibt
- Eine passende App wäre Markdownr, aber diese erstellt von Haus aus katastrophale Dateinamen, was dann selbst mit einem Nextcloud/Dropboy/Syncthing-Sync von Desktop und Android dazu führen würde, dass man immer den Titel des Artikels auf der Handytastatur schreiben müsste. Also genau daneben
- Nextcloud Booksmarks funktioniert auch gut. Es zieht sich den Volltext zu den gespeicherten Links und legt diese in der Nextcloud-SQL-Datenbank ab. Ist zwar kein Markdown-Plaintext, aber den Text kriegt man ja durchaus aus der Datenbank exportiert – aber ich habe keine App gefunden, die Mobile wirklich gut funktioniert
- Obsidian hat eigentlich alles integriert – man kann mit dem Pocket-Plugin seine Leseliste syncen, auch nach Tags gefiltert und dann aus der Liste Artikel als Markdown erstellen. Leider liefer auch hier die Pocket-API keinen Volltext, sondern nur ein Abstract. Den Volltext kann sich das Obsidian-Plugin „Extract URL content“ besorgen, was Obsidian zum sehr coolen Notiztool macht. Aber in diesem Fall würde es dann halt für jeden Artikel drei Extraklicks bedeuten, was man dann am Ende nicht macht und gemein gesagt auch nur die Nerdvariante von „Kopiere den Artikeltext manuell in ein Worddokument“ ist.
- Pinboard hat ein Volltextarchiv, welches aber hinter einem Abo liegt und Pinboard selbst stagniert als Dienst auch so extrem, dass ich die Eignung als Langzeitarchiv anzweifle.
- Wallabag wird hier als selbstgehosteter Bookmarkdienst gerne empfohlen, aber dort traue ich mir das Hosting gerade nicht so ganz zu und mein aktueller Hoster All-Inkl unterstützt auch kein Docker.
Alle Lösungen funktionieren so halb und alle Lösungen waren so nah dran am gewünschten, dass es schnell klar war, dass es irgendwo Standard-Libraries geben muss. Denn es wäre unwahrscheinlich, dass ein Einzelentwickler einer kleinen Android-App im PlayStore selbst wunderbar auf zig Seiten gut funktionierende Parser entwickelt und dann nur eine kleine App mit dem Hinweis „quick project“ erstellt. MarkDownload hat dann auf der Github-Seite den entscheidenden Hinweis gegeben: readability.js .
Also in einem Anflug von Wahnsinn schnell Python installiert. Ich kann glaube ich von mir behaupten, dass ich keine oder wenn, dann nur sehr wenig Ahnung vom Programmieren habe: Der Informatikunterricht ist über 20 Jahre her und beschäftigte sich mit TurboPascal und Assembler, was auch damals schon gnadenlos veraltet war. Alle anderen Gehversuche in dem Bereich sind auch schnell wieder eingeschlafen. In der Zwischenzeit habe ich aber einiges mit NoCode-Tools wie IFTTT gemacht und die wildesten Dinge in Excel.
Und was soll ich sagen? Es ging erstaunlich einfach von der Hand. Mit Hilfe der Dokumentation und diversen Codeschnipseln habe ich es in wenigen Stunden geschafft ein erschreckend gut funktionierendes Python-Skript zu produzieren. Es nimmt Links, lädt sie herunter, jagt sie durch readability, konvertiert dessen Output in Markdown und speichert sie nach Titel auf der Festplate ab. Es war viel Trial & Error und der Experte fällt höchstwahrscheinlich rückwärts vom Stuhl, aber hey, ich bin stolz drauf.
Schnell kam die Idee auf, Pocket direkt als Mittelmann zu killen. Ich hatte wirklich keine Lust mit deren API herumzuspielen, um an die Links zu kommen. Und wenn man schon ein Offline-Archiv mit Artikeln hat, dann gibt es wirklich wenig Gründe, einen Cloudanbieter zwischenzuschalten, der einen stetig zum Abschluss eines Abos nötigen will. Auf einer Radtour kam dann die nächste Idee: Ich habe mir bekannterweise einen sehr gut funktionierenden Workflow zum Lesen von Nachrichten per E-Mail und wenn man eh schon seine Nachrichten per Mail konsumiert, warum nicht auch den Readlater-Dienst ins Mailpostfach integrieren?
Also weitergebastelt. Herausgefunden, wie man sich per Python in ein Mailpostfach einwählt und Mails liest. Den Inhalt der Mail ausgelesen. Recherchiert, wie man URLs in Text findet. Herausgefunden, wie man per Python Mails verschickt. Einen Workflow überlegt. Und jetzt habe ich mir an einem chilligen Wochenende meinen eigenen Readlater-Dienst gebaut: Man schickt eine Mail mit einem enthaltenen Link an eine Mailadresse und bekommt dann eine E-Mail mit dem Volltext dieses Links zurück. Die Mail wird automatisch in einen Unterordner sortiert. Dieser „Ungelesen“-Ordner voller Volltexte bildet dann die Leseliste. Die gelesenen Artikel können dann einfach in weitere Ordner sortiert werden. Alles kann mit der in jedem Mailprogramm vorhandenen Suchfunktion bequem durchsucht werden. Es ist auf wirklich jedem emailfähigen Gerät verfügbar, auch offline. Tracking- und werbefrei. Mit integrierter Sharing-Funktion.
Neue Fähigkeiten führen zu neuen Ideen: Ich habe bislang mit Calibre meine Pocket-Liste als ePub heruntergeladen, um die Artikel gemütlich auf dem Sofa auf dem eBookreader zu lesen. Das ist nach jahrelanger Erfahrung die angenehmste Art und Weise, um längere Artikel aus dem Netz zu lesen. Keine blinkende Werbung an der Seite. Keine zweckfreien Bilder. Keine „related Artikel“. Kein Tab nebendran, der einen ablenkt. Kein Chat, der aufpoppt. Augenfreundliches eInk statt Monitor und natürlich gemütliches Lungern auf dem Sofa, der Gartenbank oder in der Badewanne statt aufrechtes, seriöses Sitzen am Schreibtisch. Der Abschied von Pocket hat das natürlich gestoppt.
Daher habe ich ein weiteres Programm geschrieben. Das loggt sich einmal am Tag in das Postfach ein, zieht sich die Volltexte der Mails aus dem „Ungelesen“-Ordner, wandelt sie in eine Textdatei um und mailt mir einmal am Tag eine aktualisierte Datei, die dann auf den Reader gezogen werden kann. Eigentlich sollte es ein ePub werden, aber dessen Erstellung ist erstaunlich kompliziert und gerade bin ich mit dem reinen Text sehr zufrieden.
Was bleibt als Fazit? Wenn ich vernünftig gegoogelt hätte, wäre ich auf archivebox.io gestoßen und hätte den Python-Ausflug gar nicht machen müssen. Aber er hat sich als erstaunlich fruchtbar erwiesen und ich bin höchst zufrieden. Das war deutlich einfacher als ich es mir vorgestellt habe und es wird nicht das letzte Projekt dieser Art sein. Es ist ein neues Werkzeug im Toolkit dieses Lebens und genau wie der DIY-Hobbyhandwerker, der sich eine Schlagbohrmaschine gekauft hat, werde ich jetzt ab Samstagmorgen Punkt 6 Uhr bohren, bis die Nachbarn sich beschweren. Wenn ich das alles ausführlich getestet habe, werde ich es vielleicht irgendwann auch veröffentlichen. Mal schauen.