RSS Feeds erstellen und Themen mit Drupal und Views


Views 2 ist extremstens flexibel. Es kann eigentlich alles, aber ich muss zugeben, dass es auch extrem komplex ist 😉 Also, die Ausgangslage war eigentlich die Folgende:

Von einer Drupalseite sollen periodisch Einträge Nodes in eine andere Drupalinstallation exportiert werden.

Klingt eigentlich recht trivial ist es auch, mit ein paar Hürden vom Themen von RSS Feeds. Wie bereits erwähnt, wird das ganze mit RSS Feeds gemacht. Das heisst, Seite 1 stellt ein RSS Feed bereit, welches Seite 2 periodisch mittels Feed Api abfragt und importiert.

1. RSS Feed mit Views erstellen

Trivial. Neues Views anlegen (in den meisten Fällen mit Nodes, aber geht sicher auch mit Usern oder Files). Dann ein paar Filterregeln und Sortierregeln zusammenstellen und eine neue Ansicht "RSS" hinzufügen.

Das ist es eigentlich bereits. Sehr simpel. Leider gibt es hier nicht die Möglichkeit, Felder zu definieren, welche dann im RSS Feed erscheinen (CCK Felder z.B.). Man kann lediglich den Title und dann den eigentlichen Node Body ausgeben. Für ein einfaches RSS Feed wird das wohl auch alles sein, wenn man das Feed jedoch zum importieren und exportieren verwenden will, dann müssen die Daten im Feed klar strukturiert bleiben.

2. RSS Feed themen

Views 2 hat die super geniale Eigenschaft, dass man die tpl Dateien überschreiben kann. Per default kommt ein RSS 2.0 Feed raus. Die Feed Api und der dazu passende Field Mapper kann jedoch nur ein Atom Feed einwandfrei bearbeiten. Daher ist es notwendig, das Feed in ein Atom Feed umzuschreiben.

3. Herausforderungen

  1. Es ist gar nicht so einfach ein Atom Feed manuell zu erstellen 😉
  2. Leider wird in der tpl Datei das Node Objekt nicht bereit gestellt. Dieses muss relativ umständlich aus dem views Objekt herausgeholt werden.
  3. Das Timing ist natürlich nicht ganz einfach. Nehmen wird mal an, auf Seite 1 entstehen pro Stunde 50 neue Nodes, welche exportiert werden müssen. In unserem erstellten Feed stellen wird jedoch lediglich 25 Nodes dar. Wenn wir jetzt den Cron Job auf Seite 2 lediglich alle 2h laufen lassen, dann verpassen wir Nodes, da diese dann nicht mehr in den Top 25 aktuellsten Nodes drin ist.
    Optimal wäre es, ein Flag zu setzen, wenn ein Node importiert wurde, aber das lässt sich mit diesen einfachen Mitteln nicht einfach so bewerkstelligen, daher bleibt wohl nichts anderes übrig, als einfach das Feed genügend lang zu machen und den Cron Job genügend oft aufzurufen.