RSS >> Balise enclusre >> probleme !

Nouveau WRInaute
Bonjour, j'ai un petit soucis pour exploiter un flux rss avec magpiers. Leflux est structuré comme ceci :

Code:
<item>
<title>bla</title>
<link>blabla</link>
<enclosure length="5120" url="bla.jpg" type="image/jpeg" />
</item>

j'arrive facilement a afficher title ou link mais la balise qui me pose probleme est : enclosure !
Comment l'afficher? j'ai essayé comme ceci :

Code:
 <?php
require_once "magpierss/rss_fetch.inc"; 
$fichier_xml = "adresse du flux"; 

$rss = fetch_rss($fichier_xml);

foreach ($rss->items as $item ) {

$img= $item["enclosure"];

    echo "<img src=\"$img\"><br>\n";
    } 


?>
Mais rien ne 'affiche, c'est pareil avec $img= $item["url"];

quelqu'un a une solution? merci
 
WRInaute occasionnel
Si tu es en PHP 5, tu peux utiliser SimpleXML. :wink:

Essaie comme suit.
Code:
<?php 
$xml = simplexml_load_file ('ton-flux-rss.xml');
$item = $xml -> item;
foreach ($item as $value)
{
  $enclosure = $value -> enclosure;
  echo '<img src="'.((string) $enclosure['url']).'" alt="Un peu de texte de substitution" />';
}
?>
 
WRInaute discret
Magpie ne gére pas les enclosures (rss 2.0).
Tu peux à la place utiliser SimplePie. Comme Magpie mais en mieux.

J'avais commençé par écrire un petit article à ce sujet, pas encore édité faute de temps. Le voici donc pas tout à fait terminé, mais il devrait pouvoir t'aider :

-
Parser un flux RSS avec l'API SimplePie

Il y a trois ans de cela, Olivier Duffez de WebRankInfo avait écrit un excellent article sur l'intégration de flux RSS avec l'outil MagpieRSS.

Cet outil, fort pratique, permet à un webmaster d'intégrer sur son site des fils de news RSS en provenance de diverses sources, à la manière du célèbre Netvibes. Malheureusement, le projet Magpie ayant été abandonné, tout les formats de flux RSS dont le plus utilisé (le 2.0) ne pas totalement supportés, notamment par exemple les enclosures. Heureusement, depuis quelques années, un remplaçant pointe le bout de son bec, il s'agit de SimplePie, tout aussi pratique, et simple d'utilisation, mais en plus compatible avec tout les formats RSS. C'est de lui que nous allons parler.

Tout ce que fait Magpie, SimplePie le fait également, aussi vous pouvez lire l'article d'Olivier pour plus d'informations.

Pour utiliser SimplePie, il vous faut la télécharger. Vous la trouverez sur le site http://simplepie.org. C'est le fichier simplepie.inc sous licence LGPL.

Les fonctionnalités offertes par cette API sont multiples, on a bien sûr entre autres, la gestion d'un cache, mais aussi la possibilité de filtrer le flux en y supprimant certaines publicités, ou des balises et attributs potentiellements dangeureux. Certaines configurations doivent se faire dans le fichier lui même (si vous souhaitez par exemple filtrer une balise supplémentaire), mais la pluparts peuvent se faire directement dans votre code php. En parlant de code, voici un exemple d'intégration :

Code:
// adresse du flux qu'on souhaite intégrer.
$fichier_xml='http://www.lemonde.fr/rss/sequence/0,2-3208,1-0,0.xml';

// appel de la libraire SimplePie.
require 'simplepie.inc';

// création d'une nouvelle instance de la classe SimplePie.
$feed = new SimplePie();

// on lui indique quel fichier il doit traiter.
$feed->feed_url($fichier_xml);

// on peut lui interdire de trier par date. true par défaut.
$feed->order_by_date(false);

// on lui indique le nom du fichier de cache.
$feed->cache_location('cachenews/');

// on lache la pie.
$feed->init();

// Si le flux contient à manger.
    if($feed->data){

        // On défini le nombre d'articles qui nous intéressent.
        $max=$feed->get_item_quantity(5);

        // Nous voici au coeur du code d'intégration.
        for($x=0; $x<$max; $x++) {

            // On prend le x-iéme item.
            $item=$feed->get_item($x);
       

        // Un peu d'habillage html.
        echo "<div style=\"width: 290px; text-align: left;  padding: 4px; background-color: #FFFFEE; border: 1px solid #CCCCCC; margin: 6px;\"><a href=\"";

        // le lien ou pointe le flux.
        echo $item->get_permalink();
        echo "\">";

        // le titre du flux.
        echo utf8_decode($item->get_title());
        echo "</a><br />";

            // si enclosure, on affiche. C'est le cas du monde.
            if($enclosure=$item->get_enclosure(0)){

            echo "<img src=\"";
            echo $enclosure->get_link();
            echo "\" border=\"1\" style=\"float: left; margin: 4px; margin-top: 8px;\">";
            }
        // Et la description pour finir.
        echo utf8_decode($item->get_description());
        echo "</div>";
        }

 }
Voila, c'est on ne peut plus simple. Pas vraiment de commentaire à rajouter sur le code en lui même, si ce n'est l'utilisation de utf8_decode pour afficher le texte correctement. Comme Olivier, je vous conseille de mettre ce code dans une fonction dédié, la seule variable étant généralement le fichier à parser.
-

Voilà, en espérant que cela puisse t'aider.

Note : SimplePie fonctionne à partir de la version 4.3 de php.
 
WRInaute discret
hello,

En modifiant la fonction feedparser, tu doit pouvois lire les enclosure.
J'ai écrit un petit article sur comment resizer les enclosures avec magpierss.


Sur le site de mon profil, j'utilise magpierss pour afficher les flux rss, et les enclosures fonctionnent (je gère même les enclosure de type swf sur I.E, flv (assez rare...) et mp3 :) )

Si cette technique ne fonctionne pas, dis le moi, il y a peut être un fichier à modifier de magpierss. Je crois que ça dépend des versions, mais la mienne commence à dater. Je chercherais le cas écéant la modif que j'ai faite.

C'est vraiment une librairie sympa magpierss, mais il faut souvent mettre les mains dans le cambouis.

P.S. sur la fonction feedparser de l'article, je propose de resizer les images. A utliser avec parcimonier, car dans le cas de nombreux rss affichés, ça peut ralentir le tout ;)
 
Discussions similaires
Haut