feedcher

Nachdem ich mich bisher eher im Hintergrund betätigt hab’, meld’ ich mich nun auch mal zu Wort.
Ich versuche mal das Programm vorzustellen an dem ich momentan am ehesten arbeite :) : den feedcher.

Der Post hier wird vermutlich ab und an mal editiert werden, der jetzige Status ist mehr ‘ne Preview.

Warum der Name?

feedcher ist eine Zusammensetzung von “feed” im Sinne von RSS Feed und dem englischen Wort “fetch” was im Grunde schon den kompletten Sinn des Programms erklärt.

Sinn des Programms

Das Programm soll, bzw. ist schon auf eingeschränkte Art und Weise, fähig sein, RSS Feeds von externen Seiten zu fetchen. Mit fetchen meine ich hier aber nicht einfach die XML-ähnliche Datei des RSS Feeds auszulesen und zu speichern, sondern den kompletten Content der verlinkten Seiten zu analysieren und die wichtigen Sachen  zu speichern.

Der Hintergrund hierfür ist, dass viele (auch sehr große Seiten) die ursprüngliche Idee des RSS-Feeds (zumindest meiner Interpretation nach) etwas vernachlässigen, denn der <item> Block einer RSS-XML sollte meiner Meinung nach den kompletten Text des Artikels beinhalten, dies tut er aber in den seltensten Fällen. Wäre der <item>-Block korrekt, wäre es möglich den Feed zu laden und anschließend, unabhängig vom Zugang zum Internet, zu lesen.

Der feecher soll diese Lücke stopfen und den tatsächlichen Inhalt des <item> in einer MySQL Datenbank ablegen, diese stellt die ideale Möglichkeit dar, den Inhalt danach weiter zu verarbeiten (php, download als tgz, Erstellung eines neuen, vollständigen RSS etc)

Implementierung

Das Programm soll nach einer bereits bekannten Methode funktionieren (siehe munin oder logwatch):

Ein sogenannter Node lädt, verwaltet und ruft Plugins für jeden einzelnen RSS Feed auf, die dem Node dann die Daten zuführen und anschließend in die Datenbank geschoben werden. Der Node ist in dem Fall in C++ geschrieben, verwendete Libraries sind bis jetzt openssl (md5), curl (http) und mysqlpp (MySQL, obviously).

Die Plugins können in jeder beliebigen Sprache geschrieben sein, sie müssen nur auf stdout ihre Config und später in Dateien ihre Results ausgeben können (Ruby, Perl, Python…).

Bearbeitung eines Beispielfeeds

Der Node erkennt ein Plugin, holt sich dessen Config (Argument ist hier “autoconfig”) über den stdout (nach dem Schema “feedUrl=www.foobar.foo”) und holt sich den Feed. Nun wird jeder <item>-Block md5-gehashed und überprüft ob dieser Hash schon in der Datenbank existiert, wenn nicht wird der <item>-Block in eine Datei geschrieben und das Plugin mit dem Filename als Parameter aufgerufen. Das Plugin verarbeitet nur den <item>-Block und schreibt die Ergebnisse in seine neue Datei, welche der Node anschließend einliest und die ermittelten Daten in die Datenbank schreibt.

Status

Die Grundzüge des feechers funktionieren schon, eine bestimmte, hier nicht genauer genannte, Seite wird bereits korrekt eingelesen und verarbeitet. Im Moment hängt es noch an dem Vorhandensein eines korrekten Plugins, das von mir (in Python) geschriebene Plugin schafft es bisher nicht, die HTML-Tags korrekt zu entfernen, das sollte aber das kleinste Problem werden.

Die Entwicklung liegt zwar momentan auf einer kurzen Eisstrecke, wird aber bestimmt wieder anlaufen, auf Anfrage kann man die Quellen aber jetzt schon erhalten :)

mfg Hanny

PS: Feedback & comments are highly appreciated

No Comments

Leave a Reply

Your email address will not be published. Required fields are marked *

* Checkbox GDPR is required

*

I agree

Software
Officepad – Etherpad alternative based on Onlyoffice

During the Chaos Communication Camp 2019 I was working on a project called Officepad. The aim was to build a web interface comparable to Etherpad. Etherpad is a well established tool for online text collaboration used by software developers, activists and so on. Etherpad is relatively stable and works well …

Software
2
Bye bye Play Store! Mirroring Play Store Apks to private F-Droid repo

This small tutorial will show you how to setup your own F-Droid repository containing automatically mirrored Play Store apps. Using this private repo, you don’t have to relay on Google Play Store or third party stores anymore to keep non-free apps up-to-date. All you need to have is a Linux …

Software
Ebook reader app for Nextcloud

Because of lack of altenatives I decided to write a small ebook reader plugin for Nextcloud. The task of creating such an app was quite easy: I just forked the files_pdfviewer extension and replaced PDF.js with the Epub.js library. In the app template file, I used the reference ebook reader …