Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Bonjour,
Je tente de lire les articles d'un flux RSS avec le code suivant :
<?php error_reporting(E_ALL); set_include_path('fw/'); require_once 'Zend/Feed/Rss.php'; try { $canal =Zend_Feed::import('http://www.monflux/rss.php', 5); } catch (Zend_Feed_Exception $e) { // l'importation du flux a échoué echo '<input type="hidden" value="'. $e->getMessage().'" />'; exit; } foreach($canal->item as $elem) { echo '<h1><a href="' . $elem->link() . '" title="' . $elem->title() . '">' . $elem->title() . '</a></h1>'; echo '<p>' . substr($elem->description(), 0, 50) . '</p>'; } ?>
Je n'arrive pas à lire les articles du flux.
Avez vous une idée du problème ?
Merci de votre aide.
Hors ligne
Il n'y a pas d'erreur php. Rien n'est retourné en fait.
Par exemple $canal->title() me donne bien le nom du flux, par contre la liste des items du flux est vide : la boucle foreach ne renvoit rien alors que le flux a des données.
Ces sur la lecture des extraits d'articles du blog contenu dans le flux que je bloque.
Hors ligne
public function indexAction() { // on va chercher les derniers articles try { $rssFlux = new Zend_Feed_Rss('http://fr.fxfeeds.mozilla.com/fr/firefox/headlines.xml'); } catch (Zend_Feed_Exception $e) { // l'importation du flux a échoué echo("Une exception a été interceptée lors de l'importation du flux :{$e->getMessage()}\n"); exit; } // on initialise un tableau contenant les données du canal RSS $canal = array( 'titre' => $rssFlux->title(), 'lien' => $rssFlux->link(), 'description' => $rssFlux->description(), 'elements' => array() ); // on itère sur chaque élément du canal et on stocke les données qui nous intéressent foreach ($rssFlux as $elem) { $Posts[] =<<<VAR <h1><a href="{$elem->link()}" title="{$elem->title()}">{$elem->title()}</a></h1><p>{$elem->description()}</p> VAR; } //die('<pre>'.print_r($canal,true).'</pre>'); $this->view->posts = $Posts; }
moi j'ai testé avec ca et ca marche sans problèmes.
j'ai remarqué cependant que suivant le flux qui est chargé il est en effet possible que les 'items' ne soient pas disponibles, probablement un bug dans la structure du flux rss pas valide je suppose.
Hors ligne
Notes:
foreach($canal->item as $elem) => la boucle serait à la limite plutôt sur $canal->items
De plus l'e flux implémente l'interface Iterable si je ne me trompe pas, c'est pour ça qu'il est possible de faire directement foreach($canal as $elem)
Hors ligne
Je galerais de puis un moment, fait plusieurs tentatives, testé vos solutions sans succès.
Et puis je change de flux, et tout marche !
Grrr! le flux RSS est vérolé. A priori un blog sous dotclear.
Du coup, j'ai tenté la même chose avec le flux atom, et ça marche ....
Merci en tout cas de vos pistes, sans cela je tournai en rond avant de penser à une erreur du flux !
Hors ligne
maxmob a écrit:
Je galerais de puis un moment, fait plusieurs tentatives, testé vos solutions sans succès.
Et puis je change de flux, et tout marche !
Grrr! le flux RSS est vérolé. A priori un blog sous dotclear.
Du coup, j'ai tenté la même chose avec le flux atom, et ça marche ....
Merci en tout cas de vos pistes, sans cela je tournai en rond avant de penser à une erreur du flux !
oui j'ai eu exactement le meme soucis donc je m'en doutais
Hors ligne