Ich versuche, einen RSS-Reader basiert auf dieses Beispiel zu erstellen:Problem Parsing nur img src aus RSS-Feed?
http://www.w3schools.com/php/php_ajax_rss_reader.asp
Insbesondere ich versucht bin, diesem Beispiel zu ändern, so dass der Leser zugreifen und alle verfügbaren Comic-Bilder angezeigt werden (und sonst nichts) aus einem beliebigen Webcomic-RSS-Feed. Mir ist klar, dass es notwendig sein kann, den Code zumindest ein wenig ortsspezifisch zu machen, aber ich versuche, ihn so allgemein wie möglich zu machen. Derzeit habe ich das erste Beispiel so geändert, dass ein Reader erstellt wurde, der alle Comics einer bestimmten Liste von RSS-Feeds anzeigt. Es werden jedoch auch andere unerwünschte Textinformationen angezeigt, die ich loswerden möchte. Hier ist mein Code so weit, mit einem paar Feeds, die mir Schwierigkeiten insbesondere geben:
Datei index.php:
<html>
<head>
<script>
function showRSS()
{
if (window.XMLHttpRequest)
{
// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
} else
{ // code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange=function()
{
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
document.getElementById("rssOutput").innerHTML=xmlhttp.responseText;
}
}
xmlhttp.open("GET","logger.php",true);
xmlhttp.send();
}
</script>
</head>
<body onload="showRSS()">
<div id="rssOutput"></div>
</body>
</html>
(ziemlich sicher, dass es nichts falsch mit dieser Datei, ich denke, die Probleme entstehen, in den nächsten einem obwohl enthalten ich diese auf Vollständigkeit)
logger.php:
<?php
//function to get all comics from an rss feed
function getComics($xml)
{
$xmlDoc = new DOMDocument();
$xmlDoc->load($xml);
$x=$xmlDoc->getElementsByTagName('item');
foreach ($x as $x)
{
$comic_image=$x->getElementsByTagName('description')->item(0)->childNodes->item(0)->nodeValue;
//output the comic
echo ($comic_image . "</p>");
echo ("<br>");
}
}
//create array of all RSS feed URLs
$URLs =
[
"SMBC" => "http://www.smbc-comics.com/rss.php",
"garfieldMinusGarfield" => "http://garfieldminusgarfield.net/rss",
"babyBlues" => "http://www.comicsyndicate.org/Feed/Baby%20Blues",
];
//Loop through all RSS feeds
foreach ($URLs as $xml)
{
getComics($xml);
}
?>
Da dieses Verfahren beinhaltet zusätzlichen Text zwischen den komischen Bildern (al ein paar zufällige Sachen mit SMBC, nur ein paar Werbe-Links für gMg, und eine Urheberrechtsverknüpfung für Baby-Blues), sah ich mir die RSS-Feeds an und kam zu dem Schluss, dass es das Beschreibungs-Tag ist, das die Bildquelle enthält, aber auch beinhaltet andere Sachen. Als Nächstes habe ich versucht, die Funktion getComics zu modifizieren, um direkt nach dem Bild-Tag zu suchen, anstatt zuerst nach dem Beschreibungs-Tag zu suchen. Ich ersetzen den Teil zwischen der DOMDocument Erstellung/Laden und der URL-Liste mit:
$images=$xmlDoc->getElementsByTagName('img');
print_r($images);
foreach ($images as $image)
{
//echo $image->item(0)->getAttribute('src');
echo $image->item(0)->nodeValue;
echo ("<br>");
}
aber anscheinend getElementsByTagName nicht den Bild-Tag in der Beschreibung Tag eingebettet holen, weil ich keine Comic-Bilder ausgegeben bekommen, und die folgende Ausgabe von der print_r Anweisung:
DOMNodeList Object ([length] => 0) DOMNodeList Object ([length] => 0)
Schließlich habe ich versucht, eine Kombination der beiden Methoden versucht getElementsByTagNam (‚img‘) in den Code zu verwenden, die die Beschreibung Tag Inhalt analysiert werden. Ich ersetzen die Zeile:
$comic_image=$x->getElementsByTagName('description')->item(0)->childNodes->item(0)->nodeValue;
mit:
$comic_image=$x->getElementsByTagName('description')->item(0)->getElementsByTagName('img');
print_r($comic_image);
Aber das findet auch nichts, das Ausgangssignal zu erzeugen:
DOMNodeList Object ([length] => 0)
So sorry für den wirklich langen Hintergrund, aber ich bin frage mich, ob es eine Möglichkeit gibt, nur die img src aus einem bestimmten RSS-Feed ohne den anderen Text und Links, die ich nicht wollen, analysieren?
Hilfe würde viel
Danke, ich glaube, ich in der Regel bekommen, was Sie sagen, und ich versuchte, Ihren spezifischen Code aus. Es funktioniert für einige der Feeds, aber erzeugt einen seltsamen Fehler für andere von ihnen. Für SMBC beispielsweise druckt es 5 gültige Bild-URLs aus, gibt dann aber wiederholt den folgenden Fehler: Warnung: DOMDocument :: loadHTML(): htmlParseEntityRef: erwartet ';' in Entity, Zeile: 30 in C: \ xampp \ htdocs \ comic_database_logger \ logger.php in Zeile 30, worüber ich sehr verwirrt bin. Ich verstehe nicht, warum es ein Semikolon in einigen der Beschreibung Text – user2472083
für Baby Blues erwartet, es funktioniert vollständig (obwohl es die URL des Bildes statt das Bild selbst ausgibt, was ich später lösen kann) ,, und für Garfield minus Garfield gibt es nur den oben aufgeführten Fehler. Sehr verwirrt – user2472083
Eigentlich habe ich versucht, nur ein @ vor der Zeile ein Problem verursacht, weil sie nur Warnungen waren, und jetzt funktioniert alles perfekt, außer dass ich herausfinden muss, wie das Bild anstelle der Bildquelle Link angezeigt wird – user2472083