RSS und Atom Serverseitig mit PHP verarbeiten

  • Beitrags-Autor:
  • Beitrags-Kategorie:Software & Co.
  • Lesedauer:5 min Lesezeit

Wie versprochen, komme ich zur Sache und lasse mich in der wahrscheinlich interessantesten Kategorie „Software & Co“ über eine Endeckung. Vielleicht kennen es schon einige… Egal! Für mich war das neu und hat mich auf neue Ideen Gebracht.

Es geht – wie der Titel bereist erwähnt um PHP-Skript, der auf dem Server RSS, Atom oder RDF (mit anderen Worten Content-Syndication – Definition hier oder hier) verarbeitet. Der Name lautet: Simple Pie (In der Anlehung an „American Pie“?). Der Nachfolger vom eingeschlafenen Projekt Magpie überrascht mit eine Vielfalt an Funktionen und Formaten.

Nach dem Download des Packets, der die Reader-Klasse als auch ein Demo enthält, lohnt sich der Blick in die sehr gute – wenn auch nur englische Dokumentation. Für Anfänger wird ein die Demo-Anwendung (index.php) im Ordner „demo“ sicher sehr hilfreich sein. Für fortgeschrittene Programmierer ist die Funktionsreferenz sicher informativer.

Ich gehe davon aus, dass das entpacken dieses Zip-Archivs keinem Kopfzerbrechen bereitet und die Dateien schon auf der Festplatte liegen. Jetzt geht’s ans Eingemachte!

Wir starten unser Skript mit dem Import der SpimlePie-Klasse:

include_once('simplepie.inc');

Dies setzt voraus, dass unser Skript im selben Ordner liegt, wie simplepie.inc (die Klassendatei).
Jetzt brauchen wir eine Instanz der Klasse (eine Realisierung des Abstrakten). Dazu schreiben wir:

$feed_parser = new SimplePie();

Jetzt haben wir einen real existierenden Feed-Parser, der seine Eigenschaften und Fähigkeiten (Metoden) von der Klasse übernimmt.
Mit:

$feed_parser->strip_ads(true);

Teilen wir unserem Feed-Parser mit, dass wir keine google-Adsens- oder doubleclick-Werbung haben wollen.

$feed_parser->cache_location("./tmp");

Teilt mit, wo der cache (Zwischenspeicher für abgeholte Quellen) zu finden ist: im Unterordner „tmp“. Standardmäßig ist der mitgelieferte Ordner „cache“ dafür zuständig… Es ist jedoch nicht empfehlenswert, Open-Source-Software unverändert einzusetzten: eine unbekannte Sicherheitslücke und Ihr Server muss dran glauben! Beim Cache ist das vielleicht nicht do relevant, aber wer weiß, was man damit anstellen kann. Also doch lieber einen Unterordner anlegen!
Die Cache-Verwaltung von SimplePie ist schon ziemlich gut. Wer es verbessern will, hat mit set_cache_class() die Möglichkeit, das zu tun. Überhaupt ist SimplePie ziemlich gut konfigurierbar: input_encoding(„UTF-8“) setzt die Kodierung auf das sehr universelle UTF-8. Auch ISO-8859-1 ist oft vertreten. Leider hilft der Blick in die Quelle selbst nur selten: Die Kodierung wird zwar deklariert aber oft nicht durchgehalten. Um die Bilder oder als Link engebundene Dateien (wie mp3 bei Podcasts – auch die sind nichts anderes als RSS – nur eben mit Links zu Musikdateien statt zu Internetseiten) zu handhaben, gibt es Funktionen wie set_enclosure_class() usw…

Interessant könnte auch set_timeout() sein, welches die Zeit bestimmt, die versteichen darf, bis RSS abgeholt wurde. Auch strip_htmltags(true) kann dafür sorgen, dass die im RSS-Verwendeten HTML-Tags entfernt werden (Wer will schon sich sein gut überlegtes Layout kaputt machen lassen?).

Jetzt setzten wir die Adresse der Quelle:

$feed_parser->->feed_url("http://robert.kolatzek.org/wblog/feed");

und holen sie mit

$feed_parser->init();
$feed_parser->handle_content_type();

ab.

foreach($feed->get_items() as $item)
{
}

geht den Feed Eintrag für Eintrag durch. Auf jeden von diesen sind die Funktionen von http://simplepie.org/docs/reference/item/ anwendbar. Auf das Feed als ganzes sind wiederum die Funtionen von http://simplepie.org/docs/reference/feed/ anwendbar. Wenn Sie also den Titel des Feeds zeigen wollen, tun sie folgendes:

echo $feed_parser->get_feed_title();

Für den Titel eines Eintrags:

echo $item->get_title();

(Natürlich nur innerhalb der geschweiften Klammern von foreach!)
Problematisch ist es, wenn man z.B. alle Autoren eines Beitrags sehen wollen. Für einen einzigen tun wir: $autor = $item->get_author(0); für mehrere

$autoren = $item->get_authors();
foreach($autoren as $autor)
{
echo $autor->get_name();
}

gibt den Namen aus.

Ähnlich verfährt man mit enclosures (Bildern oder Musikstücken):

$enclos = $item->get_enclosure(); 
echo $enclos->get_type();

gibt dann z.B. „image/jpeg“ wenn es ein jpg-Bild ist. Auch die Dateiendungen ($enclos->get_extension();) sind gute Entscheidungshilfe, ob man es als Bild mit oder als zu behandeln hat…

Doch das wichtigste hätten wir fast vergessen: den Link zum Artikel selbst!

$item->get_permalink();


Und die Kurzbeschreibung dessen:

echo $item->get_description().
"<a href='.$item->get_permalink()."'>".$item->get_title()."</a> ";

War das nicht einfach?
Na also… Ab an die Arbeit!

Und hier ein Beispiel dafür, was man alles mit SimpePie anstellen kann:

www.Mixano.de – die RSS-Suchmaschine, der RSS-Reader und RSS-Mixer