RSS Newsfeed auf Homepages einbinden (Tutorial)

Mittwoch, März 3, 2010
Autor: homepage
Kategorien: Webmaster

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

rss newsfeed auf homepage einbinden

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‚.

Weiter mit Teil 2 dieses Tutorials: Dateien und PHP-Code

Hier geht´s weiter: Auf ‚RSS Newsfeed auf Homepages einbinden (Tutorial – Teil 2)‚ findest du den PHP-Code mit dem du die hier erkläten Dateien erstellen kannst.

19 Reaktionen zu “RSS Newsfeed auf Homepages einbinden (Tutorial)”

Trackbacks:
  1. […] 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 […]

Kommentare:
  1. michael schrieb am 24. März 2010

    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

  2. Micha schrieb am 25. März 2010

    Meinst du UTF-8 ? Was genau ist denn das Problem? Auf http://hpgeld.de habe ich zum Beispiel mit diesem Code die neuen Feedbeiträge von Homepage-Werbung.de integriert. Dort wird UTF-8 Codierung benutzt und es funktioniert alles. Auf einer anderen Seite hatte ich die Codierung der Seite in UTF-8 geändert, weil es dort Probleme mit den Umlauten gab. Aber beschreib mal genauer, was bei dir nicht klappt.

  3. Micha schrieb am 25. März 2010

    Gerade noch was gefunden:
    Es gibt auch PHP-Funktionen zum Codieren und Dekodieren von UTF-8 Code: http://www.php.net/manual/de/function.utf8-encode.php

    Vielleicht kannst du dein Codierungs-Problem lösen, indem du den Feed-Inhalt durch eine dieser Funktionen schickst.

  4. michael schrieb am 26. März 2010

    … 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

  5. Micha schrieb am 31. März 2010

    Gern geschehen!
    Wahrscheinlich ist es bei dir ja dann einfach damit getan, wenn du den Input vom Feed vor der Bearbeitung durch die ‚utf8_decode()‘-Funktion jagst. Dann sollte deine Webseite und der Input vom Feed in ISO-8859-1 codiert sein.
    Viel Erfolg!

  6. robroy schrieb am 7. April 2010

    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!

  7. Micha schrieb am 9. April 2010

    Hi robroy,

    bitte! Ja, das geht alles.

    1) Wie man die Anzahl der Beiträge konfiguriert, habe ich erklärt auf http://homepage-werbung.de/bestimmte-anzahl-rss-feed-elemente-auf-webseite-einbinden/ . Du brauchst dazu einfach nur einen kleinen Teil im Code durch einen anderen Codeschnipsel auszutauschen.

    2) Die RSS Description kannst du auf deiner Homepage mit beliebiger Länge einbinden mit folgendem Code:

    RSS-Description auf Homepage einbinden:
    < ?=substr($i->description, 0, strrpos(substr($i->description, 0, 120+1), ‚ ‚)) ?>

    Die 120 in diesem Codeschnipsel steht für 120 Zeichen. Du kannst die Zahl auf deine Bedürfnisse anpassen. Wie man generell Strings in PHP kürzt, ohne dabei einzelne Wörter zu zerhacken, habe ich erklärt auf http://homepage-werbung.de/mit-php-strings-kuerzen-ohne-das-letzte-wort-zu-zerhacken/ .

    Viel Erfolg!
    Micha

  8. Maik schrieb am 13. April 2010

    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???

  9. Micha schrieb am 15. April 2010

    Ne, das liegt nicht an der PHP Version sondern an einem ganz blöden Fehler, den ich in meinem Code gemacht hatte. Ich hatte in Zeile 25 ganz am Anfang einfach die beiden // vergessen.

    Der Fehler ist aber jetzt behoben und der Code funktioniert korrekt.

    Weil die // fehlten, wusste der PHP Interpreter deines Servers nicht, dass es sich bei dem Text in Zeile 25 um einen Kommentar handelt. Er merkte aber auch, dass es kein PHP Code o.ä. ist, womit er was anfangen könnte. Deshalb brach er seine Arbeit mit der Fehlermeldung an uns ab, dass er auf eine unerwartete Zeichenkette gestoßen ist.

    Natürlich teste ich Code, den ich hier veröffentliche, vorher immer ausgiebig. Das hatte ich auch mit diesem Code getan und er funktionierte bei mir auch bestens. Nur musste ich den Code vorm Posten hier noch durch ein paar Zeilenumbrüche ergänzen, weil die Zeilenlänge hier im Blog beschränkt ist. Wenn ich so im PHP Code aus einer Zeile zwei mache, ändert das syntaktisch am Code nichts. Bei einzeiligen Kommentaren natürlich schon.

    Vielen Dank auf jeden Fall fürs bescheid sagen!!!

  10. Armin schrieb am 3. Mai 2010

    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?

  11. Micha schrieb am 4. Mai 2010

    @Armin:
    Zumindest werden bei dir im Script schon mal 13 Zeichen in die Variable $rssLinks geschrieben. Eine Erklärung dafür könnte sein, dass bei dir die foreach Schleife ab Zeile 12 nicht durchlaufen wird, weil du eine fehlerhafte Feed-Adresse angegeben hast oder der Feed keine Elemente enthält, also leer ist.

    – Was passiert denn, wenn du testweise die Feed-Adresse benutzt, die hier im Beispiel benutzt wird?
    – gucke dir mal bitte den HTML-Quellcode an, wenn du im Browser die update.php aufrufst. Steht das was in der Art wie…
    <ul>
    </ul>

    – Öffne mal die Datei cache.htm. Steht da auch dieser HTML Code drin?

  12. Micha schrieb am 10. Mai 2010

    @mgi:
    Das kommt von der var_dump-Ausgabe in Zeile 30. var_dump() analysiert eine Variable. In unserem Fall die Variable $rssLinks, in der die Ausgabe der RSS-Einträge bzw der Inhalt der cache.htm steht. string(1840) besagt einfach nur, dass die Variable vom Typ string ist (also eine Zeichenkette) und 1840 Zeichen hat. In den Anführungszeichen steht der Inhalt der Variable, also das, wofür wir uns eigentlich interessieren und was in die Datei cache.htm geschrieben wird.

    Du könntest das natürlich abstellen, indem du Zeile 30 mit folgendem Code ersetzt:
    echo $rssLinks;

    Im Prinzip ist es aber so gedacht, dass die update.php nur von deinem Cronjob und nicht von Menschen aufgerufen wird. Deshalb wäre es dann relativ egal, was dort dann zu sehen ist. Dateien, die von Menschen und Suchmaschinen aufgerufen werden, sollen ja stattdessen die Feed-Infos aus der cache.htm-Datei beziehen, weil das viel schneller geht bzw. weil die update.php zu langsam ist.

    PS: Wegen der Formatierung hier in den Kommentaren: Ich habe den Code, den du gepostet hast, angepasst. Er müsste jetzt so sein, wie du ihn haben wolltest.

  13. ben schrieb am 12. Mai 2010

    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???

  14. Micha schrieb am 14. Mai 2010

    @ben
    Das hört sich an, als würde der PHP Code nicht ausgeführt werden, wenn du die Datei per Cronjob oder BefehlsShell aufrufst.
    Die update.php muss per Webadresse aufgerufen werden, die man auch im Browser angeben würde. Dann wird der PHP Interpreter auch angeschmissen und führt den Code aus. Ich vermute mal, dass bei deinen bisherigen Versuchen einfach die update.php auf dem Server direkt als Datei und nicht als Webadresse aufgerufen wurde. Das ist ja dann für die Datei bzw. den Webserver so, als würdest du dir einfach mit einem Texteditor, Entwicklungsumgebung o.ä. den Quelltext ansehen. Und dabei wird der Code dann ja nicht ausgeführt.
    Ich hoffe, aus deinen Angaben die richtige Diagnose gemacht zu haben 😉

  15. Micha schrieb am 20. Mai 2010

    Oh, auf deinem Server scheint die SimpleXML-Extension nicht installiert zu sein. Das kannst du überprüfen, indem du in einer PHP-Datei auf deinem Server die Funktion phpinfo() aufrufst, die dir beim Browseraufruf u.a. anzeigt, welche PHP Extensions bei dir installiert sind. Ohne SimpleXML kannst du es leider vergessen, weil mein Script voll darauf aufsetzt und auch nur so einfach ist, weil ich die komplizierte XML Parserei von SimpleXML erledigen lasse. Falls du bei nem Webhoster bist, kannst du evtl mal dort anfragen, ob die auch eine PHP-Version/Konfiguration mit SimpleXML anbieten? Öfter mal haben die verschiedene Konfigurationen, aus denen du als Webspace-Kunden auf Anfrage auswählen kannst.

  16. ben schrieb am 11. Juni 2010

    @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 😀

  17. Rene schrieb am 16. Juni 2010

    Hallo, kannst du einen Code MIT „letzte Feeds Anzahl“ UND Beschränkung des Titels auf 20 Zeichen angeben, geht das ?

    Grüsse

  18. Sportler (kein Impressum gefunden) schrieb am 1. Dezember 2010

    Hi, klasse Idee, das mit der geringen Ladezeit gefällt mir sehr gut, aber leider werden keine ä ö ü angezeigt. Habe die files mit UTF-8 Kodierung gespeichert.

    Auch eine maximale Anzahl der Einträge in die cache.htm wäre schön

    Grüße,