Problem mit PHP Script zum Anzeigen von RSS Nachrichten
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
anfangen
anzeigen
atom
check
code
datei
element
erledigen
file
format
frage
frankfurt
http
inhalt
item
liegen
quelle
tag
tarif
url
-
Hi !
Ich habe ein Problem.
Wenn ich in eine PHP tag/datei">Datei das hier kopiere:
<?php
$inhalt="http://www.rmv.de/coremedia/rss/Frankfurt.xml";
$website="http://www.rmv.de";
if (@fopen("$inhalt", "r") != "")
{
$quelle = @file($inhalt);
$data = implode ("", $quelle);
preg_match_all("|<item>(.*)</item>|Uism",$data, $items, PREG_PATTERN_ORDER);
if (count($items[1])==0) {
preg_match_all("|<item .*>(.*)</item>|Uism",$data, $items, PREG_PATTERN_ORDER);
}
for ($i=0; $i<count($items[1]); $i++) {
preg_match_all("|<title>(.*)</title>(.*)<link>(.*)</link>|Uism",$items[1][$i], $regs, PREG_PATTERN_ORDER);
preg_match_all("|<pubDate>(.*)</pubDate>|Uism",$items[1][$i], $regs2, PREG_PATTERN_ORDER);
$title = $regs[1][0];
$pubdate = $regs2[1][0];
echo '<br><font color="white"><span style="font-family:Arial;font-size:11px"><b>'.$pubdate.' <a href="'.$regs[3][0].'" target="_blank" style="text-decoration: none">'.$title.'</a></b></span></font>';
}
}
?>
wird nichts angezeigt.
Aber mit diesem hier:
<?php
$inhalt="http://www.telespiegel.de/rss-xml/telespiegel-tarife.xml";
$website="http://www.telespiegel.de";
if (@fopen("$inhalt", "r") != "")
{
$quelle = @file($inhalt);
$data = implode ("", $quelle);
preg_match_all("|<item>(.*)</item>|Uism",$data, $items, PREG_PATTERN_ORDER);
if (count($items[1])==0) {
preg_match_all("|<item .*>(.*)</item>|Uism",$data, $items, PREG_PATTERN_ORDER);
}
for ($i=0; $i<count($items[1]); $i++) {
preg_match_all("|<title>(.*)</title>(.*)<link>(.*)</link>|Uism",$items[1][$i], $regs, PREG_PATTERN_ORDER);
preg_match_all("|<pubDate>(.*)</pubDate>|Uism",$items[1][$i], $regs2, PREG_PATTERN_ORDER);
$title = $regs[1][0];
$pubdate = $regs2[1][0];
echo '<br><font color="white"><span style="font-family:Arial;font-size:12px"><b>'.$pubdate.' <a href="'.$regs[3][0].'" target="_blank" style="text-decoration: none">'.$title.'</a></b></span></font>';
}
}
?>
wird alles angezeigt.
Kann mir einer sagen, woran es liegen könnte. -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Der erste Feed ist ein ATOM-Feed, der ein bisschen anders aufgebaut ist, als sonstige RSS-Feeds. Vermutlich kann das Script damit einfach nichts anfangen und findet das <item>-Element nicht (da das im ATOM-Format nicht so heißt).
http://de.wikipedia.org/wiki/ATOM
Der zweite Feed ist ein "normaler" RSS-Feed (der allerdings nicht ganz valide ist) und deswegen kann dein Script ihn auch anzeigen.
http://de.wikipedia.org/wiki/RSS
Beides sind erlaube und gängige Feed-Formate, aber um ATOM anzeigen zu können, musst du den Script ein bisschen ändern. -
Der erste Feed ist ein ATOM-Feed, der ein bisschen anders aufgebaut ist, als sonstige RSS-Feeds. Vermutlich kann das Script damit einfach nichts anfangen und findet das <item>-Element nicht (da das im ATOM-Format nicht so heißt).
http://de.wikipedia.org/wiki/ATOM
Der zweite Feed ist ein "normaler" RSS-Feed (der allerdings nicht ganz valide ist) und deswegen kann dein Script ihn auch anzeigen.
http://de.wikipedia.org/wiki/RSS
Beides sind erlaube und gängige Feed-Formate, aber um ATOM anzeigen zu können, musst du den Script ein bisschen ändern.
Wie muss ich es ändern? -
Du musst statt nach <item> nach <entry> suchen:
preg_match_all("|<entry>(.*)</entry>|Uism",$data, $items, PREG_PATTERN_ORDER); if (count($items[1])==0) { preg_match_all("|<entry .*>(.*)</entry>|Uism",$data, $items, PREG_PATTERN_ORDER); }
Wenn du PHP5 hast, kannst du das ganze allerdings mit SimpleXML erledigen.
Bei Fragen zu SimpleXML einfach fragen :) .
Marius -
Du musst statt nach <item> nach <entry> suchen:
preg_match_all("|<entry>(.*)</entry>|Uism",$data, $items, PREG_PATTERN_ORDER); if (count($items[1])==0) { preg_match_all("|<entry .*>(.*)</entry>|Uism",$data, $items, PREG_PATTERN_ORDER); }
Wenn du PHP5 hast, kannst du das ganze allerdings mit SimpleXML erledigen.
Bei Fragen zu SimpleXML einfach fragen :) .
Marius
Ich habe das Script jetzt so eingetragen:
<?php
$inhalt="http://www.rmv.de/coremedia/rss/Gesamt_RMV.xml";
$website="http://www.rmv.de";
if (@fopen("$inhalt", "r") != "")
{
$quelle = @file($inhalt);
$data = implode ("", $quelle);
preg_match_all("|<entry>(.*)</entry>|Uism",$data, $items, PREG_PATTERN_ORDER);
if (count($items[1])==0) {
preg_match_all("|<entry .*>(.*)</entry>|Uism",$data, $items, PREG_PATTERN_ORDER);
}
for ($i=0; $i<count($items[1]); $i++) {
preg_match_all("|<title>(.*)</title>(.*)<link>(.*)</link>|Uism",$items[1][$i], $regs, PREG_PATTERN_ORDER); preg_match_all("|<pubDate>(.*)</pubDate>|Uism",$items[1][$i], $regs2, PREG_PATTERN_ORDER);
$title = $regs[1][0];
$pubdate = $regs2[1][0];
echo '<br><font color="white"><span style="font-family:Arial;font-size:11px"><b>'.$pubdate.' <a href="'.$regs[3][0].'" target="_blank" style="text-decoration: none">'.$title.'</a></b></span></font>';
}
}
?>
Aber ich bekomme nichts angezeigt. -
Hallo davy,
beim ATOM Feed sind auch noch andere elemente anders.
item -> entry
<link>(.*)</link> -> <link href="(.*)" />
pubDate -> updated
So funktioniert es bei mir:
<?php $inhalt="http://www.rmv.de/coremedia/rss/Frankfurt.xml"; $website="http://www.rmv.de"; if (@fopen("$inhalt", "r") != "") { $quelle = @file($inhalt); $data = implode ("", $quelle); preg_match_all("|<entry>(.*)</entry>|Uism",$data, $items, PREG_PATTERN_ORDER); if (count($items[1])==0) { preg_match_all("|<entry .*>(.*)</entry>|Uism",$data, $items, PREG_PATTERN_ORDER); } for ($i=0; $i<count($items[1]); $i++) { preg_match_all("|<title>(.*)</title>(.*)<link href=\"(.*)\" />|Uism",$items[1][$i], $regs, PREG_PATTERN_ORDER); preg_match_all("|<updated>(.*)</updated>|Uism",$items[1][$i], $regs2, PREG_PATTERN_ORDER); $title = $regs[1][0]; $pubdate = $regs2[1][0]; echo '<br><font color="white"><span style="font-family:Arial;font-size:12px"><b>'.$pubdate.' <a href="'.$regs[3][0].'" target="_blank" style="text-decoration: none">'.$title.'</a></b></span></font>'; } } ?>
-
Hallo!
So muss es sein
<?php $inhalt="http://www.rmv.de/coremedia/rss/Gesamt_RMV.xml"; $website="http://www.rmv.de"; if (@fopen("$inhalt", "r") != "") { $quelle = @file($inhalt); $data = implode ("", $quelle); preg_match_all("|<entry.*>(.*)</entry>|Uism",$data, $items, PREG_PATTERN_ORDER); for ($i=0; $i<count($items[1]); $i++) { preg_match_all("|<title>(.*)</title>(.*)<link href=\"(.*)\".*>|Uism",$items[1][$i], $regs, PREG_PATTERN_ORDER); preg_match_all("|<updated>(.*)</updated>|Uism",$items[1][$i], $regs2, PREG_PATTERN_ORDER); $title = $regs[1][0]; $pubdate = $regs2[1][0]; echo '<br><font color="white"><span style="font-family:Arial;font-size:11px"><b>'.$pubdate.' <a href="'.$regs[3][0].'" target="_blank" style="text-decoration: none">'.$title.'</a></b></span></font>'; } } ?>
1. Ich habe direkt <entry.*> gemacht, da auch zutreffend, wenn sonst nix dasteht.
2. <pubData> ist in Atom updated
3. Das Tag <link> hat in Atom ein href Attribut, dort steht der Link drin.
Marius
Edit: Und so bei mir :) -
Hallo davy,
beim ATOM Feed sind auch noch andere elemente anders.
item -> entry
<link>(.*)</link> -> <link href="(.*)" />
pubDate -> updated
So funktioniert es bei mir:
<?php $inhalt="http://www.rmv.de/coremedia/rss/Frankfurt.xml"; $website="http://www.rmv.de"; if (@fopen("$inhalt", "r") != "") { $quelle = @file($inhalt); $data = implode ("", $quelle); preg_match_all("|<entry>(.*)</entry>|Uism",$data, $items, PREG_PATTERN_ORDER); if (count($items[1])==0) { preg_match_all("|<entry .*>(.*)</entry>|Uism",$data, $items, PREG_PATTERN_ORDER); } for ($i=0; $i<count($items[1]); $i++) { preg_match_all("|<title>(.*)</title>(.*)<link href=\"(.*)\" />|Uism",$items[1][$i], $regs, PREG_PATTERN_ORDER); preg_match_all("|<updated>(.*)</updated>|Uism",$items[1][$i], $regs2, PREG_PATTERN_ORDER); $title = $regs[1][0]; $pubdate = $regs2[1][0]; echo '<br><font color="white"><span style="font-family:Arial;font-size:12px"><b>'.$pubdate.' <a href="'.$regs[3][0].'" target="_blank" style="text-decoration: none">'.$title.'</a></b></span></font>'; } } ?>
Danke, es geht !
Beitrag geändert: 21.12.2008 13:32:08 von davy -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage