Wo ist das Bild im RSS?
Maus
- sonstiges
Guten Morgen,
so ich habe mich auch mal das an Thema RSS rangewagt und wollte mal ein wenig was ausprobieren. Dazu habe ich diesen RSS Feed
http://focus.msn.de/fol/XML/rss_folnews.xml genommen.
Hab den nun ausgeben lassen. Das mache ich so:
<?php
require_once 'rss_parser/rss_fetch.inc';
$url = 'http://focus.msn.de/fol/XML/rss_folnews.xml';
$rss = fetch_rss($url);
$ctitel = $rss->channel['title'];
$cdesc = $rss->channel['description'];
echo "<table>";
foreach ($rss->items as $item ) {
$title = $item['title'];
$image = $item['image'];
$url = $item['link'];
$description = $item['description'];
$datum = $item[dc][date];
echo "<tr><td><a href=\"${url}\">${title}</a></td></tr>
<tr><td>$description</td></tr>";
}
echo "</table>";
?>
So nun aber ein kleines Problem ich bekomme die Bilder nicht mit. Kann mir jemand sagen warum das NICHT geht? Denn hier auf der Seite
http://timeshot.de/news.php werden die Bilder auch mit ausgegeben und die verwenden den gleichen RSS Feed.
Hoffe mal, dass mir dabei jemand helfen kann.
Mit freundlichen Grüßen,
Maus
Pfffft pffftt,
Denn auf der Seite werden die Bilder auch mit ausgegeben
pffffft, pffffffft
Hallo,
kann das sein, dass du nicht ganz klar bist?
Gruß,
Maus
Pfffft pffftt,
auch ausgegeben
pffffft, pffffffft
Hallo,
sowas dummes habe ich noch nie erlebt. Du bist bestimmt so ein kleines Kind, das nichts zum spielen hat, oder so ein Admin, dem es gerade langweilig ist.
Gruß,
Maus
Moin!
sowas dummes habe ich noch nie erlebt. Du bist bestimmt so ein kleines Kind, das nichts zum spielen hat, oder so ein Admin, dem es gerade langweilig ist.
Beides falsch. Das aber nur am Rande.
Der Hinweis des kleinen blauen Elefanten ist berechtigt: Hast du die Bildeinbindung auch ausgegeben? Was steht im Quelltext der erzeugten HTML-Datei? Von alleine geht bei RSS nämlich nichts.
- Sven Rautenberg
Huhu Maus,
Denn hier auf der Seite
http://timeshot.de/news.php werden die Bilder auch mit ausgegeben und die verwenden den gleichen RSS Feed.
Mmmmh, da Du den Sourcecode kennst und sagst das unter timeshot.de der gleiche RSS feed läuft kennst Du vielleicht auch denjenigen der da gerade an der Seite bzw. den Skripten bastelt.
Denn folgende Meldung war bis vor kurzem noch nicht da:
Warning: Cannot modify header information - headers already sent by (output started at /var/www/localhost/htdocs/rss/rss_all.php:107) in /var/www/localhost/htdocs/includes/overall_left.php on line 9
Viele Grüße
lulu
Hallo,
Hast Du Dir auch mal den tatsächlichen Inhalt dieses Feeds angeschaut?
$image = $item['image'];
Es gibt kein Kindelement von <item> namens <image>. Tatsächlich ist dies in der RSS 2.0 Spezifikation überhaupt nicht vorgesehen; es sei denn mit einer Erweiterung.
So nun aber ein kleines Problem ich bekomme die Bilder nicht mit. Kann mir jemand sagen warum das NICHT geht? Denn hier auf der Seite http://timeshot.de/news.php werden die Bilder auch mit ausgegeben und die verwenden den gleichen RSS Feed.
Guck Dir noch mal den Quellcode des RSS-Feeds an, hier mal rauskopiert ein Beispiel eines Eintrages da drin:
<item>
<title>VW-Affäre - Der tiefe Fall des Peter H.</title>
<link>http://focus.msn.de/hps/fol/redirect/redirect.htm?r_u=http%3A%2F%2Ffocus.msn.de%2Ffinanzen%2Fgeldanlage%2FVW-Affaere_nid_28590.html&r_si=3118&r_re=4002&r_ru=1&r_st=100&r_pa=263667&r_ti=Der+tiefe+Fall+des+Peter+H.</link>
<description>Ex-Personalvorstand Hartz drohen ein peinlicher Prozess und
womöglich gar eine Gefängnisstrafe.</description>
<content:encoded><![CDATA[<table align="LEFT" valign="top"
width="90"><tr><td><IMG WIDTH="75" HEIGHT="75" ALT="VW-Affäre FOCUS"
SRC="http://focus.msn.de/fol/XML/images/75x75_20060506_103629_HBpsPYrz.jpg"></IMG></td></tr></table>
Ex-Personalvorstand Hartz drohen ein peinlicher Prozess und womöglich
gar eine Gefängnisstrafe.]]></content:encoded>
<pubDate>Sat, 06 May 2006 10:55:00 GMT</pubDate>
<category>Finanzen Geldanlage</category>
</item>
Wenn Du genau hinsiehst befindet sich dort dieselbe Information – die Beschreibung des Elementes – zweimal da drin, einmal in dem zu RSS 2.0 gehörenden description-Element, zum anderen in dem Element content:encoded, einem RSS 1.0 Modul, das auch gerne in RSS 2.0 eingesetzt wird. Letzteres hat „reichhaltigeren“ Inhalt, genauer das von Dir gesuchte Bild als HTML-Quellcode in einer vollkommen unnötigen Tabelle.
Warum macht man so etwas? Das bezeichnet eines der Probleme mit RSS.
Ursprünglich ist als Inhalt von <description> nur ein rein textuelle Beschreibung vorgesehen gewesen. Reiner Text. Kein (X)HTML. Aber die Leute wollten auch den reichhaltigere (X)HTML Inhalt ihrer Webseite mit RSS übermitteln, weil sie fanden, dass das wichtig sei, dass ihre fettgedruckten Wörter auch fett dargestellt werden. Man kann aber nicht einfach Elemente aus anderen XML- oder SGML-Syntaxen (hier HTML) so in ein anderen XML (hier RSS) reinkopieren, das würde das letztere ungültig machen, ein Parser könnte davon und Schluckauf kriegen, weil er das für ihn fremde Zeugs einfach nicht kennt. Also muss man es maskieren. Da gibt es zwei Varianten, zum einen alle XML-kritischen Zeichen in seinem Text durch Entities ersetzen, "<b>" wird dann also zu "<b>" oder für sehr gründliche zu "<b>". Oder man schließt es in CDATA-Abschnitte ein, Markup das darin vorkommt, wird vom XML-Parser nicht interpretiert.
Jetzt versetze Dich mal in die Lage eines RSS Parser. Du kommst an einem description-Element vorbei. Für die Ausgabe wüsstest Du gerne ob Du nur Text oder HTML-Inhalt hättest. Du weisst es nicht. Du bist ja nur ein dummes Programm, dass ein paar Bytes bekommt. Und diese paar Bytes sind dann entweder nur reiner Textinhalt oder aber eben HTML. Hat man als Ausgabemöglichkeit eine HTML-Seite ist das nicht so schlimm; in einem Desktop-RSS-Reader will man aber nicht komische HTML-Tags lesen, nur weil dort nur Test angezeigt wird. Und man hat keine Möglichkeit es zu wissen. Doof das.
Als RSS 2.0 noch relativ neu und hip war, borgte man sich dann gerne das Element content:encoded aus dem nicht mit RSS 2.0 kompatiblen Dialekt RSS 1.0 aus, aus einem RSS 1.0 Modul; schließlich war die Neuerung von RSS 2.0 ja, dass man beliebige eigene Elemente aus anderen XML Namensräumen einfügen durfte. content:encoded sagt über seinen Inhalt verpflichtend: Der ist immer maskiert. Als dummer RSS Parser weiss man also immer: hier ist maskiertes HTML.
Damals hat sich dann diese Praxis der Duplikation für Feed-Anbieter heraus gebildet:
• Das description-Element enthält nur den reinen Textinhalt eines Eintrages
• content:encoded enthält den reichhaltigeren HTML-Inhalt eines Eintrages
... und RSS-Parser können sich dann den passenden Inhalt herausfischen. Bei dieser Praxis ist dann auch der Anbieter dieses Feeds stehen geblieben.
Ich sage „stehen geblieben“ deswegen, weil es inzwischen eine Revision der RSS 2.0 Spezifikation gab, die sagt, dass das description-Element auch explizit maskiertes HTML enthalten darf. Als RSS Parser weiss man also nicht genau, was der Inhalt des Elementes nun ist. Und auch Raten ist da eher ungünstig.
Aber ich schweife ab.
Du hast schon gemerkt: Dein Bild befindet sich als maskierter HTML-Quellcode im Element content:encoded und der andere Feed, den Du als Vergleich genommen hast, grapscht nun einfach das HTML daraus und bindet das so in seine Seite ein. Das könntest Du natürlich auch machen, in dem von Dir verwendeten Magpie RSS Parser sähe das dann so aus:
$content = $item[content][encoded];
(Hier Grummeln über offenkundiges Missverständnis von XML Namensräumen auf Magpies Seiten einfügen)
Wenn Dir der HTML Quellcode aber in der Ausgabe nicht passt – mir würde das nicht – dann bleibt Dir wohl nichts anderes übrig als bei diesem speziellen Feeds die HTML-Quellcodeschnipsel nach der URI des Bildes zu parsen. Stressig.
$datum = $item[dc][date];
Übrigens: Der von Dir oben angebene Feed enthält seine Zeitpunktsangaben nicht im Element dc:date aus dem RSS 1.0 Modul Dublin Core sondern in dem in RSS 2.0 eingebautem Element <pubDate>, also wäre ein $item[pubDate] erfolgreicher.
Tim