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 = $item->getElementsByTagName("description");
$tnl = $tnl->item(0);
$description = $tnl->firstChild->data;
$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.
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: http://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.