Forum
Problème lors de la lecture du flux RSS
27-11-2009 22:30:25
Chakalaka
Premièrement permettez moi de remercier l'auteur du tutoriel concernant la lecture RSS pour le bon travail (tuto simple court et précis)
J'ai essayé d'utiliser le code pour lire le flux RSS d'un site de nouvelle j'ai l'erreur suivante:
Notice: Trying to get property of non-object in C:\....\fluxRSS.php on line 30 Cette fameuse ligne est la
$description = $tnl->firstChild->data;
J'ai vérifié dans mon .xml j'ai bel est bien un tag description
Qlq1 aurait une idée de comment résoudre ce bug ?
Autre question:
Comment faire pour limiter l'affichage (ou bien la lecture) de seulement 3 premières nouvelles du flux RSS ?
finalement:
Je n'arrive pas à comprendre ce que font les lignes de code suivante
$tnl = $item->getElementsByTagName("description"); $tnl = $tnl->item(0); $description = $tnl->firstChild->data;Petit détail (dernier je vous jure) Sur mon fureteur j'ai l'affichage suivant
Le golfeur américain Tiger Woods a brièvement été hospitalisé vendredi après avoir été...Ya til un moyen de bien afficher les caractères ? Voici mon code PHP:
<link rel="alternate" type="application/rss+xml" title="Nouvelles" href="http://www.cyberpresse.ca/rss/178.xml" /> echo RSS_Display("http://www.cyberpresse.ca/rss/178.xml", 15);Merci pour vos réponses :)
29-11-2009 20:47:20
webmaster
J'ai essayé d'utiliser le code pour lire le flux RSS d'un site de nouvelle j'ai l'erreur suivante: Notice: Trying to get property of non-object in C:\....\fluxRSS.php on line 30 Cette fameuse ligne est la $description = $tnl->firstChild->data;[/quote] Sans doute une question de compatibilité. Essayer avec textContent à la place de data. Autre question: Comment faire pour limiter l'affichage (ou bien la lecture) de seulement 3 premières nouvelles du flux RSS ?Changer cette ligne:
$recents = array_slice($RSS_Content, 0, $size);par
$recents = array_slice($RSS_Content, 1, 3);On part de 0 ou 1 selon que l'on veut ou non afficher le titre du site. On peut aussi appeler la fonction RSS_Display($url, $size) avec une valeur de 3 pour la paramètre $size.
Je n'arrive pas à comprendre ce que font les lignes de code suivante$tnl est un objet DOM de type NodeList. Il contient une liste d'items. $tnl->item(0) et le premier dans la liste. $tnl->firstChild est le premier élément contenu dans cet item. et data, maintenant remplacé par textContent est le texte contenu dans la balise. Tout ceci sert à récupérer le contenu de la balise description dans le flux.$tnl = $item->getElementsByTagName("description"); $tnl = $tnl->item(0); $description = $tnl->firstChild->data;
Sur mon fureteur j'ai l'affichage suivant "Le golfeur américain Tiger Woods a brièvement été hospitalisé vendredi après avoir été..." Ya til un moyen de bien afficher les caractères ?Un problème de DOCType. Le fichier XML est en UTF-8, la page qui l'affiche doit être aussi en UTF-8. Quand à la page utilisée pour créer le flux, si elle n'est pas en UTF-8, on utilise la fonction PHP de conversion: utf8_encode
$description = utf8_encode($tnl->firstChild->textContent;)
03-12-2009 05:03:57
Chakalaka
Merci infiniment ;)
25-05-2010 15:25:44
scorleon
Bonjour,
j'ai téléchargé la version 2010 et vraiment un grand bravo, ça marche bien. Merci
Sauf j'ai le même bug d'affichage des caractères bizarre même après avoir forcer l'encodage avec utf8_encode pour la description.
Par exemple, je fais mon test avec le flux du journal le monde :
http://www.lemonde.fr/rss/sequence/0,2-3208,1-0,0.xml
Est ce que vous avez une solution ?
Merci
25-05-2010 20:14:16
webmaster
Bonjour,
J'ai testé le flux avec le script de démonstration:
https://www.scriptol.fr/rss/rss-simple.php
Cela s'affiche normalement. Le script utilise l'encodage UTF-8, le problème doit donc venir de l'encodage de la page.
25-05-2010 22:52:23
scorleon1
Salut,
Merci pour votre réponse rapide, et dsl j'ai créé un nouveau compte car l'ancien ne marche plus même après initialisation du mot de passe.
Bon j'ai refait tout à zero, mais mnt j'ai l'erreur suivant :
Fatal error: Call to undefined method: domdocument->load() in /homepages/17/d329985513/htdocs/rsslib/rsslib.php on line 77
sur cette line :
$doc->load($url);mon site est hébergé chez 1and1. Merci pour votre aide.
26-05-2010 19:39:19
webmaster
C'est ce qui se passe généralement lorsque PHP n'est pas en version 5.
Même si l'hébergement supporte PHP 5, il peut par défaut être configuré pour PHP 4. Vérifier la version avec la fonction phpinfo().
<?php echo phpinfo(); ?>
26-05-2010 21:58:36
scorleon1
Voila la version du php du serveur : PHP Version 5.2.13
Maintenant j'ai les message suivant :
Warning: DOMDocument::load() [domdocument.load]: URL file-access is disabled in the server configuration in /homepages/17/d329985513/htdocs/rsslib/rsslib.php on line 77
Warning: DOMDocument::load(http://www.lemonde.fr/rss/sequence/0,2-3208,1-0,0.xml) [domdocument.load]: failed to open stream: no suitable wrapper could be found in /homepages/17/d329985513/htdocs/rsslib/rsslib.php on line 77
Warning: DOMDocument::load() [domdocument.load]: I/O warning : failed to load external entity "http://www.lemonde.fr/rss/sequence/0,2-3208,1-0,0.xml" in /homepages/17/d329985513/htdocs/rsslib/rsslib.php on line 77
27-05-2010 19:08:43
webmaster
Le message indique que la configuration du serveur ne permet pas de charger un fichier sous forme d'URL.
La variable allow_url_fopen is sur off.
N'ayant jamais rencontré ce problème, je suppose que c'est spécifique à 1and1.
Avez-vous accès à la configuration de PHP?
Vous pouvez aussi essayer de remplacer dans RSS_retrieve
$doc = new DOMDocument(); $doc->load($url);par
$data = file_get_contents($url); $doc = new DOMDocument(); $doc->loadXML(data);
27-05-2010 21:35:50
scorleon1
Bonjour,
j'ai essayé mais ça ne marche pas, toujours les même erreurs. sinon j'ai trouvé ça :" http://faq.1and1.fr/scripts/php/11.html " j'ai essayé mais ce n'est pas encore activé il faut du temps je crois.
Sinon j'ai trouvé une solution (toujours votre code) mais j'ai les problèmes des caractère avec :
je remplace ce code :
global $RSS_Content; $doc = new DOMDocument(); $doc->load($url); $channels = $doc->getElementsByTagName("channel"); $RSS_Content = array(); foreach($channels as $channel) { RSS_Channel($channel); }par ça :
global $RSS_Content; $ch = curl_init(); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5); curl_setopt($ch, CURLOPT_URL, $url); $result = curl_exec($ch); curl_close($ch); $doc = new DOMDocument(); $doc->loadXML($result); $channels = $doc->getElementsByTagName("channel"); $RSS_Content = array(); foreach($channels as $channel) { RSS_Channel($channel); }
28-05-2010 14:27:31
webmaster
Pourquoi ne pas utiliser fsockopen()?
$fp = fsockopen("www.example.com/rss.xml", 80, $errno, $errstr, 30); $data = ""; while (!feof($fp)) { $data .= fgets($fp, 128); } fclose($fp); $doc = new DOMDocument(); $doc->loadXML($data);Selon l'exemple du tutoriel PHP, adapté pour la situation.
29-05-2010 01:18:37
scorleon1
J'ai eu une boucle infinie :D
29-05-2010 20:40:33
webmaster
Je viens de tester le code suivant en combinaison avec la démo rss-direct.php:
$doc = new DOMDocument(); /* $doc->load($url); */ $fp = fsockopen($url); $data = ""; while (!feof($fp)) { $data .= fgets($fp, 128); } fclose($fp); $doc = new DOMDocument(); $doc->loadXML($data);Cela fonctionne parfaitement et le flux s'est affiché. Auriez vous l'occasion de tester le script chez un autre hébergeur?
30-05-2010 00:28:29
scorleon1
Oui je test sur 1and1, et ovh. mais avec le dernier code ça ne marche pas aussi, sa fait planté IE et firefox, et chrome.
mais comme je vous ai dis, avec ce code la ça marche bien sauf les caractères spec ne sont pas affichés :
global $RSS_Content; $ch = curl_init(); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5); curl_setopt($ch, CURLOPT_URL, $url); $result = curl_exec($ch); curl_close($ch); $doc = new DOMDocument(); $doc->loadXML($result); $channels = $doc->getElementsByTagName("channel"); $RSS_Content = array(); foreach($channels as $channel) { RSS_Channel($channel); }
31-05-2010 14:17:08
webmaster
Bonjour,
J'ai essayé votre code exact avec rss-direct.php et cela fonctionne parfaitement, sans problème de caractères spéciaux.
Ce doit être un problème de format de la page ou de configuration du navigateur.
L'en-tête de rss-direct.php est:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" dir="ltr" lang="en"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
02-06-2010 22:13:24
scorleon1
Bonjour,
c'est la même config que j'ai sur ma page.
je ne sais pas pourquoi ça ne marche pas .
03-06-2010 10:20:24
webmaster
Si je pouvais avoir le lien de la page ou d'une page de démonstration (sans http:// à cause du filtre anti-spam).
09-06-2010 23:01:53
scorleon1
Bonjour,
Dsl, j'étais en déplacement, je vais essayer de faire ça ce weekend et vous donner le lien.