So in diesem PHP Tutorial möchte ich euch zeigen, wie man einen externen RSS-Feed auf eurer eigenen Homepage einbinden könnt. Dieses Tutorial setzt darauf auf, dass ihr bereits euch mit den Tutorial "Datei Cache mit PHP erstellen" auseinandergesetzt habt. Gut fangen wir an mit der Materie, um Daten von einer externen Feed einzulesen, benötigen wir die Adresse wo wir die Daten abfragen wollen.
In unserem Beispiel verwenden wir den Webmasterfeed von dieser Seite. Dieser Feed wird als ISO-Datei ausgeliefert, da ich bei meiner Testmaschine Xampp verwenden und diese mit den Zeichensatz UTF-8 arbeitet müssen wir die Ausgabe vorher konvertieren. Dazu habe ich im nachfolgenden Script, die PHP-Funktion iconv() verwendet. Sicherlich kann es bei den ein oder anderen zu anderen Verschiebungen kommen. Daher sollte ihr als erstes in den Quelltext des Feeds schauen und prüfen, welcher Zeichensatz bei den Feed verwendet wird. Danach müsst ihr überprüfen ob der gleiche Zeichensatz auf euren Webserver läuft. Wenn ihr unterschiedliche Zeichensätze habt, kann es passieren dass die Umlaute bzw. Sonderzeichen sehr kryptisch aussehen.
Hier nun das Script:
<?php
/**
* Include der Cache Funktionen
*/
include('function.php');
/**
* ISO zu Utf8 umwandeln
* 1 = ja, 2 = nein
*/
$iso_to_utf8 = 1;
/**
* Name der Cachedatei
*/
$dateiname = 'feed';
/**
* Url zum Feed
*/
$feed = 'http://www.php-space.info/feed.xml';
/**
* Wie oft der Feed abgefragt werden soll in
Sekunden
* 300 = 5 Min
*/
$cachzeit = 300;
/**
* Status ausgeben, wann der Feed das letzte mal
eingelesen wurde
* 1 = ja, 2 = nein
*/
$status = 2;
/**
* Prüfen ob eine Cachedatei geschrieben werden muss
*/
if (cachen_check($dateiname, $cachzeit ) == true) {
$ausgabe = '';
/**
* Mit der PHP Funktion simplexml_load_file()
wird der Feed eingelesen und in der
Variable $xml als Objekt hinterlegt.
Sollte es Fehler beim einlesen geben,
gibt die PHP Funktion
simplexml_load_file() ein false zurück.
*/
$xml = @simplexml_load_file($feed,
"SimpleXMLElement", LIBXML_NOCDATA);
/**
* Nun prüfen wir, ob ein false zurückgegeben
wurde
*/
if ($xml === false) {
$ausgabe .= 'Fehler beim einlesen des
Feed! Prüfen Sie die Url zum Feed
oder ob es den Feed noch gibt.<br>';
} else {
/**
* Wenn kein false von der PHP Funktion
simplexml_load_file() zurückgegeben
wurde, durchlaufen wir mit einer
foreach das Array, was in den Objekt
$xml->channel->item gespeichert wurde.
*/
foreach($xml->channel->item as $k => $v) {
/**
* Nun wird in der Variable $ausgabe
unserer Ausgabe gespeichert.
*/
$ausgabe .= '- <a href="'.$v->link.'"
target="_blank"
title="'.$v->title.'">'.$v->title.
'</a><br>';
}
/**
* Jetzt prüfen wir die Variable
$iso_to_utf8, ob wir unsere Ausgabe
in einen anderen Zeichensatz
umwandeln wollen.
*/
if ($iso_to_utf8 == 1) {
/**
* Ausgabe ISO zu UTF-8 umwandeln
*/
$ausgabe = iconv("UTF-8",
"ISO-8859-1//TRANSLIT", $ausgabe );
}
}
/**
* Hier wird geprüft, ob ein Statusmeldung vom
Feed ausgegeben werden soll.
*/
if ($status == 1)
$ausgabe .= '<p>Der Feed wurde am
'.date("d-m-Y um H:i:s").' Uhr das
letzte mal eingelesen.</p>';
/**
* Cache schreiben
*/
cachen($dateiname, $cachzeit , $ausgabe );
} else {
/**
* Cache lesen
*/
$ausgabe = cachen($dateiname, $cachzeit , '' );
}
/**
* Text ausgeben
*/
echo $ausgabe;
?>
Erklärung:
Nun kommen wir zu der Erklärung, wie ihr im oberen Teil seht, habe ich ein include() eingebaut. Dort lade ich die Funktionen von den vorhergehenden Tutorial. Diese Funktionen werden benötigt um den Cache zu prüfen, bzw. zu erstellen. Im nächsten Abschnitt habe ich die Variable $iso_to_utf8 definiert, diese könnt ihr erstmal so lassen. Nach dem Ihr, das Script auf den Server geladen habt und die Umlaute kryptisch dargestellt werden, sollte Ihr gegebenenfalls den Wert ändern auf 2. Dadurch wird iconv() nicht verwendet und die Ausgabe nicht umgewandelt. Mit der Variable $dateiname definieren ich meine Cachedatei, wo entsprechend die Ausgabe zwischengespeichert wird. Man könnte hier zusätzlich den Namen mit der PHP-Funktion md5() verschlüsseln, damit niemand zu schnell auf den Namen unserer Cachedatei kommt. Ob dies aber Sinn macht, sein mal dahin gestellt. :)
In der nächsten Zeile definiere ich in der Variable $feed unserer Adresse zu der XML-Datei. Diesen Pfad könnt ihr x-beliebig anpassen, wichtig ist nur hierbei, dass die Datei auch wirklich vorhanden ist. Über die nächste Variable $cachzeit kann man die Zeit definieren, wie lang unser Cache verwendet werden soll. Die Zeit wird in Sekunden angegeben. Zum Beispiel wenn man 300 der Variable hinterlegt werden dies 5 min. Um das Script zu prüfen, gibt es die Variable $status, wo man den Wert 1 oder 2 definieren kann. Wenn man den Wert auf 1 stellt, wird unter der Ausgabe des Feeds, die Aktualisierungszeit mit ausgegeben. Dies ist hilfreich, um herauszufinden, ob der Feed zuletzt aktualisiert wurde. Wenn ihr diese Meldung nicht angezeigt haben wollt, könnt ihr die Variable auf 2 belassen.
Auf dem weiteren Code gehe ich nicht mehr im Detail ein, da ich bereits ausführliche Kommentare geschrieben habe. Ich hoffe ihr versteht meine Kommentare. xD
Als kleine Anmerkung für die Leute, die dieses Skript nicht unter Windows einsetzen. Ihr müsst entsprechend der Cachedatei sowie der Datei, wo der Code entsprechend eingebunden wurde, die Rechte 777 oder für die Sicherheitsfreaks 755 geben, da andernfalls PHP keine Schreibrechte hat. So dies soll es erst mal gewesen sein und ich hoffe ihr könnt mit diesen kleinen Tutorial etwas anfangen. Wenn ihr noch weitere Fragen zu diesem Tutorial haben solltet oder vielleicht sogar einen Fehler gefunden habt, würde ich mich freuen, wenn ihr euch bei mir im Forum melden könntet.