PHP: Externe RSS-Feeds in eigene Website einbauen

Jedes Blog und praktisch jede News-Seite macht ihre Inhalte über RSS-Feed verfügbar. Wie Sie Feeds anderer Websites auf Ihrer eigenen einbauen, zeigt dieser Beitrag.

Mit Hilfe von MagpieRSS können Sie RSS-Feeds bequem in Ihr Projekt einbinden. Das geht mit nur wenigen Zeilen Code, wie das folgende Beispiel-Skript zeigt:

<?php

require_once('include/rss_fetch.inc');

$url = 'http://www.xy_site.de/blog/rss/';

$objFeed = fetch_rss($url);

echo '<b>'.$objFeed->channel['title'].'</b><br/>';

foreach ($objFeed->items as $arrItem)

{

printf("<a href='%s'>%s</a><br/>", $arrItem['link'],

$arrItem['title']);

}

?>

Zunächst bindet require_once die Magpie-Bibliothek ein. Die Funktion fetch_rss holt die Daten des Feeds bei der zuvor festgelegten Adresse ab und speichert sie im Objekt $objFeed.

Mit einer foreach-Schleife gehen Sie durch die einzelnen Einträge und zeigen Sie in einem Link an. Natürlich können Sie an dieser Stelle statt des printf auch einen echo-Befehl verwenden. Das printf kommt hier nur der Übersichtlichkeit halber zum Einsatz.

So funktioniert MagpieRSS

MagpieRSS übernimmt aus den RSS-Daten alle Tags und speichert sie in einem Objekt. Das Objekt enthält vier Einträge: channel, items, image und textinput. Die Channel-Informationen rufen Sie direkt über das Objekt ab, in obigem Beispiel also $objFeed.

Die Items stecken in einem assoziativen Array. Der Name des Schlüssels entspricht dem RSS-Tag. Für den Textschnipsel zum Beispiel gilt der Eintrag $arrItem[‘description’].

MagpieRSS nimmt beim Einlesen der Daten keine Validierung vor. Falls Sie das Paket für interne RSS-Feeds verwenden, können Sie also beliebige andere Tags einsetzen. Auch in den Einträgen image und textinput stecken assoziative Arrays, in denen die Kinder der jeweiligen RSS-Tags abgebildet sind. MagpieRSS installieren Sie finden den kostenfreien RSS-Parser MagpieRSS unter der Adresse http://magpierss.sourceforge.net/

Laden Sie die aktuelle Version herunter. Die gibt es nur als .tar.gz-Datei. Wer MagpieRSS unter Windows ausprobieren möchte, braucht daher ein Zusatztool wie Winzip, Ultimate Zip oder das kostenlose 7-zip, um die Daten auszupacken.

Nach dem Entpacken kopieren Sie die Programmdateien

rss_catch.inc

rss_fetch.inc

rss_parse.inc

rss_utils.inc

sowie das Verzeichnis extlib in das Include-Verzeichnis Ihrer Anwendung. Fertig.

Ein Cache ist eingebaut

Um andere Server nicht bei jeder Aktualisierung der eigenen Seite zu behelligen, hat MagpieRSS einen Cache-Mechanismus eingebaut. Sofern die Rechte vorhanden sind, legt MagpieRSS ein Cache-Verzeichnis an – genau in dem Programmordner, von dem aus Sie die Bibliothek in Ihr Projekt eingebunden haben. Wenn Sie das nicht möchten, wählen Sie einen anderen Cache-Ordner. Das geht mit der Zeile

define('MAGPIE_CACHE_DIR', '/xyz/cachedir');

In jedem Fall muss der Server auf dieses Verzeichnis Schreibzugriff haben. Im Zweifelsfall verwenden Sie das tmp-Verzeichnis Ihres Servers.

Kleiner Nachteil: Wenn Sie Ihren Server mit anderen Benutzern teilen, haben Sie möglicherweise keinen Einfluss auf die Vergabe der Dateirechte im tmp-Verzeichnis. Unter Umständen können andere die Daten dann lesen. Aber solange es sich um öffentliche RSS-Feeds handelt, sollte das kein Problem sein.

Anzahl der RSS-Einträge begrenzen

Nicht immer ist es sinnvoll, die komplette Feed-Liste zu übernehmen – unter Umständen können das nämlich auch mal 50 oder 100 Einträge sein. Um die Anzahl der angezeigten Beiträge zu begrenzen, verwenden Sie am besten die Funktion array_slice():

<?php

define('NUMBER_OF_ENTRIES', 5);

require_once('include/rss_fetch.inc');

$url = 'http://www.sitexy.de/blog/rss/';

$objFeed = fetch_rss($url);

$objFeed->items = array_slice($objFeed->items, 0, NUMBER_OF_ENTRIES);

foreach ($objFeed->items as $arrItem)

{

printf("<a href='%s'>%s</a><br/>", $arrItem['link'],

$arrItem['title']);

}

?>

Die Funktion beginnt beim ersten Eintrag(0) im Array, schneidet die in NUMBER_OF_ENTRIES gespeicherte Anzahl heraus und speichert sie wieder im Array. Durch das Array können Sie sich dann wieder wie gewohnt mit foreach arbeiten.

Ähnliche Beiträge