Presse Agrume

Utiliser l’API SimplePie

novembre 24, 2008 par Julien  
Catégorie tutoriels

Il y a quatre 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é, le format RSS 2.0 n’est pas totalement supporté, 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 :

// 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->set_feed_url($fichier_xml);

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

// on lui indique le nom du fichier de cache.
$feed->set_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 ici l’utilisation de utf8_decode pour afficher le texte correctement (fonction de l’encodage de votre page). Comme Olivier, je vous conseille de mettre ce code dans une fonction dédié, la seule variable étant le fichier à parser. A noter que le code suppose ici que votre enclosure soit une image, ce qui ne sera pas souvent le cas en général.

Partager: Ces icones representent les sites de bookmarking social dans lesquels vos lecteurs peuvent partager et faire découvrir vos pages.
  • del.icio.us
  • Blogasty
  • blogmarks
  • Furl
  • Fuzz
  • Pioche
  • Scoopeo
  • Spurl
  • Tapemoi
  • Wikio

Articles relatifs

Commentaires

8 Responses to “Utiliser l’API SimplePie”

  1. Cro on mars 31st, 2009 15:53

    Bonjour

    Merci pour votre tutoriel j’ai enfin pu afficher les images du flux rss du monde sur mon site :)
    Cependant j’ai un soucis avec la description: en effet une page pub apparait au milieu du texte de description ( en effet en regardant le code xml du flux rss du monde on s’apercoit que dans la balise “description” se trouve une url vers une pub).
    Comment faire pour avoir acces au texte de la balise “description” sans avoir une pub qui apparait ?

    Merci d’avance

    Cro

  2. Julien on avril 7th, 2009 16:07

    Hello

    Le plus simple est de placer le contenu de la description dans une variable :
    $description = utf8_decode($item->get_description());

    Puis d’appliquer une regexp spécifique sur $description pour retirer la pub. Dans le cas de ce feed, et sans regexp, un simple :
    $description = strip_tags($description);

    devrait suffire.
    Julien.

  3. Groumphy on avril 7th, 2009 16:11

    Hello,

    Tuto super simple mais super efficace… Idem que le commentaire ci-dessus ! :-) Juste ce qu’il faut pour pouvoir exploiter l’API.

    Bonne continuation,

    G.

  4. zak on avril 29th, 2009 19:07

    Tout marche très bien… sauf que j’ai quand même un souci.
    Avec le flux rss du site “le monde” cela marche bien,
    mais si je veux afficher le flux rss d’un blog wordpress avec ce style d’adresse “http://monsite.wordpress.com/feed/”, rien ne s’affiche… une idée ?

    merci d’avance.

  5. SinOfDreams on octobre 10th, 2009 7:52

    cheap flight 9046 airline tickets 8-PPP cheap plane ticket 305976

  6. Victor on novembre 24th, 2009 0:29

    Bonjour tout le monde, je suis novice dans ce domaine.
    J’ai voulu tester ce script :

    J’ai donc créer un fichier index.php avec le script précédent encadré par les balise .
    J’ai copié sur le serveur index.php, simplepie.inc, j’ai crée un dossier cachenews (CHMOD 777).

    Pour ma page reste toute blanche, rien ne s’affiche….. J’ai bien vérifié, le flux rss est toujours valide.

    Est-ce que quelqu’un sait ce qui ne va pas?? merci
    Victor

  7. loic on janvier 24th, 2010 5:21

    salut sympa le tuto moi je voudrais integrer le contenu de mon flux dans une base de donnée tu as une idée j’ai vu ca

    $feed->set_cache_location(’mysql://username:password@hostname:port/database’);

    mais j’ai du mal a savoir comment ca marche

    j’ai pourtant enregistré la base sql et mis la ligne a jours mais ca n’enregistre rien

  8. leytiel on mars 16th, 2010 20:47

    Bonjour,
    je suis débutant dans ce domaine, j’essaye d’exécuter ce code sous easyphp mais j’obtiens ce message d’erreur

    Deprecated: Assigning the return value of new by reference is deprecated in D:\Documents and Settings\Administrateur\Bureau\simplepie_1.2\tt\simplepie.inc on line 737

    quelqu’un pourrait -il m’aider?

Laisser un commentaire...