Sie haben JavaScript deaktiviert. Vermutlich sind Sie ein Kollege und wollen nur sehen, ob meine Website auch ohne JavaScript funktioniert.
Andernfalls: Bitte aktivieren Sie JavaScript!
Hinweis:
Dieser Artikel ist älter als 18 Monate / wurde seit 18 Monaten nicht aktualisiert. Dies kann (muss aber nicht) dazu führen, dass der Artikel, und / oder darin beschriebene Techniken, nicht mehr aktuell sind. Bitte berücksichtigen Sie diesen Hinweis bei der Lektüre.
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!
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().
Diese Funktion an den Anfang der Seite.
<?php
// Hinweis: allow_url_fopen muss auf on gesetzt sein
$allowurlfopen = ini_get('allow_url_fopen');
if ($allowurlfopen != 1) {
echo "In der php.ini ist allow_url_fopen ausgeschaltet. Mit dieser Einstellung funktioniert das Einlesen des Feeds leider nicht.";
exit;
}
date_default_timezone_set("Europe/Berlin");
libxml_use_internal_errors(true);
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 ("& ","& ",$item->title);
$wort = explode(" ", $title); //erstes Wort
if (!isset($wort[1])) { $wort[1] = null; }
$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("d.m.Y H:i",strtotime($item->pubDate)).' Uhr</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: "'.$wort[0].' '.$wort[1].' ..."</a></span>';
$output .= '</li>';
if($n>=$anz){break;}
$n++;
}
return $output.'</ul>';
} elseif ($rss === false) {
echo "Laden des XML fehlgeschlagen\n";
foreach(libxml_get_errors() as $error) {
echo "\t", $error->message;
}
} else {return "Fehler beim Einlesen der Datei $url";}
}
?>
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 0, oder 1 für target="_blank", damit Links in einem neuen Tab/Fenster geöffnet werden.
<?php echo rss2html("http://domain.tdl/seite.xml",4,100[,1/0]); ?>
Die Anzeige kann natürlich jetzt beliebig mit CSS gestylt werden.
Hinweis: Gegebenenfalls sind Urheberrechte des Feed-Erstellers zu beachten.
Fertig.
Quelle: Spiegel Online - Autorisierung angefragt 04.04. und 21.05.2019
Artikeltexte und Code-Snippets: Creative Commons CC BY-SA 4.0
Medien (Bilder, Videos, Audios) sind evtl. urheberrechtlich geschützt.
Über Ihren Kommentar zu diesem Artikel freue ich mich.
Wenn Sie aber Fragen haben, und eine Antwort erwarten, nutzen Sie bitte das Supportforum! Die Nutzung des Forums ist auch ohne Registrierung möglich.
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
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!
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 ?
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.
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 ??
Fritz schrieb am Samstag, 06.09.14 12:10 Uhr:
@Dieter
http://lmgtfy.com/?q=Link+in+neuem+Fenster+%C3%B6ffnen
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 ??
Dieter schrieb am Samstag, 06.09.14 12:39 Uhr:
Ich habs gefunden klappt alles wie gewünscht......
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
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?
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!
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.
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.
Nixsager schrieb am Donnerstag, 15.02.18 20:35 Uhr:
Hi
Das Script scheint mit HTTPS/Verschlüsselung nicht zu funktionieren.
Gruß vom Nixsager
Walter schrieb am Samstag, 30.03.19 11:18 Uhr:
Hallo
Das ist genau was ich suche :-)
Aber es funktioniert nicht bei mir (die Funktion habe ich bei Zeile 1 eingebaut) :-(
<?php echo rss2html("http://www.tagesschau.de/newsticker.rdf",4,500); ?>
Auch habe ich es erfolglos versucht mit:
<?php echo rss2html("http://www.tagesschau.de/xml/rss2",4,500); ?>
Fritz schrieb am Samstag, 30.03.19 12:21 Uhr:
@Walter
es fehlt eine Kleinigkeit in deinem Aufruf: Der 4. Parameter (0 oder 1)
<?php echo rss2html("http://www.tagesschau.de/xml/rss2",4,500,1); ?>
Wenn du ansonsten alles richtig gemacht hast, dann solltest du sogar eine Fehlermeldung erhalten, die genau darauf hinweist.
PS: Ich hab' bei der Gelegenheit die PHP-Funktion, genauer: die Anzeige des Datums, nochmal angepasst.