¦ 20.07.2009 ¦
In diesem Artikel möchte ich Ihnen zeigen, wie Sie RSS-Feeds anderer Blogs bei sich auf der Seite anzeigen können. Gleich vorweg: Man sollte fremde RSS-Feeds nicht unerlaubt in die eigene Seite integrieren! Die Idee für diesen Artikel kam mir als ich an meinem Portfolio gearbeitet habe. Ich wollte da unbedingt die letzten Artikel automatisch auflisten lassen.Ich wünsche Ihnen viel Spaß beim Artikel!
Für dieses Feature benötigen wir lediglich zwei ganz kurze Funktionen. Die eine liest die RSS-Feeds ein und schreibt diese in eine Text-Datei. Die zweite Funktion liest lediglich die Text-Datei aus.
Sie fragen sich vielleicht wieso ich die Ergebnisse in einer Text-Datei zwischenspeichern möchte. Das lässt sich sehr einfach erklären. Diese Datei soll lediglich ein Mal am Tag neu beschrieben werden. Das entlastet den fremden Server und erhöht die Ladezeit der eigenen Seite um einiges.
Kommen wir nun zur eigentlichen Implementierung.
Als erstes sollten wir die RSS-Feed Adresse und den Pfad zur Datei angeben.
3 4 | $feed_path = "http://www.starstormdesign.de/feed/"; $file_path = "rss_feeds.txt"; |
Jetzt schreiben wir die erste Funktion „setRSSFeeds()“, die die RSS-Feeds auslesen und in die Datei speichern soll. Gleich zu Beginn wird die Seite mit „file_get_contents()“ eingelesen und in der Variable „$content“ gespeichert. Anschließend wird ein neues SimpleXmlElement-Objekt erstellt und der Content übergeben.
8 9 | $content = file_get_contents($feed); $xml = new SimpleXmlElement($content); |
Da sie Ausgabe in einer Liste erfolgen soll, definieren wir eine neue Variable „$result“. Diese wird die Liste beinhalten. Beginnen wir also mit dem öffnenden OL-Tag:
11 | $result = "<ol >"; |
Nun müssen die Überschriften und die dazugehörigen Lins ebenfalls zwischengespeichert werden. Dazu nutzen wir eine simple foreach-Schleife:
13 14 15 | foreach($xml->channel->item as $entry) { $result .= '<li><h3><a href="'.$entry->link.'" title="'.$entry->title.'">'.$entry->title.'</a></h3></li>'; } |
Zu Ende wird die Variable „$result“ mit dem schließenden OL-Tag versehen.
17 | $result .= "</ol>\n"; |
Jetzt müssen wir den Inhalt der Variable nur in die Text-Datei schreiben. Das ist mit der PHP-Funktion „file_put_contents()“ ein Kinderspiel:
19 | file_put_contents($path, $result); |
Jetzt haben wir die erste Funktion unseres Scripts schon fertig.
6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | function setRSSFeeds($feed, $path) { $content = file_get_contents($feed); $xml = new SimpleXmlElement($content); $result = "<ol >"; foreach($xml->channel->item as $entry) { $result .= '<li><h3><a href="'.$entry->link.'" title="'.$entry->title.'">'.$entry->title.'</a></h3></li>'; } $result .= "</ol>\n"; file_put_contents($path, $result); } |
Kommen wir doch gleich zur zweiten. Die Funktion „getRSSFeeds()“ überprüft wann die Text-Datei zuletzt bearbeitet wurde.
Wenn die Datei älter als 24 Stunden nicht bearbeitet wurde, so wird unsere erste Funktion „setRSSFeeds()“ aufgerufen und erst dann die Datei ausgelesen und ausgegeben.
24 25 26 27 28 | if (time() >= (filectime($path)+24*60*60)) { setRSSFeeds($feed, $path); print file_get_contents($path); } |
Ist das nicht der Fall, so wird gleich der Inhalt der Datei ausgegeben. Sie werden gleich den Unterschied der Ladezeit feststellen, sobald Sie die Seite zum zweiten Mal neu laden. Und der Blogbetreiber wird sich nicht über die unnötige Serverauslastung beschweren.
29 30 31 32 | else { print file_get_contents($path); } |
Die ganze Funktion sieht dann folgendermaßen aus:
22 23 24 25 26 27 28 29 30 31 32 33 | function getRSSFeeds($feed, $path) { if (time() >= (getlastmod($path)+24*60*60)) { setRSSFeeds($feed, $path); print file_get_contents($path); } else { print file_get_contents($path); } } |
Um die RSS-Feeds nun auf der Seite einblenden zu lassen, müssen Sie lediglich die Funktion „getRSSFeeds()“ aufrufen und die URL und den Pfad übergeben.
getRSSFeeds($feed_path, $file_path);
Ich hoffe der Artikel hat Ihnen gefallen! Über Kommentare und Social Bookmarks würde ich mich sehr freuen.


Daniel ¦ 20.07.2009 - 21:03
Hi,
vielleicht sollte man dazu sagen, dass “file_get_contents” nur bei aktiviertem allow_url_fopen funktioniert. Aus diesem Grund soll man vor dem Download prüfen, ob allow_url_fopen aktiviert ist. Wenn nicht muss man cURL oder Sockets verwenden.
Gruß
Daniel
StarSt0rm ¦ 21.07.2009 - 09:46
Vielen Dank Daniel.
Ich wollte zwar nur zeigen wie sowas geht, aber ich muss dir im Nachhinein absolut zustimmen. Habe nicht daran gedacht. Solch ein Hinweis könnte durchaus sinnvoll sein. Werde in Zukunft darauf aufmerksam machen. Danke!
LG, Alex
Andy ¦ 23.07.2009 - 19:59
Gefällt mir gut die Möglichkeit nur ob ich mir das Zutraue ohne Hilfe
StarSt0rm ¦ 24.07.2009 - 16:13
Das ist wirklich nicht so schwer. Du könntest es ja versuchen und wenn was nicht so richtig klappt eine konkrete Frage stellen. Ich helfe dann gerne weiter.
Marc ¦ 05.06.2010 - 20:07
Interessant. Ich nutze für soetwas meist MagpieRSS, werde mir Deine Lösung aber mal zu Gemüte führen, sieht gut aus.
Florian ¦ 28.01.2011 - 15:35
Hallo Alex,
vielen Dank für die ausführliche Beschreibung. Werde das ganz gleich mal ausprobieren.
Beste Grüße
Flo
Philip Hoffmeister ¦ 20.03.2011 - 09:03
Hallo,
Das ist genau das was ich gesucht habe danke. Hast du vilt. ein Tipp wo ich einen kostenlosen Webspace mit allow_url_fopen bekomme?
mfg. Philip Hoffmeister
StarSt0rm ¦ 20.03.2011 - 13:34
Freut mich, dass es dir geholfen hat. Leider kenne ich nicht wirklich viele FreeHoster: Funpic/Ohost und Jimdo. Auf Funpic und Ohost wird es wohl deaktiviert sein.
Robert Tusch ¦ 03.01.2012 - 23:26
Hey,
Bei mir ist dieses allow url fopen nicht aktiviert! Was kann ich jetzt machen oder kann man das aktivieren. Ich Entschuldige mich, wenn die Frage bei Dir lächerlich ankommt, aber ich habe davon so gut wie keine Ahnung
Lg
Robert
StarSt0rm ¦ 04.01.2012 - 13:35
Hallo Robert,
das ist leider bei recht vielen Hostern deaktiviert. Alternativ könntest du die Funktion curl() verwenden. Diese hat aber eine andere Syntax und ist viel mächtiger. (Aus diesem Grund ist die Wahrscheinlichkeit groß, dass auch diese deaktiviert ist.) Ob man die Funktion aktivieren kann oder nicht, musst du bei deinem Hoster nachfragen.
Gruß
Alex
Robert Tusch ¦ 04.01.2012 - 17:19
Hallo Alex,
Vielen dank für deine schnelle Antwort. Ich werde es mal versuchen und dann wohl wahrscheinlich den Hoster wechseln. Ich hoffe es geht und danke dir einmal, dass du dir die Mühe gemacht hast, das Tutorial zu erstellen.
Gruß
Robert
Robert Tusch ¦ 04.01.2012 - 18:12
Hey,
Ich melde mich hier nocheinmal, weil ich mit curl() nicht zurechtkomme. Was soll ich jetzt genau ändern? Ich habe einen Hoster, der curl abnimmt.
Tut mir leid, aber selbst mit der Seite komme ich nicht zurecht.
Robert
Ps du kannst mir auch eine Mail schreiben
StarSt0rm ¦ 05.01.2012 - 14:26
Also der Schnellste Weg wäre es, wenn du die Zeile 8 durch folgendes ersetzt: