RSS-Feed auslesen: channel und content:encoded ?
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
array
ausgabe
auslese
code
datum
direkt code
direkter zugriff
dom
doppelpunkt
element
generator
http
info
inhalt
item
klasse url
manual
problem
string
url
-
Hallo
ich will einen RSS-Feed (RSS2) auslesen, aber bekomme nicht alle Daten zur Ausgabe
Daten aus Feed-RSS in PHP-Object holen:
$objres = simplexml_load_file($feedurl, 'SimpleXMLElement', LIBXML_NOCDATA);
foreach() für die Channel-Info ... das geht komischer Weise nicht:
channel ist kein Array, sondern direkt Objekte
foreach($objres->channel as $fkey => $info) { echo "<br />".$fkey." --- ".$info."\n"; }
Ausgabe: channel ---
... häöää? ... ich bin doch schon innerhalb des Elements $objres->channel
was will dann der key channel da ... ich erwarte eigentlich Daten eine Ebene tiefer ?!
aber mit "direkter" Zugriff geht es dann doch ?!?!?
echo "<br />title --- ".(string)$objres->channel->title."\n"; echo "<br />link --- ".(string)$objres->channel->link."\n"; echo "<br />description --- ".(string)$objres->channel->description."\n"; echo "<br />lastBuildDate --- ".(string)$objres->channel->lastBuildDate."\n"; echo "<br />language --- ".(string)$objres->channel->language."\n"; echo "<br />generator --- ".(string)$objres->channel->generator."\n";
verstehe ich nicht .... warum es bei channel nicht auch mit foreach geht ... ?
item ist ein Array, dessen Array-Elemente wiederum die Objekte enthalten
und bei den items geht es dann zwar mit foreach,
foreach($objres->channel->item as $items) { foreach($items as $ikey => $ival) { echo "<br />".$ikey." --- ".$ival."\n"; } echo "<br />\n"; }
damit bekomme ich zu jedem <item> die Elemente (mit Key) ausgegeben
aber da ist ein Element in der RSS, welches garnicht im $objres ankommt .... ???
<item> <title>Name des beitrags</title> ... <pubDate>... etc. <content:encoded><![CDATA[<p>Inhalt mit <strong>HTML</strong> Code wie IMG-Tags, etc. </p> <p> </p> ]]></content:encoded> </item>
aber das Elemet "content:encoded" taucht in den $objres Daten dann garnicht auf
aus getestet durch eine Ausgabe mit print_r() ... es ist einfach nicht vorhanden ?!
a) wieso geht channel-Daten nicht mit foreach ?
b) warum wird Elemet "content:encoded" einfach ignoriert ?
gibt es eine "Bessere" Möglichkeit um RSS2 Daten auszulesen, als mit simplexml
Beitrag zuletzt geändert: 1.7.2012 11:50:29 von rssping -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
zu a)
Versuch mal:
foreach($objres->channel[0] as $fkey => $info) { echo "<br />".$fkey." --- ".$info."\n"; }
zu b)
Ich denke PHP wird da ein Problem mit dem Doppelpunkt haben.
Gibt bestimmt eine Lösung dazu, jedoch bin ich jetzt zu müde danach zu suchen.
gn8 -
philippkern schrieb:
Du könntest dir mal den etwas aufwendigeren DOM ansehen, der kann das. Dabei würdest du dann die Klasse DOMDocument verwenden...
zu b)
Ich denke PHP wird da ein Problem mit dem Doppelpunkt haben. -
.... Namespace !!!!
$ns = $objres->getNamespaces(true); foreach($objres->channel->item as $items) { echo "<u>".$items->title."</u>\n"; echo "<br />\n"; echo "<br />".$items->children($ns['content'])->encoded."\n"; echo "<br />\n"; }
oder, wenn die Namespace-Definition nicht in der RSS steht, dann direkt
foreach($xmldata->channel->item as $items) { echo "<u>".$items->title."</u>\n"; echo "<br />\n"; $content = $items->children('http://purl.org/rss/1.0/modules/content/'); echo "<br /> ".$content->encoded."\n"; echo "<br />\n"; }
so kommt man an <content:encoded> Inhalt :)
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage