RSS Newsfeed auf Homepages einbinden (Tutorial)
Dieses Tutorial zeigt euch Schritt für Schritt, wie ihr RSS Newsfeeds auf eurer Homepage einbinden könnt. Das Besondere dieser Variante ist, dass sie sich nicht negativ auf die Ladezeiten eurer Homepage auswirkt und ihr keine Dienste von Drittanbietern braucht. Mit 8 Zeilen PHP Code + 5 Zeilen HTML Code ist sie vielleicht sogar die einfachste Lösung.
// Update: Nachdem Google im April 2010 nun offiziell bestätigt hat, Homepage-Ladezeiten als Rankingfaktor zu benutzen, sind Lösungen wie diese RSS Feed Integration, mit der ihr top Homepage-Ladezeiten sicherstellt und trotzdem nicht auf das Einbinden entfernter Daten verzichtet, angesagter den je.
Ladezeiten-Problem beim Einbinden von RSS Feeds
Wenn ihr Inhalte eines RSS Newsfeeds einer fremden Homepage auf euerer Website einbindet, werden die Feed-Inhalte im Hintergrund von Webserver zu Webserver angefordert und übertragen. Diese Kommunikation kostet wertvolle Ladezeiten eurer Homepages und nervt eure Besucher.
Meine Lösung: Cache-Datei

Meine Lösung ist, die RSS Datei nur einmal anzufordern, eine Kopie zu speichern (cache.htm) und diese zu benutzen, wenn ein User eure Homepage aufruft. Die Kopie könnt ihr von einem Cronjob zeitgesteuert und automatisch aktualisieren lassen (zB stündlich, täglich…).
Die Lösung hat den Nachteil, dass die RSS Feed-Inhalte auf eurer Homepage nur noch in dem Intervall aktuell sind, in dem ihr eure lokale Kopie aktualisiert. Der Vorteil ist, dass sie zu Top-Ladezeiten eurer Homepages beiträgt.
Vorraussetzungen
Ihr müsst auf eurem Server PHP 5 Scripts ausführen können und braucht eine Möglichkeit, Cronjobs anzulegen.
Cronjob
Um eure lokale Kopie vom RSS Newsfeed aktuell zu halten, braucht ihr einen Cronjob, der in regelmäßigen Abständen eure Datei ‘update.php‘ aufruft. Die meisten Webhosting Pakete haben einen oder ein paar Cronjobs inklusive. Wenn euer Webhosting Paket keinen Cronjob beinhaltet, googelt einfach mal nach ‘(kostenloser) Cronjob‘.
Beteiligte Dateien
update.php
update.php ist die wichtigste Datei dieser Lösung. Sie wird regelmäßig durch den Cronjob aufgerufen. Dabei bindet sie die RSS Datei ein, generiert aus deren Inhalten eine Liste aus den RSS Elementen und speichert diese in die Datei cache.htm. Hier der Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
// RSS Objekt erzeugen $rss = simplexml_load_file( 'http://homepage-werbung.de/feed/'); // Ausgabe cachen (nicht auf den Bildschirm // schreiben) ob_start(); <ul> // RSS Elemente durchlaufen foreach($rss->channel->item as $i) { <li> <a href="$i->link">$i->title</a> </li> } </ul> // Cache-Datei oeffnen $cacheFile = fopen('cache.htm', 'w'); // Ausgabepuffer leeren; Inhalt in Datei und // zur Kontrolle in Variable speichern fwrite($cacheFile, $rssLinks = ob_get_clean()); // Datei schliessen fclose($cacheFile); // zur Kontrolle Cache-Inhalt anzeigen var_dump($rssLinks); |
Am Anfang vom Code wird beispielhaft der Feed von Homepage-Werbung.de eingebunden. Ersetzt diese Newsfeed Adresse durch die von euch gewünschte. Es wird der HTML-Code (hier eine ungeordnete Liste) mit Links erzeugt. Das könnt ihr euch natürlich anpassen wie ihr wollt. Neben ‘title‘ und ‘link‘ gibts noch andere Attribute vom RSS Element $i, die ihr benutzen könnt, zB ‘description‘ (Anrisstexte), ‘date‘ (Veröffentlichungs-Datum), ‘category‘ (Blogkategorien/Tags des Beitrags), usw. Fügt mal testweise ein var_dump($i); innerhalb der Schleife ein, wenn ihr sehen wollt, was ihr da alles noch für Attribute zur Verfügung habt.
cache.htm
Die Datei ‘cache.htm‘ ist im Prinzip nur ein Datenspeicher, der bei jedem Aufruf von update.php aktualisiert wird. Achtet bei dieser Datei nur auf die Dateirechte. Eure update.php muss Lese- und Schreibrechte für cache.htm haben. Beim Laden einer eurer Homepage-Seiten wird später einfach der Inhalt von cache.htm an die Stelle eingebunden, wo die RSS-Feed-Links (oder was ihr auch immer aus der Feed Datei macht) erscheinen sollen.
template.php
Bei dieser Datei ist der Dateiname, im Gegensatz zu den anderen, nur als Beispiel zu verstehen. Es ist mit template.php diejenige Datei eurer Homepage gemeint, in der euer HTML Code steht, bzw. die Datei, die euren HTML Code generiert. Mit folgendem Code bindet ihr dort einfach den Inhalt von cache.htm ein.
1 2 3 |
include 'pfad-zu-eurer-cache-datei/cache.htm'; |
pfad-zu-eurer-chache-datei ersetzt ihr natürlich noch durch den Ordnerpfad zu eurer cache.htm Datei.
Noch Fragen?
Dann fragt!
22 Reaktionen zu “RSS Newsfeed auf Homepages einbinden (Tutorial)”
-
Das Ding ist klasse, klein und elegant.
Das einzige, was ich nicht herausbekomme, ist, wie ich eine UGTF8-Ausgabe erzwingen kann. Hat jemand einen Tipp?
Danke -
… der Fehler lag wie so oft in der unausgereiften Software in Kopp.
Die Seite, in die ich den Newsfeed eingebunden habe, wurde nicht in UTF-8 sondern in ISO irgendwas angelegt. Ändere ich das jetzt, kann ich zwar den Feed gut lesen, dafür wird der Rest der Seite zerschossen .
Ich werde mich mal durch die Anleitung zum Decodieren kämpfen. Bis dahin können meine paar Leser auf http://www.novacultura.de auch mit den kryptischen Zeichen im unteren rechten Eck leben.
Danke nochmal
Michael -
Sehr schön! Hat im Test super geklappt! Danke! Kann man die Anzahl der angezeigten Beiträge sowie der Länge der description einschränken? Ansonsten wird es lang! Besten Dank!
-
Wenn ich die update.php im Browser aufrufe müßte die cache.htm die im selben Verzeichnis liegt doch auch befüllt werden, oder?
Bei mir kommt da immer ein Fehler:Parse error: syntax error, unexpected T_STRING in …update.php on line 25
—–
Oder liegt das an der PHP Version???
—–
Wobei ich habe es jetzt mal auf einem anderen Server mit PHP5 ausprobiert, da kommt auch der Fehler…
Was mache ich falsch??? -
Hallo,
die Idee, so ein RSS-Feed mit Cache-Funktion ist schon eine klasse Sache von Dir. Aber irgendwie habe ich´s wohl nicht richtig drauf, mein Cache bleibt leer, bzw. beim direkten Aufruf der update.php kommt einfach deie Meldung “string(13)” – woran kann das liegen?
-
@Micha und Armin
Ich hab auch so eine Ausgabe string(1840) allerdings zusätzlich zur erfolgreichen Ausgabe der feed-Einträge. Über den News wird es ausgegeben, auch wenn ich den Beispiel Feed-Pfad nutze:
Vor und nach den Meldungen stehen noch Anführungszeichen.Im Quelltext sieht das dann so aus:
"
<ul>
<li>
<a href="http://homepage-werbung.de/vorbereitung-fuer-ein-einfaches-ad-management-scripts-in-php-tutorial/" rel="nofollow">Vorbereitung für ein einfaches Ad Management Script in PHP (Tutorial)</a>
</li>
</li>
<a href="http://homepage-werbung.de/interview-mit-sacha-lobo-und-holm-friebe/" rel="nofollow">Interview mit Sacha Lobo und Holm Friebe</a>
</li>
…
"Wer kann mir sagen woher das kommt, bzw. wie man das verhindert?
… Ergänzung:
Meine Quelltexteingabe oben wurde leider nicht übernommen bzw. die tags nicht dargestellt. Daher hier nun nochmal verbal:
Im body-tag steht als erstes
string(1840) ”
Dann kommt die ul-Liste mit allen li-Einträgen und am Ende vor dem body-Endtag wieder ein Anführungszeichen “. -
hallo..
super tool, so kann ich die interwalle vom Newsfeed selber festlegen! genau das was ich brauche! vielen Dank!!!!
ein problem kann ich leider noch nicht lösen, evt kann mir jemand helfen:Wenn ich update.php im browser aufrufe, erkenne ich (im FTP-Programm) dass sich die datei cache.htm verändert und somit aktualisiert hat (das kann ich der Erstellungszeit entnehmen).
Wenn ich jedoch den Cronjob anlege oder via BefehlsShell die datei aufrufe, findet der server zwar die datei und gibt diese an, jedoch verändert sich die datei cache.htm nicht! –> was mache ich falsch???
-
Fatal error: Call to undefined function: simplexml_load_file() in /var/www/web274/html/feedreader/update.php on line
was bedeutet dieser Fehler?
Bitte weiterhelfen
-
@micha: Vielen Dank für deinen Tipp. Genau das wars. mit “get”…. rufts die datei wie im browser auf! Geile sache.
Weiss jmd. von euch ob man einen Standard-Satz hinterlegen, wenn kein feed enthalten ist? Bsp. kein Feed = “Momentan haben wir keine News bereit für Sie.” Oder etwas in der Art?
Vielen Dank für Euren Top-Service
-
Hallo, kannst du einen Code MIT “letzte Feeds Anzahl” UND Beschränkung des Titels auf 20 Zeichen angeben, geht das ?
Grüsse
[...] und automatisch, abrufen lässt und das Ergebnis lokal zwischenspeichert (Caching). Auf RSS Newsfeed auf Homepages einbinden (Tutorial) habe ich eine solche RSS-Integration ausführlich erklärt und stelle euch den komplett [...]
[...] kostbaren Ladezeiten kostet. Stattdessen benutze ich dafür eine PHP-Lösung mit Cache, die ich auf RSS Newsfeed auf Homepage einbinden vorgestellt habe. Denn zum Cachen ist ein RSS Aufruf bestens geeignet. Es ist super schnell, mit [...]
[...] für den PHP Code zum Einbinden von RSS Feeds in Webseiten, der vorgestellt wird auf ‘RSS Newsfeed auf Homepages einbinden (Tutorial)‘. Mit dieser Anpassung könnt ihr die Anzahl der Elemente aus dem RSS Feed bestimmen, die auf [...]