ubuntuusers.de

python-feedparser zuverlässig arbeiten lassen

Status: Ungelöst | Ubuntu-Version: Kein Ubuntu
Antworten |

5in4

Avatar von 5in4

Anmeldungsdatum:
23. Februar 2007

Beiträge: 149

Wohnort: München

Hallo,

ich habe mir einen eigenen Feedreader ähnlich tinytinyrss gebaut, der python-feedparser (http://feedparser.org/) zum Einlesen der Feeds benutzt. Leider sind ziemlich viele Feed im Internet ziemlich kaputt, wodurch man nicht zuverlässig die letzte Änderung oder sogar nur den Titel des Feed einlesen kann. Hat jemand eine Methode zur Hand, um das besonders gut zu bewerkstelligen, oder eine Beispielimplementation? Ich hangle mich zur Zeit durch try/excepts, bis letztendlich ein Fallback-Wert benutzt wird, aber das kann ja wohl irgendwie nicht der Sinn der Sache sein : /.

Dankeschön und schöne Grüße

Vegeta

Avatar von Vegeta

Anmeldungsdatum:
29. April 2006

Beiträge: 7943

Ich habe in meinem Programm, das zum Überwachen von Webseiten ist, auch einen Feed-Reader eingebaut. Du musst einfach nur den XML-Baum parsen und die dir wichtigen Bestandteile übernehmen. Das erste <title></title> gibt den Namen des Feeds wider, Links sind direkt mit <link></link> erkennbar, in den <item></item>sind die einzelnen Nachrichten verpackt. Auch hier wieder <title></title> für den Titel und unter <description></description> der Text, kann manchmal aber auch abweichen und z.B. <content:encoded></content:encoded> für HTML sein. RSS und ATOM unterscheiden sich ein bisschen von den Tags sind aber im Großen und Ganzen vom Aufbau identisch.

Du musst nach dem Extrahieren lediglich den Quelltext wieder in gültiges HTML umwandeln, dann kannst du den Inhalt z.B. mit WebKit anzeigen lassen. Mit Python selber kann ich dir leider nicht helfen.

Lysander

Avatar von Lysander

Anmeldungsdatum:
30. Juli 2008

Beiträge: 2669

Wohnort: Hamburg

5in4 schrieb:

Hat jemand eine Methode zur Hand, um das besonders gut zu bewerkstelligen, oder eine Beispielimplementation? Ich hangle mich zur Zeit durch try/excepts, bis letztendlich ein Fallback-Wert benutzt wird, aber das kann ja wohl irgendwie nicht der Sinn der Sache sein : /.

Zeig uns doch mal den Quellcode! Evtl. sieht man daran Möglichkeiten, etwas zu verbessern?

5in4

(Themenstarter)
Avatar von 5in4

Anmeldungsdatum:
23. Februar 2007

Beiträge: 149

Wohnort: München

@Vegeta: Ja, nur löst das das Problem der kaputten Feed ja nicht, dieser hier http://feeds.gawker.com/kotaku/full hat zum Beispiel zumindest für feedparser keine mir bekannte Möglichkeit ein Datum auszugeben. Die Anzeige der Feeds geschieht dann über eine separate Browserapplikation und klappt ganz gut ☺

@Lysander: Hätte ich mal selber drauf kommen können 😛 http://paste.ubuntuusers.de/399348/

Mit diesem Code lese versuche ich das letzte Update auszulesen. normalerweise liegt ein von feedparser vorgeparstes Datum in self.f.feed.updated_parsed, manchmal aber auch nur in Form eines Strings in self.f.feed.lastbuilddate, was dann noch in ein Date-Objekt umgewandelt werden muss. Wenn beides nicht zutrifft, lese ich das manuell gesetzte Datum des letzten Updates aus der Datenbank aus. Und genau das letzte möchte ich gerne los werden.

In der Produktivversion vergleiche ich zur Zeit die einzelnen Daten der Einträge der Feeds mit dem Datum aus der Datenbank, das funktioniert relativ zuverlässig, aber damit tauchen wieder andere Probleme auf, die ich gerne umgehen würde.

Vielen Dank und schöne Grüße

(edit: Formatierung)

Antworten |