BLOG

Importieren von RSS-Feeds als Nodes in Drupal

Anforderung

Eine Drupal-Webseite soll Inhalte (RSS-Feeds) unterschiedlicher Seiten so einlesen, dass die Inhalte sternförmig in einem gemeinsamen "River" auf der Seite zusammenlaufen sollen, die "Herkunft" der einzelnen Seiten dabei aber erhalten bleiben soll.

benötigte Module

Wie immer gibt es in Drupal mehrere Module, RSS Feeds in Drupal einzulesen. Der standardmäßig von Drupal bereitgestellte Aggregator scheidet für diese Anforderung aus, da Aggregator aus den Feed-Beiträgen keine Nodes erzeugen kann.

  • FeedAPI wird aktiv entwickelt und kann diverse diverse Formate aggregieren.
  • Feedparser ist dev und gibt es nicht für Drupal6.
  • SimpleFeed ist für Drupal6 noch dev.
  • SimplePie Core Gibt es als dev sogar schon für Drupal7, die Entwicklung ist jedoch eingestellt.

Ich habe mich für FeedAPI entschieden. Für den Einsatz von FeedAPI ist ein (externer) Parser erforderlich, der die Feeds aus dem XML-basierten Datenformat für die API aufbereiten kann. Als Parser habe ich SimplePie verwendet - SimplePie ist gut dokumentiert. Eine (englische) Installations-Anleitung findet sich im eigenen Wiki.

Der darin beschriebene Schritt 2 ist nicht richtig: die Datei "simplepie.inc" muss innerhalb des "feedapi"-Moduls in das SimplePie Parser-Verzeichnis kopiert werden: /feedapi/parser_simplepie. (Siehe "Parser_simplepie directory" auf drupal.org)

Die Kontrolle der ordnungsgemäßen Installation liefert ein Blick in den Statusbericht (/admin/reports/status).

Das Einrichten der Feeds in Drupal.

Das Submodul "Feed API Node" ermöglicht, aus Feed-Inhalten Nodes zu erstellen.

"FeedAPI" bringt einen eigenen Inhaltstyp "Newsfeed" mit. Jeder externe abonnierte Feed wird als Node dieses Inhaltstyps eingerichtet, und lässt sich individuell konfigurieren. Innerhalb des einzelnen Newsfeed-Nodes wird festgelegt, welchen Inhaltstyp (z.B. "Artikel") die aus dem Feed zu erstellenden Feed-Beiträge erhalten sollen.
Es liegt im Ermessen des Admins zu entscheiden, ob die Newsfeed-Nodes für Besucher sichtbar bzw. kommentierbar sein sollen. In der Regel wird dies wohl nicht erwünscht sein, eröffnet aber eine Menge Möglichkeiten für unterschiedliche Einsatzzwecke.

An diesem Modell finde ich sehr praktisch, daß für die generierten Feed-Nodes ("Artikel") kein dezidierter Inhaltstyp benötigt wird, sondern die Inhalte dieses Inhaltstyps sowohl automatisiert per Feed-Import als auch von Hand erstellt werden können.

Mit dem Submodul "FeedAPI inherit" lassen sich Taxonomien der Newsfeed-Nodes an diese neu erstellten Nodes weitergeben. Hier zeigt sich die konzeptionelle Stärke des Modells, die Feeds als Nodes zu behandeln:

Im konkreten Anwendungsfall sollen sämtliche Beiträge der unterschiedlichen Quellen in einem einheitlichen Inhaltstyp (hier im Beispiel "Artikel") zusammen fließen. Der Bezug bzw. die Herkunft der Beiträge erfolgt über ein Vokabular. Indem dem NewsFeed-Node ein Term zugewiesen wird lassen sich per Vererbung ("inherit") an die neuen Nodes erstellen.

Praktischerweise ist das Beitragsdatum der neu erstellen Artikel-Nodes das Datum der Quell-Nodes. Bei der Sortierung der Beiträge kann also das Beitragsdatum verwendet werden. Importierte wie manuell erstellte Nodes sortieren sich wie gewünscht ein.

Rechteverwaltung

Die neu erstellten Feed-Beiträge werden unter dem Konto des Autors der NewsFeed-Nodes erstellt. Der Autor benötigt also die entsprechenden Rechte, um Nodes dieses Types erstellen zu dürfen.

Zur Verwaltung der Feeds bringt das Modul unter /admin/content/feed/list eine Liste aller Feeds mit Links zu den verschiedenen Verwaltungs-Aufgaben mit.

Falls die generierten Nodes gelöscht und erneut eingelesen werden sollen, scheint es erforderlich zu sein, den Cache im jeweiligen NewsFeed-Node einmal zu leeren (/node/NID/purge). Anschließend lassen sich die Feed-Beiträge wieder neu generieren (/node/NID/refresh)

Fragen

Folgende Fragen bleiben für mich im Anschluss noch zu klären:

  • Wie lässt sich die URL des originalen Beitrags auf der Webseite mit darstellen bzw. in ein CCK-Feld importieren?
    Es gibt zwar ein Modul "Feed Element Mapper", mit dem sich CCK-Inhalte mappen lassen, anscheinend gibt es aber noch keine GUI dafür.
  • Die Taxonomie-Begriffe sind im Feed der einzelnen Beiträge enthalten. Wie lassen sich diese Begriffe in die neu erstellten Nodes übernehmen?
    Tipp: Wenn der Quell-Feed mit Drupal-Views erstellt ist, lässt sich der XML-formatierte Inhalt des Feeds z.B. in der RSS-Vorschau-Ansicht des Views einsehen.

Dank der Views-Implementierung "FeedAPI Node Views" lässt sich immerhin per Views auf die Inhalte zugreifen.

 

Kommentar hinzufügen

Der Inhalt dieses Feldes wird nicht öffentlich zugänglich angezeigt.
Mit dem Absenden dieses Formulars, akzeptieren Sie die Datenschutzrichtlinie von Mollom.