Forum

Problème de lecture de certains flux

02-06-2010 06:40:17

calame

Bonjour, Bravo et merci pour ce lecteur RSS. J'ai installé hier le script et je me heurte à des pb de lecture avec certains flux. Par exemple avec celui de The Jakarta Post, qui par ailleurs s'affiche très bien dans le lecteur de Firefox 3.6 mais pas dans IE8, j'ai le message suivant : "http://www.thejakartapost.com/channel/business/feed" Warning: DOMDocument::load() [domdocument.load]: Entity 'nbsp' not defined in http://www.thejakartapost.com/channel/business/feed, line: 171 in /homez.156/businessjc/www/rsslib.php on line 77 Et pourtant, le code semble bon lorsqu'on regarde le source. Avec celui de Google News qui s'affiche correctement en localhost, j'ai ceci en ligne (aussi bien avec FF3.6 que IE8) : [b]http://news.google.com/news?ned=in&topic=n&output=rss Warning: DOMDocument::load(http://news.google.com/news?ned=in&topic=n&output=rss) [domdocument.load]: failed to open stream: HTTP request failed! HTTP/1.0 503 Service Unavailable in /homez.156/businessjc/www/rsslib.php on line 77 Warning: DOMDocument::load() [domdocument.load]: I/O warning : failed to load external entity "http://news.google.com/news?ned=in&topic=n&output=rss" in /homez.156/businessjc/www/rsslib.php on line 77[/b] La ligne 77 contient ceci dans la fonction RSS_Retrieve($url) :
    $doc->load($url);
Les 2 problèmes sont bien distincts. Je les ai regroupés mais peut-être vaut-il mieux les traiter séparément dans votre réponse ? Merci d'avance.
03-06-2010 10:17:38

webmaster

Bonjour, J'ai testé les deux flux sous Internet Explorer 8, avec le programme de démonstration: https://www.scriptol.fr/rss/rss-simple.php Cela fonctionne. Il faut vérifier avec phpinfo() la version de PHP, qui doit être la version 5.
03-06-2010 11:08:57

calame

Bonjour, Il s'agit bien de PHP5 tant sur la machine de dev que chez l'hébergeur. D'ailleurs les autres flux (une dizaine), proposés sur le site, fonctionnent. En fait, le problème sur le flux de The Jakarta Post a disparu de lui-même aujourd'hui avec la suppression du [b]&nbsp[/b] signalé dans le message d'erreur : [b]Entity 'nbsp' not defined[/b] Ces caractères se trouvaient dans la description d'un article. Le flux ayant été mis à jour par l'éditeur, l'article en question a disparu du flux. Donc plus [u]ce[/u] problème...pour l'instant mais un autre, en localhost seulement : "http://www.thejakartapost.com/channel/business/feed" Notice: Trying to get property of non-object in C:\wamp2g\www\business-services-asia\commonlib.php on line 19[/b] C'est-à-dire sur cette ligne :
$y["description"] = $item->getElementsByTagName("description")->item(0)->firstChild->textContent;
Finalement, cela pose une question plus large sur d'autres "incohérences" dans la constitution des fichiers xml par leurs auteurs. N'y a-t-il pas une autre façon de lire les flux qui permette de contourner toute imperfection pouvant survenir à tout moment et d'être sûr, du coup, de la qualité d'affichage en permanence ? J'ai essayé avec :
$fp = fsockopen($url);
$data = "";
while (!feof($fp)) 
{
    $data .= fgets($fp, 128);
}
fclose($fp);

$doc  = new DOMDocument();
$doc->loadXML($data);
et avec :
$data = file_get_contents($url); 
$doc  = new DOMDocument();
$doc->loadXML($data);
Evidemment, j'ai eu le même pb aussi bien avec rss-direct.php qu'avec common-direct-rss.php. Normal puisque les 2 utilisent [b]load($url). Merci encore pour ce que vous faîte.
04-06-2010 17:27:13

webmaster

"N'y a-t-il pas une autre façon de lire les flux qui permette de contourner toute imperfection pouvant survenir à tout moment et d'être sûr, du coup, de la qualité d'affichage en permanence ?" Si l'on découpe la lecture en étapes comme vous l'avez fait avec fsockopen ou comme on peut aussi le faire avec curl (voir ce thread: https://www.scriptol.fr/faq/viewtopic.php?id=97), on peut toujours agir sur les données avant qu'elles ne soient parsées par la fonction loadXML. Plus précisément, on peut éliminer les codes spéciaux avec str_replace ou preg_replace.
05-06-2010 15:21:35

calame

Merci, je vais donc travailler plus en profondeur sur les résultats retournés par l'une ou l'autre de ces fonctions. Si les résultats sont suffisamment probants, je vous fournirai le code pour l'inclure dans le script. En effet, cela peut servir à d'autres que ce module de "nettoyage" soit en standard. Cordialement.