2009-06-25 2 views
0

Ich denke daran, einen Daemon zu schreiben, Feeds durchlaufen und fügen Sie sie dann als ActiveRecord Objekte in die Datenbank.Aggregieren von Feeds in Rails-Anwendung

Erstens, ein Problem, das ich habe, ist, dass ich nicht zuverlässig den Autor/Benutzer einer Geschichte mit dem Feed-Normalizer-Juwel abrufen kann. Es scheint, dass es das Tag manchmal nicht erkennt (ich weiß nicht, ob sich jemand anderes diesem Problem gestellt hat).

Zweitens habe ich noch niemanden gesehen, der RSS-Feeds in Datenbankeinträge konvertiert. Ich muss dies tun, da jeder Eintrag Assoziationen mit anderen ActiveRecord-Objekten haben wird. Ich kann dafür keine Edelsteine ​​finden, aber könnte ich etwas wie acts_as_feed hacken, um das zu tun?

+0

Warum, es ist ziemlich normal, RSS und andere Feeds in Datenbankeinträge zu konvertieren .. Programmatic Access ist der springende Punkt eines XML-Feeds! Sie müssen geeignete Modelle erstellen und diese beim Analysieren des Feeds aktualisieren und speichern. Ist das, was du fragst? – Swanand

+0

Ah, ja, darum bitte ich mich. Allerdings kann ich kein Juwel finden, das das tut. Ich habe einen Rfeedpaser gefunden, der in mancher Hinsicht besser ist als der Feed-Normalizer, aber er speichert die Einträge immer noch nicht in der Datenbank. Aber wenn ich mir den Code anschaue, denke ich nicht, dass ich ein solches Juwel finden werde, weil es so viele Informationen gibt, die in einen Feed eingegeben werden können. – Jaryl

Antwort

0

Verwenden Sie keine SimpleRSS. Es dekodiert keine HTML-Entitäten für Sie und ignoriert gelegentlich die Struktur des Feeds.

Ich habe es am einfachsten gefunden, den Feed als XML mit XMLSimple zu analysieren, aber Sie können einen beliebigen XML-Parser verwenden.

0

SimpleRSS stellt eine sehr einfache API zur Verfügung und funktioniert ziemlich gut auf den meisten Feeds. Ich empfehle, die Implementierung nicht zu betrachten, da es sich bei dem "Parser" um eine Reihe von Regexes handelt (was auf so vielen Ebenen falsch ist), aber es funktioniert gut.

Daemons ist ein gutes Juwel, um es im Hintergrund zu betreiben.

Wenn Sie einen aktiven Datensatz verwenden, sollten Sie die Anweisungen für die Verwendung von AR außerhalb von Schienen befolgen und anschließend die Modellklassen inline definieren. Dies wird ein wenig aufblähen.

RSS-Feeds sind ziemlich inkonsistent, ist dies der Fall ist, durch wir

date = i[:pubDate] || i[:published] || i[:updated] 
    body = i[:description] || i[:content] || i[:summary] || "" 
    url = i[:guid] || i[:link] 

auch aus Erfahrung, verwenden, stellen Sie sicher, dass Sie versuchen, alles zu retten (und nicht vergessen, dass Timeouts durch normale Rettung nicht gefangen werden). Es ist nervtötend, RSS-Daemons, die schlechte Daten bekommen, ständig abzustoßen.

0

Der beste Ansatz ist die Verwendung eines Schienenmotors, der an einen Feed API like Superfeedr's angeschlossen ist. Das Abrufen von RSS-Feeds bedeutet, dass Sie Ihre eigenen asynchronen Mitarbeiter und/oder ein Warteschlangensystem ausführen müssen, das bei der Erstellung und Pflege von Überstunden recht komplex sein kann. Sie müssen auch Hunderte von Formaten und Inkonsistenzen behandeln. Hier ist ein Blogbeitrag, der how to consume RSS feeds in a Rails application zeigt.