RSS-Feed Import mit PHP

Vor einigen Wochen habe ich eine PHP-Klasse veröffentlicht, mit der Du recht einfach Deinen eigenen RSS-Feed erzeugen kannst.

Dieses Mal soll es darum gehen, einen anderen RSS 2.0-Feed mit Hilfe von PHP zu importieren und so die Inhalte auszugeben.

Wenn Du also auf Inhalte von Blogs mit ähnlichen Themen verweisen möchtest, ist dies eine gute Möglichkeit, um die aktuell neuesten Einträge oder generell Neuigkeiten einzubinden.

Genehmigung

Doch, Vorsicht! Wenn es sich nicht um Deinen eigenen Blog handelst, solltest Du Dir zuvor die Genehmigung der Webseite einholen, deren RSS-Feed Du einbinden möchtest.

Das ist vermutlich weniger problematisch, wenn du lediglich die Titel der neuesten Beiträge einbinden möchtest. Gerade dann, wenn du Inhalte aus dem Text übernimmst, macht es Sinn vorher die Genehmigung einzuholen.

Auf der sicheren Seite bist Du dann, wenn Du von jeder Seite, die Du auf diese Weise einbindest, die Genehmigung einholst. Ich gehe mal davon aus, dass Du nicht vorhattest, die Inhalte von einem Dutzend Blogs einzubinden.

Realisierung mit PHP

Wir könnten mit regulären Ausdrücken arbeiten, um mühsam die einzelnen Teile aus dem RSS-XML-Dokument zu extrahieren. Zugegeben, so mühsam wäre das nicht, aber dennoch komplizierter als die Methode, die ich Dir nun vorstellen möchte.

PHP bietet eigens für das Auslesen von XML-Datenströmen eigene Funktionen an, die ich Dir hier kurz zeigen und erklären möchte.

Mit der Klasse XML-Reader hast du zahlreiche Möglichkeiten, um diese Daten auszulesen. Das geht jedoch seit PHP 5 einfacher, was in den meisten Fällen auch ausreicht.

SimpleXML lautet hier das Stichwort. Mit Funktionen wie simplexml_load_file() (Einlesen einer XML-Datei), simplexml_load_string (Einlesen eines Strings mit XML-Inhalt) oder mit der SimpleXML-Klasse kannst Du simpler denn je XML-Dokumente lesen und Informationen extrahieren.

Hier nun ein einfaches Beispiel, wie das geschehen kann. Das ist unser XML-Dokument („feed.xml“):

?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
<channel>
<title>Feed-Name</title>
<description>Feed-Beschreibung</description>
<language>de</language>
<link>http://www-coding.de</link>
<lastBuildDate>Sat, 1 Jan 2014 00:00:00 GMT</lastBuildDate>
<item>
<title>Nachricht 1</title>
<description>Inhalt der 1. Nachricht</description>
<link>http://internetseite.de/link-zur-nachricht</link>
<pubDate>Sat, 1. Jan 2014 00:00:00 GMT</pubDate>
<guid>0114000-000001</guid>
</item>
</channel>
</rss>

Wir lesen nun mit PHP und der oben bereits genannten Funktion das XML-Dokument aus und können nun auf alle Inhalte zugreifen, etwa auf den Titel des Feeds:

<?php

$xml = simplexml_load_file('feed.xml');

echo $xml -> channel -> title[0]; // Gibt "Feed-Name" aus

?>

Mit einer entsprechenden for- oder foreach-Schleife können dann auch die einzelnen Items, also „Beiträge“ ausgelesen werden.

Die RSS-Import-Klasse

Download Button
RSS-Import-Klasse downloaden

Für diesen Zweck habe ich Dir eine kleine Klasse gecodet. Diese liest alle Daten für Dich strukturiert aus, und Du kannst anschließend ganz einfach auf sie zugreifen.

Per Klick auf den Button links kannst Du sie downloaden und anschließend frei auf deiner Webseite einsetzen, weiterverbreiten oder anpassen.

Das Paket enthält mehrere Dateien. Die RSSImport.class.php enthält die eigentliche PHP-Klasse. In der rss_example.php findest Du ein Beispiel, welches mit dem XML-Dokument aus feed.xml arbeitet.

Du kannst es ganz einfach ausprobieren, indem Du die Dateien auf Deinen Webspace (mindestens PHP 5) lädst und anschließend die Example-Datei in deinem Browser aufrufst.

Wenn Du dir den Code der Datei einmal anschaust, erkennst Du auch ganz gut, wie Du mit der Klasse arbeiten kannst.

Wie gewohnt muss sie zunächst eingebunden werden, also etwa so (Pfad eventuell anpassen):

require_once 'RSSImport.class.php';

Nun importierst Du einen Feed, indem Du den Pfad zu diesem (kann eine lokale Datei oder eine URL sein) angibst und ein neues RSSImport-Objekt erstellst:

$feed = new RSSImport('feed.xml');

Sollte der Vorgang fehlgeschlagen sein, so ist $feed false. Das solltest du also zuerst überprüfen, bevor Du dann die Daten ausgibst.

Die Klasse unterscheidet dabei zwischen zwei Datengruppen. Zum einen gibt es die allgemeinen Feed-Informationen, die Du mit getFeedInfo() auslesen kannst. Gibst Du keinen Parameter an, werden Dir alle Daten als Array zurückgegeben. Ansonsten kannst Du beispielsweise gezielt den title des Feeds abfragen:

echo $feed -> getFeedInfo('title'); // Gibt den Titel des Feeds aus

Die einzelnen Beiträge kannst Du mit getItems() auslesen. Auch hier kann ein Parameter für die Beitragsnummer (beginnend mit 0) angegeben werden. Gibst Du keinen Parameter an, wird eine Array mit allen Beiträgen ausgegeben. Hier ein Beispiel, wie Du die Daten für alle Beiträge anzeigen kannst:

$items = $feed -> getItems();

foreach ($items AS $item) {
echo "<h2>".$item['title']."</h2>" .
"<p>Veröffentlicht am ".date('d.m.Y H:i', $item['published'])."<br />" .
"<a href=\"".$item['link']."\">Artikel aufrufen</a></p>" .
"<p>".$item['content']."</p>";
}

Egal ob nun mit der PHP-Klasse, die es Dir erspart, sich mit den RSS-2.0-Strukturen auseinandersetzen oder mit den vorher beschriebenen Funktionen: PHP und XML arbeiten gut zusammen.

So kannst du ganz einfach unter Nutzung von PHP Inhalte von RSS-Feeds, die nun einmal auf XML basieren, importieren und auslesen.

6 Gedanken zu „RSS-Feed Import mit PHP“

  1. Danke! Nur ich habe das ein CMS (WebsiteBaker), das ich nutze und das kein Add-on für RSS-Feed-Einbindung nutzt.

    Wo soll denn dann der Code hin, den Du meinst?

    In die index.php des Templates? Dann ist das ja auf jeder Seite, oder?

    1. Lieber Chris,

      mit WebsiteBaker habe ich bisher noch nicht gearbeitet. Daher kann ich dir leider nicht sagen, wo in deinem Fall der Code platziert werden muss.

      Bei Einbindung über die index.php wird der Code aber regelmäßig – abhängig von dem CMS – auf jeder Seite ausgeführt.

      Beste Grüße

    1. Du kannst in der foreach-Schleife einen Zähler einbauen und sobald dieser den gewünschen Wert (z.B. 5) erreicht, die Schleife mit „break“ abbrechen.