Sprung zum Inhalt

Webdesign nach Maß von webdesign weisshart

RSS Feed auf der eigenen Homepage anzeigen


Das RSS Logo

RSS Feeds gibt es wie Sand am Meer. Fast jedes Blog oder CMS erzeugt auch einen Feed. Wie wäre es, den Inhalt eines beliebigen Feeds auf der eigenen Homepage anzuzeigen? Automatisch aktualisiert!
Auf meiner Startseite zeige ich gleich 2 Feeds.

Den RSS Feed AbonnementArtikel-Feed

und den RSS Feed AbonnementBlog-Feed


Man kann diese Aufgabe mit einem Werkzeug wie MagpieRSS erledigen.
Es geht aber auch viel einfacher: mit folgendem kleinem PHP Script. Vermutlich das schlankste Script für diesen Zweck. Erforderlich ist PHP ab Version 5, wegen der dort erstmals verfügbaren Funktion simplexml_load_file().

Die PHP-Funktion

Diese Funktion an den Anfang der Seite.

<?php function rss2html($url,$anz,$length,$target) { $n=1; if ($target == 1) {$target = ' target="_blank"';} else {$target = '';} $output = '<ul>'; if ($rss = @simplexml_load_file($url)) { foreach($rss->channel->item as $item) { $title = str_replace ("& ","&amp; ",$item->title); $wort = explode(" ", $title); //erstes Wort $output .= '<li class="item_link">'; $output .= '<h3><a href = "'.$item->link.'" '.$target.'>'.$item->title.'</a></h3> '; if (isset($item->pubDate)) { $output .= '<span class="it_date">'; $output .= date("j.n.Y",strtotime($item->pubDate)).'</span><br>'; } else { $output .= '<span class="it_date">'; $dc = $item->children('http://purl.org/dc/elements/1.1/'); $itemDate = date_parse($dc->date); $itemYear = $itemDate['year']; $itemMonth = $itemDate['month']; $itemDay = $itemDate['day']; $itemOutputDate = $itemDay.'.'.$itemMonth.'.'.$itemYear; $output .= $itemOutputDate.'</span><br>'; } $string = $item->description; if($length && strlen($string) > $length) { $string = substr($string,0,$length)."..."; $string_ende = strrchr($string, " "); $string = str_replace($string_ende," ...", $string); } $output .= $string; $output .= '<span class="weiter"><a href="'.$item->link.'" '.$target.'>weiterlesen:&nbsp;"'.$wort[0].'&nbsp;'.$wort[1].'&nbsp;..."</a></span>'; $output .= '</li>'; if($n>=$anz){break;} $n++; } return $output.'</ul>'; } else {return "<p>Fehler beim Einlesen der Datei $url</p>";} } ?>

Die Anzeige

Die obige Funktion wird ganz einfach wie folgt aufgerufen. Übergeben werden als erster Parameter der URL des Feeds, als zweiter Parameter die Anzahl der maximal anzuzeigenden Nachrichten, und als dritter Parameter die max. Länge des angezeigten Textes (Zeichen), sowie als vierter Parameter (optional) 1 für target="_blank", damit Links in einem neuen Tab/Fenster geöffnet werden.

<?php echo rss2html("http://domain.tdl/seite.xml",4,200[,1]); ?>

Die Anzeige kann natürlich jetzt beliebig mit CSS gestylt werden.

Hinweis: Gegebenenfalls sind Urheberrechte des Feed-Erstellers zu beachten.

Fertig.

13 Kommentare

  1. Nixsager schrieb am Montag, 05.10.09 11:05 Uhr:

    Eigentlich genau das was ich gesucht habe!
    Aber leider kann man in der Adressleiste nicht den RSS-Feed und die Anzahl der anzuzeigenden Einträge angeben!

    Antwort:
    1. Adressleiste? Das vorgestellte Script hat erst mal nichts mit der Adressleiste zu tun, sondern beschreibt, wie man einen Feed auf einer Webseite anzeigt.

    2. Wenn du die Adresse eines Feeds
    (z. B. http://webdesign.weisshart.de/artikel_feed.xml) in die Adressleiste eingibst, und der Browser kann Feeds direkt anzeigen (z. B. Opera) dann siehst du alle Einträge

  2. Nixsager schrieb am Montag, 05.10.09 21:30 Uhr:

    Zu 1.: Ich wollte den Feed und die Anzahl der Einträge als Variabeln wie in eine Forum übernehmen! (z.B. http://webdesign.weisshart.de/rss2html.p hp?url=http://webdesign.weisshart.de/art ikel_feed.xml&anz=10)

    Zu 2. Genau das will ich ja vermeiden!
    Was soll ich denn mit dem guten Script wenn der Browser die Feeds ja auch anzeigt!
    Es gefällt mir so nicht!

    Sorry für den unötigen(?) Post!

  3. Thomas schrieb am Freitag, 28.09.12 13:33 Uhr:

    Ich nutze das 'externe' Script rss2html und bin jetzt an (m)eine Grenze gestoßen. Eventuell kann ich mit Deinem Script mein Problem lösen.

    Wie kann ich denn den Beitrag/das Item mit einer Begrenzung an Zeichen ausgeben ?

  4. Thomas schrieb am Freitag, 28.09.12 13:37 Uhr:

    Ich nutze das 'externe' Script rss2html und bin jetzt an (m)eine Grenze gestoßen. Eventuell kann ich mit Deinem Script mein Problem lösen.

    Wie kann ich denn den Beitrag/das Item mit einer Begrenzung an Zeichen ausgeben ?

    ===

    Sorry für die Aufregung. Ich habe es in einem anderen Blog gefunden. Bei rss2html kann man einfach &ItemDescriptionLength= an die Url anfügen.

  5. Dieter schrieb am Samstag, 06.09.14 11:57 Uhr:

    Hallo zusammen,

    ich betriebe eine Wetterseite und habe ein RSS FEED mittels ihres Scriptes unter http://www.dieters-wetter.de/sentra/gaggenau/bawue-aktuell/ erzeugt. Es klappt auch alles hervorragend, einzig ich wollte eigentlich das wennn ich auf den Link gehe sich ein neues Fenster öffnet und nicht im sleben Fenster der Link geöffnet wird. Ist sowas möglich wenn ja was muss ich eventuell veränder ??

  6. Fritz schrieb am Samstag, 06.09.14 12:10 Uhr:

    @Dieter
    http://lmgtfy.com/?q=Link+in+neuem+Fenster+%C3%B6ffnen

  7. Dieter schrieb am Samstag, 06.09.14 12:20 Uhr:

    Hallo nochmals, ich glaube ich habe mich falsch ausgedrückt, jeder RSS Eintrag hat doch einen Link unter meiner Webseite in hllblau definiert, wenn ich darauf klicke soll sich ein neues Fenster öffnen, kann ich das innerhalb des Scriptes lösen ??

  8. Dieter schrieb am Samstag, 06.09.14 12:39 Uhr:

    Ich habs gefunden klappt alles wie gewünscht......

  9. Fabian schrieb am Montag, 15.06.15 13:20 Uhr:

    Hallo zusammen und erstmal vielen Dank für das Script!

    Auf meinem Server läuft das einwandfrei, nur lokal mit xampp bekomme ich die Fehlermeldung: Fehler beim Einlesen der Datei http://www.spiegel.de/schlagzeilen/tops/index.rss
    Ich hatte erst gedacht das es mit mit der php-Version zusammenhängt, aber xampp verwendet php 5.6.8

    Hat sonst jemand eine Idee warum das Script nicht läuft?
    Ich würde mich über einen Tipp sehr freuen.

    Vielen Dank und viele Grüße

  10. Fritz schrieb am Dienstag, 16.06.15 12:00 Uhr:

    @Fabian

    da das Script auf deinem Server läuft, bist du ja in der glücklichen Lage, vergleichen zu können, und anhand der (vermutlich) unterschiedlichen Konfiguration zu debuggen.
    Hinweise findest du möglicherweise auch in der Doku:
    http://php.net/manual/de/function.simplexml-load-file.php

    Noch ein Hinweis: Der Feed von Der Spiegel validiert nicht
    Du könntest also zum Testen versuchen, einen validen Feed einzubinden.


    Und noch einen Hinweis kann ich mir nicht verkneifen: Bist du sicher, dass Der Spiegel einverstanden ist, dass du seine Inhalte auf deiner Seite veröffentlichst?

  11. Fabian schrieb am Freitag, 19.06.15 09:28 Uhr:

    @Fritz: Danke für deinen Tipp mit dem debuggen und dem validieren!

    Bevor ich den Feed von Spiegel Online (oder einen anderen, bin mir noch nicht ganz sicher welchen) werde ich den auf jeden Fall vorab mit dem Feed-Lieferanten sprechen. Danke auch für den Hinweis!

  12. Steffen schrieb am Samstag, 25.07.15 19:56 Uhr:

    Vielen dank, funktioniert bestens! Genial wäre jetzt noch ein Caching der Feeds, damit sie nicht jedes Mal beim Aufruf der Seite neu abgerufen werden, obwohl keine neuen Inhalte vorhanden sind. Ich probiere gerade die Integration in eine Art Portalseite für mehrere Unterprojekte, von denen jedes einen eigenen Feed hat. Bei 3 Feeds merkt man schon eine leichte Verzögerung beim Seitenaufbau. Ansonsten aber sehr effektiv.

  13. Fritz schrieb am Samstag, 25.07.15 20:23 Uhr:

    @Steffen
    Das mit dem Caching richtig erkannt. Ich weiß allerdings nicht, wie ich feststellen soll, ob ein neuer Feed vorhanden ist, ohne ihn einzulesen und mit (womit?) zu vergleichen.

    Ich habe das folgendermaßen gelöst (weil ich meine eigenen Feeds einbinde, weiß ich ja, wann es einen neuen Feed gibt):

    Ich rufe das Script nicht direkt in der Seite auf, wo der Feed später angezeigt werden soll, sondern in einer eigenen PHP-Seite, die ich nur aufrufe, wenn es einen neuen Feed gibt.
    Diese Seite beinhaltet das Script, aber (anstelle der Anzeige) speichert sie den Output des Scripts in einer eigenen Datei , z. B. blog_teaser_inc.php
    Letztere (statische) Datei binde ich an Stelle des Scripts per include in die Homepage ein.

Ihr Kommentar zu diesem Artikel:

Über Ihren Kommentar oder Ihre Frage zu diesem Artikel freue ich mich. Ich behalte mir jedoch vor, Einträge wider die guten Sitten, unsinnige Einträge, oder Spam kommentarlos zu entfernen.