RSS Feed auslesen mit PHP 14.01.2008

  • zu del.icio.us hinzufügen zu Mister Wong hinzufügen zu Technorati hinzufügen RSS Feed abonnieren

Viele Websites stellen den Besuchern RSS Feeds zur Verfügung. Die Inhalte lassen sich nicht nur über einen RSS-Reader abrufen, sondern auch in die eigene Homepage einbinden. Mit PHP werden die RSS Feeds ausgelesen. Die ausgelesenen Inhalte des RSS Feeds lassen sich mit CSS individuell an die eigene Homepage anpassen.

Ein Vorteil dieser RSS Feed Abonnements ist, dass der Nutzer über neue Inhalte auf der Website informiert wird, ohne die eigentliche Website zu besuchen.
Viele RSS Feeds werden extern von Webmastern in deren Homepage eingebunden. Oft sieht man z.B. die aktuellen News von Heise.de auf diesen Homepages. Im Folgenden erläutere ich, wie man selber Inhalte aus RSS Feeds ausließt und diese in seine Homepage einbindet. Das Script ist kompatibel mit PHP4 und PHP5. Der Aufbau eines RSS Feed ist simpel.

» Demo (RSS Feed mit PHP auslesen)
» Das PHP-Script als Download (Nutzungsrechte siehe Datei)


Der PHP Code

Damit das PHP Script komfortabel aufgerufen werden kann, habe ich mich dieses Mal dazu entschieden eine Funktion zu programmieren. Die Deklaration der Funktion in PHP geschieht so:

function getRssfeed($rssfeed, $cssclass="", $encode="auto", $anzahl=10, $mode=0) {

Zur Erläuterung der Parameter:
$rssfeed enthält den Link zum RSS Feed
$cssclass enthält den Namen der CSS Klasse, der in der Ausgabe für den Layer (DIV) verwendet werden soll (es wird automatisch rssfeed_ vorangestellt)
$encode enthält die Encodierungs Methode (z.B. "utf-8"; bei "auto" ermittelt das Script die Methode automatisch anhand des RSS Feeds; bei "no" wird nicht encodiert)
$anzahl enthält die Anzahl an Items des RSS Feeds, die maximal angezeigt werden sollen
$mode enthält die Darstellungsart des RSS Feeds (0 = nur Titel und Link der Items weden ausgegeben; 1 = Titel und Link zum Channel werden ausgegeben; 2 = Titel, Link und Beschreibung der Items werden ausgegeben; 3 = 1 & 2)

Der Zugriff auf den RSS Feed geschieht durch @file. Die Items werden mit preg_match_all anhand des item-Tag (<item>) ermittelt. Es werden nur die Inhalte gespeichert, die sich in der definierten Gruppe befinden, hier: (.+).

$data = @file($rssfeed);
$data = implode ("", $data);
preg_match_all("/<item.*>(.+)<\/item>/Uism", $data, $items);

Nun wird anhand von $encode entschieden, wie die Inhalte encodiert werden sollen:

if($encode == "auto")
{
preg_match("/<?xml.*encoding=\"(.+)\".*?>/Uism", $data, $encodingarray);
$encoding = $encodingarray[1];
}
else
{$encoding = $encode;}

Nun folgt das Auslesen und die Ausgabe des Titels und des Links des RSS Channels (sofern $mode entsprechend definiert wurde):

echo "<div class=\"rssfeed_".$cssclass."\">\n";
// Titel und Link zum Channel
if($mode == 1 || $mode == 3)
{
$data = preg_replace("/<item>(.+)<\/item>/Uism", '', $data);
preg_match("/<title>(.+)<\/title>/Uism", $data, $channeltitle);
preg_match("/<link>(.+)<\/link>/Uism", $data, $channellink);

$channeltitle = preg_replace('/<!\[CDATA\[(.+)\]\]>/Uism', '$1', $channeltitle);
$channellink = preg_replace('/<!\[CDATA\[(.+)\]\]>/Uism', '$1', $channellink);

echo "<h1><a href=\"".$channellink[1]."\" title=\"";
if($encode != "no")
{echo htmlentities($channeltitle[1],ENT_QUOTES,$encoding);}
else
{echo $channeltitle[1];}
echo "\">";
if($encode != "no")
{echo htmlentities($channeltitle[1],ENT_QUOTES,$encoding);}
else
{echo $channeltitle[1];}
echo "</a></h1>\n";
}

Als nächstes werden Titel, Link und Beschreibung der Items ausgelesen und entsprechend ausgegeben:

// Titel, Link und Beschreibung der Items
foreach ($items[1] as $item) {
preg_match("/<title>(.+)<\/title>/Uism", $item, $title);
preg_match("/<link>(.+)<\/link>/Uism", $item, $link);
preg_match("/<description>(.*)<\/description>/Uism", $item, $description);

$title = preg_replace('/<!\[CDATA\[(.+)\]\]>/Uism', '$1', $title);
$description = preg_replace('/<!\[CDATA\[(.+)\]\]>/Uism', '$1', $description);
$link = preg_replace('/<!\[CDATA\[(.+)\]\]>/Uism', '$1', $link);

echo "<p class=\"link\">\n";
echo "<a href=\"".$link[1]."\" title=\"";
if($encode != "no")
{echo htmlentities($title[1],ENT_QUOTES,$encoding);}
else
{echo $title[1];}
echo "\">";
if($encode != "no")
{echo htmlentities($title[1],ENT_QUOTES,$encoding)."</a>\n";}
else
{echo $title[1]."</a>\n";}
echo "</p>\n";
if($mode == 2 || $mode == 3 && ($description[1]!="" && $description[1]!=" "))
{
echo "<p class=\"description\">\n";
if($encode != "no")
{echo htmlentities($description[1],ENT_QUOTES,$encoding)."\n";}
else
{echo $description[1];}
echo "</p>\n";
}
if ($anzahl-- <= 1) break;
}
echo "</div>\n\n";

Jetzt muss nur noch die Funktion wieder geschlossen werden:

}

Die Funktion getRssfeed aufrufen

Der Aufruf der Funktion kann wie folgt aussehen:

getRssfeed("http://www.web-spirit.de/web-spirit.php","web-spirit","auto",3,3);

oder auch:

getRssfeed("http://www.heise.de/newsticker/heise.rdf","heise","auto",5,1);

XHTML Ausgabe

Die vollständige Ausgabe mit einem Item sieht in XHTML so aus:

<div class="rssfeed_CSSKLASSE">
<h1><a href="CHANNEL LINK" title="CHANNEL TITEL">CHANNEL TITEL</a></h1>
<p class="link"><a href="ITEM LINK" title="ITEM TITEL">ITEM TITEL</a></p>
<p class="description">ITEM BESCHREIBUNG</p>
</div>

Man kann sehr gut erkennen, wie einfach die XHTML Ausgabe nun in CSS angesprochen und gestaltet werden kann.

» Demo (RSS Feed mit PHP auslesen)
» Das PHP-Script als Download (Nutzungsrechte siehe Datei)

Wie immer kann man mich bei Fragen gerne über das Kontaktformular anschreiben oder einen Kommentar hinterlassen.


« Zur Übersicht

sbh
1
am 06.11.2008 um 17:54 Uhr.
Hi, Das Script gefällt sehr. Ich habe allerdings ein Problem mit dem Zeichensatz, undzwar scheint es mit UTF-8 nicht zu klappen (darstellung ist falsch à la "Schwere Vorwürfe: McCain und Palin rechnen miteinander ab").

Bei der Funktionsdekleration steht bei mir:
function getRssfeed($rssfeed, $cssclass="", $encode="utf-8", $anzahl=10, $mode=0) { ...

Der Aufruf sieht wie folgt aus:
getRssfeed("http://www.spiegel.de/schlagzeilen/rss/0,5291,,00.xml","","utf-8",6,0);

Auch wenn ich $encode auf "auto" setze gibts das selbe Problem, ich hoffe mir kann (noch) geholfen werden :)

lg
Sebastian
2
am 06.11.2008 um 19:35 Uhr.
Hallo sbh,

welchen Zeichensatz verwendest du denn auf deiner Website?
Da der Spiegel Feed den Zeichensatz iso-8859-1 verwendet, solltest du mal »iso-8859-1« versuchen.
getRssfeed("http://www.spiegel.de/schlagzeilen/rss/0,5291,,00.xml","","iso-8859-1",6,0);

Gruß
Sebastian
sbh
3
am 11.11.2008 um 17:27 Uhr.
Hi,

danke für die (schnelle) Antwort.

Auf meiner Seite verwende ich UTF-8. Leider hat der Tipp iso-8859-1 zu benutzen auch nicht gefruchtet.

Vielleicht noch eine andere Idee? :)

LG
Sebastian
4
am 11.11.2008 um 18:11 Uhr.
Dann versuch' doch mal (encoding = no):
getRssfeed("http://www.spiegel.de/schlagzeilen/rss/0,5291,,00.xml","","no",6,0);

Alternativ könntest du mir auch deine Website nennen, dann werfe ich mal einen Blick darüber.

Gruß
Sebastian
sbh
5
am 14.11.2008 um 12:29 Uhr.
Hi,
cool, dass du immer so schnell antwortest! Und weil es sich gehört: Der letzte Lösungsvorschlag hat hingehauen! Läuft reibungslos.

An dieser Stelle - vielleicht interessiert es dich ja auch so noch - die Seite, um die es geht / ging:
http://imbar.net/start/

Ich habe die Seite nur für mich gebastelt; und wie man auch unschwer am Pfad erkennen kann, ist sie als Startseite gedacht. Umgesetzt ist die gesamte Seite dann so (PHP Code):
http://nopaste.tshw.de/1226661731001b6/

Und ja, ich weiß, dass die Seite unzählige Warnungen wirft; für mich erfüllt sie aber ihren Zweck.

Vielleicht hast du ja sogar noch eine Idee, was auf diese Startseite integriert werden könnte.

Auf jeden Fall nochmal herzliches Dankeschön für die Hilfe!
In diesem Sinne Grüße!
Sebastian
6
am 14.11.2008 um 14:14 Uhr.
Freut mich, dass es nun funktioniert.
Ich habe das Script für ein neues Projekt inzwischen so umgeschrieben, dass die einzelnen Feeds nicht bei jedem Aufruf der Website neu geparsed werden, sondern in einer Datenbank zwischengespeichert werden. Aktualisierungsinterval ist natürlich individuell festlegbar.

Das angepasste Script werde ich dann demnächst veröffentlichen. Also es lohnt sich, hin und wieder mal vorbeizuschauen ;)

Gruß
Sebastian
Oliver
7
am 01.12.2008 um 12:19 Uhr.
Hallöchen!

Das ist ja mal ein sehr interessanter Beitrag. Ich habe ein ähnliches Problem: Ich möchte gerne von einer Partnerseite einen RSS Feed auslesen und die angebotenen Veranstaltungen per Php-Script in unseren Veranstaltungekalender über die Datenbank einpfelgen. Dies könnte einmal täglich passieren. Dabei sollten nach Möglichkeit natürlich kein Doubletten erzeugt werden.

Ich stelle es mir ungefähr so vor:
nach jedem empfangenen Datensatz aus dem RSS Feed wird eine Anfrage an die eigene Datenbank gesendet, die nach Datum, Uhrzeit, Titel und Ort sucht. Wenn das Ergebnis NULL zurückliefert, sollen die Daten entsprechend in die Datenbank implementiert werden.

Wäre dies realisierbar?

Beste Grüße
Oli
Sebastian
8
am 01.12.2008 um 16:22 Uhr.
Hallo Oliver,

natürlich ist dein Vorhaben realisierbar.
Du musst allerdings das obige Script so anpassen, dass die Inhalte nicht ausgegeben werden, sondern lediglich verarbeitet werden. Vorraussetzung zur Verarbeitung von den einzelnen Datenfeldern Datum, Ort, Titel und Ort ist, dass diese durch ein Trennzeichen im RSS Feed getrennt werden. Ansonsten wird es schwierig.

Gruß
Sebastian
Aus Zwei mach Eins - HorstScheuer.net
9
am 03.12.2008 um 12:20 Uhr.
[...] Diese Code-Zeilen sind jedoch so einfach und auch genial, dass sie ohne größere Probleme in eigene Projekte eingebaut werden können. Die Funktion trägt den Namen getRssFeed und stammt von Sebastian Gollus. [...]
Martin
10
am 27.01.2009 um 19:22 Uhr.
Hi,

cool ... das Script funktioniert prima ...

LG,

Martin
SVen
11
am 01.02.2009 um 17:59 Uhr.
Hi,
klappt super. Vielen Dank. Ich bin mit diesen Sachen nicht so bewandert, konnte Dein Script aber ohne Schwierigkeiten einbinden. Toll das es noch Menschen gibt die Ihr KnowHow weitergeben.
Mach weiter so.
Gruß
Sven
Anika Kurth
12
am 07.02.2009 um 23:20 Uhr.
Hallo,

sehr tolles skipt!
Hab ich auch die Möglichkeit, die Formatierung des Beitrages mit zu übernehmen? Also die <br /> und die Farben etc ..
Sebastian
13
am 08.02.2009 um 10:57 Uhr.
Hallo Anika,
welche Formatierungen von welchem Beitrag meinst du? Zeilenumbrüche werden, sofern im Feed vorhanden, natürlich mit ausgegeben.
Andre
14
am 23.02.2009 um 21:09 Uhr.
Hallo,
Das Script ist schon Klasse.
Auf meinem Rechner mit Apache klappt das auch wunderbar, lade ich das auf den externen Server bekomme ich aber die Meldung "Warning: implode() [function.implode]: Invalid arguments passed in..." angezeigt und ich habe Momentan kein Plan was das soll, vielleicht kannst du mir ja weiterhelfen?

gruß
Andre
Sebastian
15
am 23.02.2009 um 21:16 Uhr.
Hallo Andre,
wenn du jetzt noch den Rest der Fehlermeldung posten könntest, könnte ich dir eventuell weiterhelfen ;-)
Grundsätzlich kann es aber sein, dass (ich nehme mal an, du meinst deinen Funpic Server) der Server Einschränkungen in der Verwendung von PHP hat. Eventuell gibt dir aber auch dein Apache Server nicht alle Fehlermeldungen aus --> error_reporting(E_ALL);
Am besten mal die ganze Fehlermeldung angeben und die Zeile im Script, die die Fehlermeldung erzeugt.

Gruß
Sebastian
Andre
16
am 24.02.2009 um 13:32 Uhr.
Danke erstmal für die schnelle Antwort.
Wahrscheinlich hat Funpic Einschränkungen, so etwas dachte ich mir schon, naja...
hier mal die komplette Fehlermeldung und Scriptzeile:
"Warning: implode() [function.implode]: Invalid arguments passed in /usr/export/www/vhosts/funnetwork/hosting/barand3/news/reader_function.php on line 4"
$data = @file($rssfeed);
$datings = implode ("", $data);

gruß
Andre
Sebastian
17
am 24.02.2009 um 14:36 Uhr.
Hallo Andre,
mal abgesehen davon, dass du aus $data $datings gemacht hast, ist alles OK. Probiere doch mal einen anderen Webserver aus.

Gruß
Sebastian
Andre
18
am 24.02.2009 um 17:12 Uhr.
ja werd mich mal auf die Suche nach einem anderen Webserver begeben.

Trotzdem vielen Dank

gruß
Andre
Kevin
19
am 21.03.2009 um 13:42 Uhr.
Hi Leute...

habe nicht soviel Kentnisse über PHP...
wo und wie muss ich die funktion getRssfeed ?

wäre euch sehr dankbar..

danke im voraus..

lg
kevin
Sebastian
20
am 21.03.2009 um 19:29 Uhr.
Hallo Kevin,

einfach das PHP-Script oben herunterladen und wie folgt die Funktion aufrufen:
getRssfeed("http://www.web-spirit.de/web-spirit.php","web-spirit","auto",3,3);

Grundkenntnisse in PHP sollten dennoch vorhanden sein, um das Script zu verstehen und sinnvoll anzuwenden.

Gruß
Sebastian
jan
21
am 25.03.2009 um 11:01 Uhr.
Moin,
ich möchte mithilfe Deines Scripts unterschiedliche Feeds auslesen, einige funktionieren einwadnfrei, andere nicht, das Script bricht irgendwann ab.

Es funktioniert nicht:
http://sonnenseite.com/index.php?pageID=rssfeed_de
oder
http://www.taz.de/1/zukunft/umwelt/rss.xml

hat da wer nen Tip?
Sebastian
22
am 25.03.2009 um 11:26 Uhr.
Hallo Jan,
das Script bricht bei mir zwar nicht ab aber ich hatte einen anderen Bug gefunden, der bei dem TAZ Feed auftrat.
Bitte nutze die neue Version 1.0.200903 und rufe die Feeds wie folgt auf:
getRssfeed("http://sonnenseite.com/index.php?pageID=rssfeed_de","sonnenseite","auto",3,1);
getRssfeed("http://www.taz.de/1/zukunft/umwelt/rss.xml","taz","auto",3,1);

Ich habe die Feeds der Demoseite hinzugefügt (oben verlinkt). Bei mir funktioniert es.

Gruß
Sebastian
Tom Schaffer
23
am 03.04.2009 um 20:58 Uhr.
Hallo Sebastian,

danke für dein schönes Script. Da ich beim Twitter-RSS (den ich auslesen möchte) ziemliche Ladezeiten habe, wollte ich mich erkundigen, wann du deine Caching-Variante veröffentlichst?

lg
Tom
Sebastian
24
am 07.04.2009 um 16:28 Uhr.
Hallo Tom,

das »Caching-Script« ist bei mir bereits im Einsatz. Allerdings nur rudimentär integriert und noch nicht beliebig anpassbar.
Im Grunde wird der RSS-Feed nur in bestimmten Zeitintervallen neu ausgelesen. Der Zeitstempel, sowie die Inhalte werden in einer Datenbank gespeichert. »Abgelaufene« Inhalte werden gelöscht.

magpieRSS ist eine OpenSource-Lösung, die ebenfalls RSS-Feeds ausliest und auch cached. Allerdings benötigt das Programm keine Datenbank.

Da ich momentan in Arbeit ersticke, habe ich für meine eigenen Projekte relativ wenig Zeit, sodass ich leider nicht sagen kann, wann ich mein Update veröffentlichen kann.

Da du Wordpress benutzt, kannst du auch sicherlich das ein oder andere Twitter Plugin finden, das deinen Ansprüchen genügt.
Kevin
25
am 13.04.2009 um 16:48 Uhr.
Hallo,
wie bekomme ich das Script besser an das Stylesheet meiner Seite angepasst? Die Angaben bei class= werden schlichtweg ignoriert und auch manuelle Manipulationen des Scripten brachten mir keinen Erfolg ein.
Was muss getan werden um das sich das Script an
a.link:link usw.
anpasst?
Auch bekomme habe ich das Problem mit dem Zeichensatz. Umlaute (Ä, Ü und Ö) werden nicht dargestellt

Gruss
Sebastian
26
am 13.04.2009 um 19:49 Uhr.
per CSS machst du es am besten so:
div.rssfeed_DEIN-FEED a { }
div.rssfeed_DEIN-FEED a:hover { }
etc.

Das Umlaut-Problem wird in den ersten vier Kommentaren gelöst. Falls es bei dir nicht funktioniert, nenne doch bitte deine Website und den Funktionsaufruf.
Kevin
27
am 13.04.2009 um 20:57 Uhr.
Klasse,
vielen Dank für den schnellen Support. Das mit dem CSS hätte ich auch selber drauf kommen können.
Mit dem Zeichensatz war ich etwas verwirrt vorin, entgegen meinen Erwartungen, funktioniert utf-8 bei mir. Hatte das nicht Probiert.

Besten dank

P.S. Das ist eine Interne Seite, kann ich leider nicht zur Schau stellen.

Gruss
Manuel
28
am 06.05.2009 um 14:44 Uhr.
Hallo,

vielen Dank für das tolle Script, habe es sofort zum laufen bekommen. Jetzt habe ich allerdings eine Frage: im Gegensatz zum Heise-Beispiel, ist das RSS was ich auslesen möchte anders strukturiert. Dort liegt <ITEM> innerhalb von <CHANNEL>. Beispiel: http://rv-journalyse.blogspot.com/feeds/posts/default. Wie kann ich das Script dazu bewegen, auch innerhalb von CHANNEL nach Item zu suchen? Stand jetzt bekomme ich kein Ergebnis,

Herzliche Grüße
Manuel
Sebastian
29
am 07.05.2009 um 19:26 Uhr.
Hallo Manuel,

ich habe das Script ein wenig angepasst. Schau, dass du die Version 1.0.200905 benutzt (Download oben). In der Demo habe ich deinen angegebenen Feed mal eingebunden.

Gruß
Sebastian
Bernd
30
am 24.06.2009 um 17:53 Uhr.
Hi hab das mal auf http://www.fellbach-cheerleadersquads.de/home/modules/rssfeed.php eingebaut und habe damit Probleme (am besten kurz drauf gucken). Ich suche gerade nach einer Alternative um die Youtube Videos eines bestimmten Users in meine Seite einzubinden.

Vielleicht kannst Du mir ja - am besten per mail . weiterhelfen.
LG Bernd
Sebastian
31
am 25.06.2009 um 00:25 Uhr.
Hallo Bernd,
bitte schicke mir doch mal deinen Code inkl. dem Link zum verwendeten RSS Feed von Youtube. Ich werde dann die Tage mal schauen, woran der Fehler liegt. Habe momentan leider wenig Zeit.

Gruß
Sebastian
sanoba
32
am 15.07.2009 um 15:20 Uhr.
Hab dein Script auch mal bei mir ausprobiert. Gefällt mir sehr gut. Danke dafür.
Jens
33
am 03.08.2009 um 17:36 Uhr.
Besten Dank für das Script - funktioniert bestens und hat mir eine Menge Arbeit gespart.

Einen kleinen Korrekturhinweis habe ich noch beizutragen. In die foreach-Schleife sollte noch ein
$link = preg_replace('/<!\[CDATA\[(.+)\]\]>/Uism', '$1', $link); eingefügt werden. Einige Feeds liefern nämlich auch ihre Links in einem CDATA-Bereich aus, so zB die von taz.de.

Gruß, Jens.
Sabine
34
am 11.08.2009 um 15:08 Uhr.
Na ja bei mir läuft das nicht so sauber.

Die Ausgabe zeigt mir dauernd am Ende folgendes

Die Kommunikation mit den Besuchern der eigenen Website ist für viele Betreiber essentiell. Aus diesem Grund werden Kontaktformulare verwendet. Auch für eine Sign-Up-Routine ist ein Formular notwendig. Bei der Gestaltung der Formulare können verschiedene Strategien angewendet werden, um gute Conversions zu erreichen.<div class=\"feedflare\"> <a href=\"http://feeds.feedburner.com/~f/Web-Spirit_Webdesign-Voerde?a=NrLyJNRA\"><img src=\"http://feeds.feedburner.com/~f/Web-Spirit_Webdesign-Voerde?d=50\" border=\"0\"></img></a> <a href=\"http://feeds.feedburner.com/~f/Web-Spirit_Webdesign-Voerde?a=jzMS20GV\"><img src=\"http://feeds.feedburner.com/~f/Web-Spirit_Webdesign-Voerde?d=41\" border=\"0\"></img></a> </div><img src=\"http://feeds.feedburner.com/~r/Web-Spirit_Webdesign-Voerde/~4/8y2WALyOnds\" height=\"1\" width=\"1\"/>

1:1 das den Code in eine rsstest.php reingeworfen.
Und ja - keine php Kentnisse da .

Gruss Sabine
Gerhard
35
am 16.08.2009 um 20:45 Uhr.
Bei wird auch die gesamte Auszeichnung mit ausgegeben. Ist recht unschön.
Jens
36
am 16.08.2009 um 23:56 Uhr.
@Sabine: Bist Du sicher, daß Du auch einen RSS-Feed und nicht irgendetwas anderes abzurufen versuchst? Deine PHP-Seite sollte etwa so aussehen:

<html>
<?php

function getRssfeed($rssfeed, $cssclass=\"\", $encode=\"no\", $anzahl=10, $mode=0)
{
// Hier gehört die komplette, oben verlinkte Methode hin,
// siehe \"Das PHP-Script als Download\".
}

echo \"<strong>Heise Newsticker</strong>\";
getRssfeed(\"http://www.heise.de/newsticker/heise.rdf\",\"\",\"auto\",5,0);
echo \"<br>\";

?>
</html>

Das zeigt eine Seite mit den obersten 5 Zeilen des Heise-Tickers.

Gruß, Jens.
Jens
37
am 17.08.2009 um 00:05 Uhr.
Kleiner Nachtrag: entferne alle Backslashes aus den 3 Zeilen vor dem ?> Die gehören nicht in den PHP-Code, die hat das Kommentarscript eingefügt.

Gruß, Jens.
Sebastian
38
am 17.08.2009 um 10:04 Uhr.
Ich habe den Übeltäter gefunden.
Das Problem liegt daran, dass in den RSS Feed über Feedburner noch "email this" und "add to del.icio.us" eingebaut sind.

Nutze doch einfach mal einen anderen RSS Feed, z. B. den von Heise. Da sollte das Problem nicht mehr auftreten.

Gruß
Sebastian
Gerhard
39
am 17.08.2009 um 13:02 Uhr.
Ich versuche den RSS-Feed der Meisterschützen (http://meisterschuetzen.net/index.php?page=Feed&type=RSS2) einzubinden. Auch dort werden in den Beiträgen alle Auszeichnungen mit ausgegeben.
Sebastian
40
am 22.08.2009 um 08:42 Uhr.
Hallo Gerhard,

deinen RSS Feed habe ich mal testweise in die Demo eingebunden. Damit gibt es keine Probleme (siehe: http://www.web-spirit.de/rssfeed.php).

Wer den Web-Spirit Feed ohne den Feedburner-Code einbinden möchte, kann gerne folgende URL verwenden:
http://www.web-spirit.de/web-spirit.php

Beste Grüße
Sebastian
Gerhard
41
am 27.08.2009 um 12:52 Uhr.
Hallo Sebastian,

danke. Dann werde ich gleich mal bei mir auf die Fehlersuche gehen.

Beste Grüße

Gerhard
Andi
42
am 31.08.2009 um 09:43 Uhr.
hallo!

ich versuche folgenden rss auszulesen: http://rss.feedsportal.com/c/685/f/434709/index.rss

leider bekomme ich ein ergebnis, dass so aussieht:

http://wincar.at/test.php

es werden also keine bilder oder formatierungen ausgegeben. was mach ich falsch? hab schon sämtliche methoden (0,1,2,3... und charset..) versucht, immer das gleiche ergebnis. gilt leider auch für andere rss die ich probiert habe.
Sebastian
43
am 31.08.2009 um 14:14 Uhr.
Ändere doch bitte
echo $description[1];
in
echo html_entity_decode($description[1],ENT_QUOTES);
dann funktioniert es mit:
getRssfeed("http://rss.feedsportal.com/c/685/f/434709/index.rss","autosport","no",3,3);

Allerdings nicht ganz sauber. Das Script ist eigentlich nicht für HTML-Code in den Einträgen ausgelegt.
Andi
44
am 01.09.2009 um 09:58 Uhr.
danke für die hilfe!
gegen die "fehlenden" Umlaute kann ich wahrscheinlich nichts machen, oder?
Sebastian
45
am 01.09.2009 um 13:50 Uhr.
Du kannst das CHARSET deiner Website anpassen oder hier eins mitgeben:
echo html_entity_decode($description[1], ENT_QUOTES, charset);

wobei du charset durch das entsprechende ersetzen musst, z. B. 'UTF-8'.
Referenz: html_entity_decode()
Erich
46
am 02.09.2009 um 13:07 Uhr.
Hallo Sebastian

Ich glaube das Script ist genau das was ich gesucht habe. Nur leider bringe ich es nicht zum laufen. Ich habe das Script 1:1 übernommen, als test.php abgespeichert und auf den Server geladen. Ich bekomme jedoch nur eine leer Seite (keine Fehlermeldung). Wäre toll wenn du mir da irgendwie weiterhelfen könntest.

Gruss, Erich
Sebastian
47
am 02.09.2009 um 19:35 Uhr.
Welchen RSS Feed ließt du denn aus?
Probiers mal hiermit: getRssfeed("http://www.web-spirit.de/web-spirit.php","web-spirit","auto",3,3);
Wenn es dann nicht funktioniert, einfach nochmal melden.
Erich
48
am 03.09.2009 um 09:49 Uhr.
Hallo Sebastian
Vielen Dank für die Antwort. Genau mit diesem Feed habe ich es probiert. Ich bekomme nur eine leere Seite zu sehen. Ich habe den Funktionsaufruf getRssfeed(\"http://www.web-spirit.de/web-spirit.php\",\"web-spirit\",\"auto\",3,3); gleich unterhalb der Funktion eingebaut – ist doch korrekt... oder?
Sebastian
49
am 03.09.2009 um 10:34 Uhr.
Das Script funktioniert einwandfrei. Der Fehler muss bei deinem Server oder deiner Datei liegen.
Füge deiner Datei mal folgende Zeile im PHP Code hinzu:

error_reporting(E_ALL);

Eventuell spuckt deine Datei dann eine Fehlermeldung aus. Du kannst mir deine Datei auch gerne mal per E-Mail schicken, vielleicht steckt der Fehler im Detail.
Daniel
50
am 03.09.2009 um 12:29 Uhr.
Hallo,
erstmal vielen Dank für deine Arbeit, das spart auch mir ne Menge Arbeit - feine Sache, das Script! :)
ich binde auf http://loseschatz.de die News aus meiner anderen Seite http://linknews.de ein, nur die Überschriften. Allerdings sind in diesen Überschriften manchmal Anführungszeichen " enthalten, und die werden in der Feed-Anzeige zur Zeit nicht korrekt umgewandelt..
kann ich da noch etwas ändern, um das zu erreichen?
Schöne Tage euch allen :)
Daniel
Sebastian
51
am 03.09.2009 um 12:37 Uhr.
Einfach den Parameter $encode ändern. $encode = "no" sollte helfen.
Ansonsten mal die ersten Kommentare oben lesen. Da wurde auf das Thema bereits eingegangen.
Boris
52
am 04.09.2009 um 16:22 Uhr.
Hallo!

Der RSSFeeder ist Spitze! Vielen Dank dafür. Eine Frage hätte ich noch: wenn ich einen WordPress Feed auslesen möchte, werden da auch Daten zum Autor u.ä. übergeben. Könnte man diese irgendwie auch mitausgeben lassen?
Sebastian
53
am 04.09.2009 um 22:36 Uhr.
Ja, den Autor kannst du auch herausfiltern, dieser wird im Tag <dc:creator>AUTOR</dc:creator> angegeben. Du kannst das Script ja so anpassen, dass es diesen Tag parsed.
Meischi
54
am 21.09.2009 um 17:39 Uhr.
Hallo,

habe auch das problem mit den Umlauten:

Habe auch schon das ausprobiert was bei den ersten 4 Kommentaren steht... aber er ändert sich nichts...

funktionionsaufruf is jetzt:
getRssfeed("http://pro-unterach.blogspot.com/feeds/posts/default","","no",1,2);

kannst du mir da helfen??? weiß nicht warum es nicht gehen sollte!
DANKE

Jetzt ist mir noch aufgefallen, dass nicht der ganze Text des RSS-Feeds ausgegeben wird.
kann man die länge irgendwo einstellen... oder sollte eigentlich alles ausgelessen werden?
Sebastian
55
am 22.09.2009 um 11:19 Uhr.
Hallo Meischi,

da du in deinen Artikeln keine Umlaute verwendest, kann es eigentlich gar nicht zu Problemen mit Umlauten kommen. Testweise habe ich mal deinen Kommentar-Feed mit dem Script ausgelesen. Mit Umlauten gibt es da keine Probleme.
Wenn du dir deinen RSS-Feed mal anschaust, wirst du feststellen, dass in diesem der Text bereits gekürzt ist. Das ist eine Einstellung deines Blog-Hosters, nicht eine des Scripts.

Gruß
Sebastian
Meischi
56
am 22.09.2009 um 11:28 Uhr.
Hallo,

es gibt nun keine Umaute mehr da der Beitrag umgeschrieben wurde...
werden jedoch Umlaute übergeben so werden diese nicht richtig angezeigt.

was mich gewundert hat, dass auf manchen seiten mit UTF-8 die Umlaute richtig dargestellt werden und bei anderen auf einmal nicht mehr... woran kann das liegen?

kann ich mit deinem script irgendwie die länge des feeds bestimmten?
hab die vorgabe ca. 5 zeilen auszugeben und dann mit "..." abzuschließen.

lg meischi
Sebastian
57
am 22.09.2009 um 11:42 Uhr.
Du kannst substr() verwenden, wenn du einen String auf eine bestimmte Zeichenlänge kürzen möchtest. In Verwendung mit preg_replace() kannst du einen String kürzen aber ganze Wörter erhalten:
preg_replace("/[^ ]*$/", "", substr($TEXT, 0, 300));

Im Script einfach die Ausgabe von $description[1] anpassen. Anstatt der 300 natürlich dann deinen individuellen Wert verwenden.

Bezüglich deines Umlaute-Problems, gib doch einfach mal einen Link zur Seite, auf der man sieht, dass es nicht funktioniert.
Meischi
58
am 22.09.2009 um 11:56 Uhr.
Wo bei ich das nun ein?

preg_replace(\\\"/[^ ]*$/\\\", \\\"\\\", substr($TEXT, 0, 300));

statt $TEXT kommt dann $description[1] ?

ganz zum schluss wird ja
echo $description[1]; ausgeführt, soll ich hier das ändern oder?

kann dir leider keinen link zeigen wo es nicht geht.
hab jetzt auf dieser Homepage http://www.pro-unterach.at alle umlaute mittels \"ä\" usw. geändert damit sie richtig angezeigt werden!

beim RssFeed sind nun alle Umlaute auf \"oe\", oder \"ue\" umgeändert worden um es lesbar zu machen.
Sollte aber doch bald mit \"ö\" und so funktionieren!

komischerweise gehts aber auf anderen seiten wo utf-8 ist einwandfrei ... da ist im Quellcode im Text ein \"ö\" und es wird auch ein \"ö\" angezeigt....

lg
meischi
Sebastian
59
am 22.09.2009 um 12:17 Uhr.
Genau so einbauen, wie du es beschrieben hast.

Ich habe mir mal den Head-Bereich von deiner Website angeschaut. Dort nutzt du aber gar nicht UTF-8, sondern ISO-8859-1. Daher wirst du mit deinem Funktionsaufruf wie oben nicht dein gewünschtes Ergebnis erreichen können.
Entweder änderst du die Encodierung im Script oder das Charset im Header.
getRssfeed("http://pro-unterach.blogspot.com/feeds/posts/default","","UTF-8",1,2);
Meischi
60
am 22.09.2009 um 13:40 Uhr.
So hab diesen Code:

if($mode == 2 || $mode == 3 && ($description[1]!="" && $description[1]!=" "))
{
$description[1] = preg_replace("[^ ]*$", "", substr($description[1], 0, 100));
echo "<p class=\"description\">\n";
if($encode != "no")
{echo htmlentities($description[1],ENT_QUOTES,$encoding)."\n";}
else
{echo $description[1];}
echo "...</p>\n";
}
if ($anzahl-- <= 1) break;
}
echo "</div>\n\n";
}


getRssfeed("http://pro-unterach.blogspot.com/feeds/posts/default","feed","UTF-8",1,2);
?>


aber es wird nun KEINE description angezeigt.
Was mach ich da falsch... steh da grad sehr auf der leitung!
lg
Sebastian
61
am 22.09.2009 um 13:59 Uhr.
Bei $description[1] = preg_replace("[^ ]*$", "", substr($description[1], 0, 100)); fehlen noch die Slashes. Richtig ist:
$description[1] = preg_replace("/[^ ]*$/", "", substr($description[1], 0, 100));
Meischi
62
am 22.09.2009 um 14:07 Uhr.
SUPER!!!!!

echt genial!!

jetz werd ich noch schaun, dass ich ein paar umlaute vom feed bekomme.. dann kann ich dir mein problem mit den umlauten noch zeigen!!!

schon mal jetzt!
BESTEN DANK!!!
echt super, wenn man so rasche antworten bekommt!!!!
Max
63
am 05.10.2009 um 17:37 Uhr.
Hi, ich habs mal in meinem Blog eingebaut .... saugeil. Funktioniert prima.
McPeters
64
am 07.10.2009 um 16:23 Uhr.
Hi,
die Beispieldatei hat prima funktioniert. Mit meinen Feeds funktioniert es leider nicht. Ich habe den Feed-Link jeweils herauskopiert und eingesetzt. In meinem Feed-Reader funktionieren diese einwandfrei, wenn ich sie in der Funktion einsetze leider nicht. Mir geht es vor allem um folgenden Feed:

feed://www.save.tv/stv/s/obj/rss/rsShow.cfm?sRSSid=85955E4402765EA794EE3AAC09E86531&sFeedtoken=HLserie

Wo liegt der Fehler?

Vielen Dank und viele Grüße
Sebastian
65
am 07.10.2009 um 16:55 Uhr.
Mit feed:// kommst du leider nicht weit, probiere es mal mit einem anderen Protokoll... http:// !
http://www.save.tv/stv/s/obj/rss/rsShow.cfm?sRSSid=85955E4402765EA794EE3AAC09E86531&sFeedtoken=HLserie
ulf
66
am 14.10.2009 um 18:55 Uhr.
super script. funktioniert wie die eins, aber leider nur bei mir lokal. kopiere ich die seite auf den webserver bekomme ich folgende fehlermeldung:

Warning: implode() [function.implode]: Bad arguments. in /usr/home/meineurl.com/web/newsletter/library/rss.php on line 26

Warning: Invalid argument supplied for foreach() in /usr/home/meineurl.com/web/newsletter/library/rss.php on line 88
Sebastian
67
am 14.10.2009 um 19:34 Uhr.
Hallo Ulf,

leider kann ich dir da aus der Ferne nicht weiterhelfen.
Welchen RSS-Feed ließt du denn aus?
Ist allow_url_fopen = 1 (in der php.ini)?
Peter
68
am 16.02.2010 um 12:51 Uhr.
Hallo,

ich würde gern zu jedem item Datum und - ganz wichtig - Uhrzeit ausgeben, bekomme das aber nicht hin.

Bei mir wird mit
$datum = date('d.m.Y h:i:s', strtotime((string) $data->pubDate));
nur immer das heutige Datum, Punkt 12 Uhr ausgegeben.

Wie bekomm ich das hin - und an welcher Stelle des Scripts muss ich das einbauen?

Danke für die Hilfe
Peter
Sebastian
69
am 17.02.2010 um 08:53 Uhr.
Das Auslesen mit obiger Funktion berücksichtigt nicht das Datum im RSS-Feed. Daher müsstest du selber erst noch das Datum auslesen und es in ein Array stecken.
Philipp
70
am 18.02.2010 um 14:07 Uhr.
Hi, danke erstmal super script! nur habe ich jetzt ein Problem. Ich will einen Twitter Feed auslesen und die Daten in eine Datenbank schreiben. Kein ding eigentlich aber in twitter wird immer der Username vorrangesetzt.

also z.B. "Philipp : blabla ich wiss nicht weiter"

wie kann ich dem script sagen, dass es die ersten 10 zeichen ignorieren soll, damit ich nicht immer den Username habe, den ich nicht brauche für die Datenbank!
Sebastian
71
am 19.02.2010 um 08:59 Uhr.
Wenn es immer derselbe Username ist, kannst du mit str_replace() deinen Username entfernen.
$string = str_replace("Philipp: ", "", $string);
Alexander
72
am 08.03.2010 um 13:58 Uhr.
Hallo,

vielen Dank auf jeden Fall für das Script, dass nach einigen Anpassungen (hier bereits benannte Probleme mit \"allow_url_fopen\" sowie Umlaute) sauber schnurrt.

Nun kämpfe ich mit \"pubDate\". In der Original-Datei wie auch im ausgelesenen String steht völlig korrekt z.B.:

\"Fri, 05 Mar 2010 13:33:30 +0100\"

Betrachtet man die Original-Datei mit einem \'normalen\' Feed-Reader, wird das Datum schön treudeutsch wie folgt angezeigt:

\"Freitag, 5. März 2010 13:33\"

So hätte ich es über das Script natürlich auch gern, aber es kommt nur der Original-String heraus - eben jenes \"Fri, 05 Mar 2010 13:33:30 +0100\".

Beim Durchstöbern des Netzes habe ich keine wirkliche Lösung für das Problem gefunden. Und ich kann mir nicht vorstellen, dass man den String dafür wirklich Stück für Stück auseinanderbauen und neu zusammensetzen muss. Ich befürchte also, dass das Thema so banal ist, dass dieser Beitrag hier vor Dummheit förmlich brüllt. Aber wenn man nicht weiss, wonach man suchen muss, bleibt einem nur das Risiko der Blamage. Hast Du / hat jemand einen Tip?

Vielen Dank und ebensolche Grüße

DAU Alexander
Sebastian
73
am 08.03.2010 um 17:40 Uhr.
strtotime() und date() sollten weiterhelfen.
Dirk
74
am 24.03.2010 um 14:22 Uhr.
Vielen Dank für das Script! Ist echt cool.

Allerdings funktioniert es nicht so richtig mit.
getRssfeed(\"http://search.twitter.com/search.atom?lang=de&q=berlin\",\"\",\"no\",10,0);

Ich würde gerne den 2. Eintrag verwenden ( also nicht als gesamter Link). Es sollen die einzelnen Links angezeigt werden. Kann mir da jemand helfen ? Wär echt klasse !!
Sebastian
75
am 24.03.2010 um 15:13 Uhr.
Hallo Dirk,

ist mit dem Script oben so ohne weiteres leider nicht möglich. Da müsstest du individuelle Änderungen vornehmen.
Falls du mit Wordpress arbeitest, findest sicher das ein andere eine geeignete Plugin, das dir weiterhelfen kann.
Ansonsten einfach mal nach »twitter rss auslesen« suchen.
Dirk
76
am 26.03.2010 um 09:27 Uhr.
Also ich konnte es jetzt ein wenig anpassen. :) Trotzdem Danke!
Nein, mach kein Wordpress und man findet bei »twitter rss auslesen« als erstes Deine Seite. Der Rest ist Schrott :)
Grüße
Bondscoach
77
am 30.03.2010 um 13:49 Uhr.
Hallo Sebastian,
nettes Script hast du da geschrieben.
Ich versuche seit einiger Zeit, die Ausgabe um einen weiteren Punkt zu erweitern.
Leider gerate ich dabei an meine Grenzen.
Und zwar gibt es in meinem Feed noch einen Knotennamens namens URL. Den möchte ich gerne anzeigen.
Dafür habe ich folgende Zeilen eingefügt:

if($atom == 0)
{
preg_match(\"/<url>(.*)<\\/url>/Uism\", $item, $url);
}


$url = preg_replace(\'/<!\\[CDATA\\[(.+)\\]\\]>/Uism\', \'$1\', $url);

sowie zur Ausgabe ein echo:

echo $url;

Der ausgegebene Text sieht aber leider nur so aus: \"Array\"

Kannst du mir vielleicht helfen?
Sebastian
78
am 31.03.2010 um 09:56 Uhr.
Deine Variable $url ist ganz einfach ein Array.
Mit print_r($url); kannst du dir die den Arrayaufbau anschauen und sehen, in welchem Feld deine Informationen stehen, die du ausgeben möchtest.

Gruß
Sebastian
Bondscoach
79
am 31.03.2010 um 11:17 Uhr.
Danke!
Eigentlich hätte ich das auch von deinem Script ableiten können, später ist man immer schlauer ...
ferdinand
80
am 09.04.2010 um 14:14 Uhr.
hii,

hat jemand zufällig ein modifiziertes script was auch das datum und die uhrzeit des feeds ausgibt bzw. die umrechnung in Tagen und stunden?? tanx ferdinand_
Tom
81
am 21.04.2010 um 17:41 Uhr.
Hallo Sebastian,
ich finde das Script klasse. Es ist super einfach anzuwenden.
Ich möchte gern einen Feed als Übersicht darstellen. Das kann z.B. nur die Headline oder die Headline und der angeteaserte Text sein. Dann soll ein Link folgen mit \"mehr\". Jetzt möchte ich aber nicht auf den unter LINK im RSS stehenden Link verweisen, sondern diesen einen Beitrag aus dem Feed extrahiert darstellen.
Hast du eine Idee, ob und wie ich das möglichst ohne db erreichen kann.

Kannst du mir weiterhelfen?

Gruß
Tom
Peter
82
am 29.04.2010 um 09:50 Uhr.
Hallo,

Danke für die Antwort bezüglich Datum / Uhrzeit (Post 68/69).

Kannst Du mir denn nochmal mit dem entsprechenden Codeschnipsel helfen, wie ich das Datum und die Uhrzeit in ein Array bekomme?

Danke schonmal,

Grüße
Peter
Sebastian
83
am 02.05.2010 um 10:21 Uhr.
preg_match("/<pubDate>(.+)<\/pubDate>/Uism", $item, $pubDate);
$pubDate = preg_replace('/<!\[CDATA\[(.+)\]\]>/Uism', '$1', $pubDate);

in $pubDate[1] hast du dann dein Datum.
Peter
84
am 02.05.2010 um 11:27 Uhr.
Hallo,

herzlichen Dank! Habe es eingeabeitet und es klappt!
Jan
85
am 21.05.2010 um 13:44 Uhr.
Hmm vllt kann mir ja jemand helfen.

was bedeutet im Kontext:
definierten Gruppe? und für was steht dieses (.+).

Danke
Sebastian
86
am 23.05.2010 um 20:40 Uhr.
Das ist ein Bestandteil von Regulären Ausdrücken.
Wikipedia hilft dir weiter: http://de.wikipedia.org/wiki/Regul%C3%A4rer_Ausdruck
Michael
87
am 11.08.2010 um 20:36 Uhr.
hallo,
gibt es die caching script variante schon fertig?

grüße
michael

Einen eigenen Kommentar schreiben






captcha