Wie bindet man Feeds in eine PHP Seite ein? 9. November 2007 von the0bone
Oft besteht ja eine Internet Präsens aus mehreren Bereichen. Einfachen Seiten, Blog, Galerie usw. bilden die gesamte Seite. Meistens möchte man die verschiedenen Skripte miteinander verbinden, mindestens aber die Daten auf der Startseite zusammengefasst darstellen. Für dieses Tutorial gehen wir mal davon aus, wir haben
- einen statischen Bereich, mit festen Seiteninhalten
- einer Blog Installation
- einer Galerie
- und einem Forum
Alle Installationen sind erfolgt und laufen einwandfrei unter folgender Ordnerstruktur:
..
/blog/
/forum/
/gallery/
index.php
impressum.php
Auf der index.php (der Startseite beim Domainaufruf) sollen nun die die neusten News aus den verschiedenen Bereichen erscheinen. Dazu könnte man nun eine Abfrage an die verschiedenen Datenbanken programmieren und dieses anzeigen. Dazu müsste man sich jedoch mit jeder der Datenbanken auseinander setzen, deren Strukturen total unterschiedlich sind. Und sollte ein Update des Skriptes veröffentlicht werden, geht nichts mehr, da die Datenbank umgestellt wurde. Der einfache Weg ist, auf eine Schnittstelle zurückzugreifen z.B. auf die Feeds der Skripte und nutzt diese für eine solche Aufgabe.
Der Vorteil liegt klar auf der Hand: Man braucht nur einmal etwas einzusetzen und kann es dann für alle „internen” Feeds und auch externe Feeds* benutzen.
Wir verwenden nun für diese Aufgabe Magpie RSS – PHP RSS Parser.
Die hier herunter geladenen Daten werden dazu in den Unterordner magpierss gespeichert, wodurch die neue Struktur wie folgt aussieht:
..
/blog/
/forum/
/gallery/
/magpierss/
index.php
impressum.php
Nun muss die index.php editiert werden, um das Skript einzubinden und die Daten auszugeben. Als erstes muss magpierss aus dieser Seite geladen werden. Dazu muss die Datei rss_fetch.inc geladen werden.
PHP-Code:
<?php
require_once 'magpierss/rss_fetch.inc';
?>
Anschließend müssen die Feeds, die genutzt werden sollen geladen werden und notfalls etwas angepasst werden.
PHP-Code:
<?php
$rss_url = 'http://yourhp.de/blog/feed/';
$my_rss = fetch_rss($rss_url);
$my_rss->items = array_slice($my_rss->items, 0, 3);
?>
In der ersten Zeile sollte die Adresse deines Feeds stehen. Hier sind z.B. aus WordPress raus auch Kategorie- Feeds möglich.
In der dritten Zeile wird der Feed passend zu unserer Darstellung gekürzt. Hier wird gestartet vor dem ersten Beitrag durch die 0 und inklusive des dritten durch die 3.
Nun liegen die Beiträge in dem Array $my_rss und müssen nur noch dargestellt werden. Dieses geschieht am besten mit einem Durchlauf durch das Array.
PHP-Code:
<dl>
<?php
foreach ($my_rss as $item) {
$title = $item['title'];
$url = $item['link'];
$description = $item['description'];
?>
<dt><a href="<?php print"$url"; ?>"><?php print"$title"; ?></a></dt>
<dd><?php print"$description"; ?></dd>
<?php
}
?>
</dl>
Dafür werden für jeden Beitrag im Array der Titel, die Adresse und der Text genommen und als HTML ausgegeben. Der Titel dann als „Überschrift” mit Link gesetzt und anschließend die Beschreibung angezeigt.
Das Teilskript ab dem Einladen des Feeds bis zur Ausgabe kann nun beliebig oft mit verschiedenen Feeds wiederholt werden. So kann hier z.B. der Feed der Galerie und des Forums zusätzlich genutzt werden oder das ganze ein bisschen modifiziert werden:
<?php
require_once 'magpierss/rss_fetch.inc';
$news_url = 'http://yourhp.de/blog/category/news/feed';
$news_rss = fetch_rss($news_url);
$two_news = array_slice($news_rss->items, 0, 2);
$rest_news = array_slice($news_rss->items, 2, 10);
$important_url = 'http://yourhp.de/blog/category/important/feed';
$important_rss = fetch_rss($important_url);
$important_rss->items = array_slice($important_rss->items, 0, 3);
?>
<dl>
<?php
foreach ($two_news as $item) { // zeige erste News
$title = $item['title'];
$url = $item['link'];
$description = $item['description'];
?>
<dt><a href="<?php print"$url"; ?>"><?php print"$title"; ?></a></dt>
<dd><?php print"$description"; ?></dd>
<?php
}
?>
</dl>
<hr size="1" noshade="noshade" />
<div style="float:left; position:relative; width:50%;">
<dl>
<?php
foreach ($rest_news as $item) { // Liste restliche News
$title = $item['title'];
$url = $item['link'];
$description = $item['description'];
?>
<dt><a href="<?php print"$url"; ?>"><?php print"$title"; ?></a></dt>
<?php
}
?>
</dl>
</div>
<div style="float:right; position:relative; width:50%;">
<dl>
<?php
foreach ($important_rss->items as $item) { // zeige wichtige Dinge
$title = $item['title'];
$url = $item['link'];
$description = $item['description'];
?>
<dt><a href="<?php print"$url"; ?>"><?php print"$title"; ?></a></dt>
<dd><?php print"$description"; ?></dd>
<?php
}
?>
</dl>
</div>
Viel Spass (the0bone)
Beispiele: bushidokarate.de
* Externe Feeds unterliegen meistens Urheberrechten. Bitte vor dem Einbinden von externen Feeds prüfen, ob dieses erlaubt ist.
Am 1. Mai 2008 um 14:33 Uhr
[...] meinem Tutorial zum Einbinden von externen Feeds, sind einige Rückfragen im WPDE Forum aufgekommen. So sollte nicht der ganze Feed dargestellt [...]