Ajout d'un lecteur de flux RSS

DanDan Member
mai 2009 modifié dans Modifications
Bonjour,

Je souhaiterai ajouter à pluxml, un lecteur de flux RSS, me permettant de générer une page comportant plusieurs flux RSS (entre 3 et4 adresses différentes). Je n'arrive pas à trouver/imbriquer un code me permettant cela. Une idée de comment faire ?

En vous remerciant
«1

Réponses

  • HamtaroHamtaro Member
    TU peux utiliser SImplePie http://simplepie.org/ mais si tu connais pas grand chose en code et tout le tralala, pour la prise en main, ça va être chaud.

    Faut bien lire la doc, les différents tutos, wiki etc etc
  • DanDan Member
    mai 2009 modifié
    Merci Hamtaro, simplepie est très puissant et paramétrable :) mais me semble aussi un peu difficile à prendre en main (j'étudie cependant le code, bien illustré)
    Mes recherches m'ont conduit à http://feed2js.org/ et MagpieRSS qui est très facile a intégrer, et semble parfait pour moi :)
    J'ai pu intégrer plusieurs fils sur la même page, tout en gardant mes styles css, c'est nickel
  • julitojulito Member
    décembre 2009 modifié
    Bonjour,

    Je suis un nouvel utilisateur de pluxml et je suis déjà convaincu :).
    J'ai fais une implémentation rapide de simplePie, ça m'a pris 5 min mais le résultat est satisfaisant.
    Donc rapidement :
    1) Télécharger simplePie, je l'ai mis dans core/lib
    2) Créer le répertoire cache à la racine
    3) Ajouter include_once(PLX_CORE.'lib/simplePie/simplepie.inc'); dans index.php
    4) Modifier la classe class.plx.show.php en ajoutant la méthode suivante :
    /**
      * Methode qui affiche les $max dernieres entrees du flux RSS
      *
      * @param       url     l'url du flux rss a afficher
      * @author      Julito
    **/
    function listRssFeed($url) {
             $feed = new SimplePie($url);
             $feed->enable_cache(true);
             $feed->init();
             $items = $feed->get_items();
             foreach ($items as $item)
             {
                     echo "<li><a href='".$item->get_permalink()."'>".$item->get_title()."</a></li>";
              }
    }
    
    5) Ajouter le code suivant dans le fichier sidebar.php de votre thème au même niveau que "catégories" et "syndication" :
    <div class="box">
           <div class="box_title">Flux RSS partagés</div>
           <div class="box_content">
                   <ul>
                           <?php $plxShow->listRssFeed("http://adresse_du flux_rss"); ?>
                    </ul>
           </div>
    </div>
    
    Et voila :). Bien sur c'est ce qu'on peut faire de plus simple, libre à vous de le modifier!
  • StéphaneStéphane Member, Former PluXml Project Manager
    Bonjour julito

    Afin d'éviter de modifier les fichiers de pluxml, voilà comment tu peux faire

    1. Créer un dossier plugins à la racine de ton pluxml
    2. Dans ce dossier, créer un dossier simplepie
    3. Copie dedans les fichiers propres à simplepie
    4. Créer un fichier php appelé class.plx.simplepie.php avec dedans une class plxSimplePie qui ressemblerait à ça:

    Exemple
    <?php 
    
    if(!defined('PLX_ROOT')) exit;
    
    class plxSimplePie {
    
       function listRssFeed($url) {
       ...
       }
    
    }
    
    # création d'une instance de l'objet plxSimplePie
    $plxSimplePie = new plxSimplePie();
    
    ?>
    
    dans le fichier header.php de ton theme, apres la ligne
    <?php if(!defined('PLX_ROOT')) exit; ?>
    
    ajoute la ligne suivante
    <?php include(PLX_ROOT.'plugins/simplepie/class.plx.simplepie.php'); ?>
    
    après il ne te reste plus qu'à appeler ta fonction d'affichage de cette façon
    <?php $plxSimplePie->listRssFeed('http://www.site.com/rss.php'); ?>
    
    Tu l'auras compris, le but ici est de ne pas toucher aux fichiers de pluxml pour permettre des mises à jour futures sans perdre tes modifications. ça sera tout benef pour toi

    Stéphane

    Consultant PluXml

    Ancien responsable du projet (2010 à 2018)

  • Merci pour tes conseils Stéphane !
    Effectivement ton organisation est beaucoup plus propre et je ne manquerai pas de faire comme ça à l'avenir ! ;)
  • ok ok, merci à tous les deux, mais petit souci...

    Résumé de ce que j'ai fais : :

    --plugins
    |
    simplepie
    |
    --class.plx.simplepie.php

    creation d'un dossier "plugins" avec un dossier "simplepie"
    copie des fichiers de simplepie dans le dossier simplepie

    Creation d'un fichier "class.plx.simplepie.php"
    <?php 
    
    if(!defined('PLX_ROOT')) exit;
    
    class plxSimplePie {
    
    function listRssFeed($url) {
             $feed = new SimplePie($url);
             $feed->enable_cache(true);
             $feed->init();
             $items = $feed->get_items();
             foreach ($items as $item)
             {
                     echo "<li><a href='".$item->get_permalink()."'>".$item->get_title()."</a></li>";
              }
    			}
    
       		}
    
    # création d'une instance de l'objet plxSimplePie
    $plxSimplePie = new plxSimplePie();
    
    ?>
    
    Modification du header de mon template comme indiqué par stephane.
    <?php include(PLX_ROOT.'plugins/simplepie/class.plx.simplepie.php'); ?>
    
    creation d'une page statique pour tester avec pour seule code :
    <?php $plxSimplePie->listRssFeed('http://www.site.com/rss.php'); ?>
    
    Jusque là je pense avoir tout bon, Mais
    Fatal error: Call to a member function listRssFeed() on a non-object
    Ce que je comprend c'est que la fonction et l'objet qui ont normalement été créés dans le fichier "class.plx.simplepie.php" ne sont pas pris en compte.

    Une idée, une solution? :-)
  • StéphaneStéphane Member, Former PluXml Project Manager
    Bonjour garoubeef

    Je n'ai pas de pluxml sous la main pour tester ce que je vais te dire, mais peux-tu essayer de rajouter le code suivant dans ta page statique
    <?php global $plxSimplePie; ?>
    

    Consultant PluXml

    Ancien responsable du projet (2010 à 2018)

  • garoubeefgaroubeef Member
    décembre 2009 modifié
    Fatal error: Class 'SimplePie' not found in /cheminabsolu/plugins/simplepie/class.plx.simplepie.php
    Bizarre, il ne me semble pas qu'il y ai une erreur dans la definition pourtant... Oo

    à la ligne indiqué j'ai :
    $feed = new SimplePie($url);
    Vous l'aurez compris, je n'y connais pas grand chose en dev' php T_T
  • Salut garoubeef,

    Tu n'aurais pas oublié :
    include_once(PLX_CORE.'plugins/simplepie/simplepie.inc');
    
    au début de ton fichier class.plx.simplepie.php par hasard ?
  • En effet, corrigé comme suis :
    <?php 
    include_once(PLX_CORE.'plugins/simplepie/simplepie.inc');
    if(!defined('PLX_ROOT')) exit;
    
    class plxSimplePie {
    
    function listRssFeed($url) {
             $feed = new SimplePie($url);
             $feed->enable_cache(true);
             $feed->init();
             $items = $feed->get_items();
             foreach ($items as $item)
             {
                     echo "<li><a href='".$item->get_permalink()."'>".$item->get_title()."</a></li>";
              }
    			}
    
       		}
    
    # création d'une instance de l'objet plxSimplePie
    $plxSimplePie = new plxSimplePie();
    
    ?>
    
    Mais ça ne change rien au problème. T_T
  • Pardon, je pense que c'est plutôt ça, enfin j'espère :) :
    include_once(PLX_ROOT.'plugins/simplepie/simplepie.inc');
    
    Sinon remplace include par require pour voir si il génère une erreur.
  • Merci, là ça fonctionne. :-)
    Juste un message d'erreur sur un dossier /cache où il n'est pas possible d'ecrire mais ça n'a rien à voir.

    Encore merci.
  • Oui il faut créer un dossier cache à la racine.
    Bon courage :)
  • FrédéricFrédéric Member
    janvier 2010 modifié
    Bonsoir,

    Y a t'il moyen de limiter le nombres d'articles dans l'affichage svp ?

    la fonction dans le fichier est:
    function get_item_quantity($max = 0)
    	{
    		$max = (int) $max;
    		$qty = count($this->get_items());
    		if ($max === 0)
    		{
    			return $qty;
    		}
    		else
    		{
    			return ($qty > $max) ? $max : $qty;
    		}
    	}
    
  • antistressantistress Member
    janvier 2010 modifié
    ça pourrait aller dans le wiki, ça...
    (simplepie est sous Licence BSD)
  • StéphaneStéphane Member, Former PluXml Project Manager
    @Fred: dans ton administration de pluxml
    - nombre d'articles par page: voir paramétrage "Paramètres/Options d'affichages"
    - nombre d'articles affichés par catégories: voir paramétrage des catégories, colonne "Art/Page"

    Consultant PluXml

    Ancien responsable du projet (2010 à 2018)

  • FrédéricFrédéric Member
    janvier 2010 modifié
    Hum je pense pas que l'on parle de la même chose Stéphane.

    Moi je voudrais limiter le nombres d'article par flux d'un autre site par exemple.

    <?php $plxSimplePie->listRssFeed('http://www.lemonde.fr/rss/une.xml'); ?>
  • StéphaneStéphane Member, Former PluXml Project Manager
    Oula en effet. pfiouuu j'aurais pas du me lever ce matin et rester au lit :-)
    bon ben je passe mon tour alors... :p

    Consultant PluXml

    Ancien responsable du projet (2010 à 2018)

  • Hello,
    On peut limiter le nombre d'articles lus/affichés en modifiant la class.plx.simplepie.php pour y glisser un compteur incrémentiel couplé à une condition (dans mon exemple limitation à 10 items):
    <?php 
    include_once('plugins/simplepie/simplepie.inc');
    if(!defined('PLX_ROOT')) exit;
    
    class plxSimplePie {
    
    function listRssFeed($url) {
            $feed = new SimplePie($url);
            $feed->enable_cache(true);
            $feed->init();
            $items = $feed->get_items();
    	$itemlimit=0;
    	foreach ($items as $item) 	{
    		if ($itemlimit==10) { break; }
    		echo "<li><a href='".$item->get_permalink()."'>".$item->get_title()."</a></li>";
    		$itemlimit = $itemlimit + 1;
    	}
       }        
    }
    
    # création d'une instance de l'objet plxSimplePie
    $plxSimplePie = new plxSimplePie();
    
    ?>
    
  • Stéphane a écrit:
    Oula en effet. pfiouuu j'aurais pas du me lever ce matin et rester au lit :-)
    bon ben je passe mon tour alors... :p
    No problème, ca arrive ;)
    gaiusb a écrit:
    Hello,
    On peut limiter le nombre d'articles lus/affichés en modifiant la class.plx.simplepie.php pour y glisser un compteur incrémentiel couplé à une condition (dans mon exemple limitation à 10 items):
    Parfais, merci beaucoup pour le coup de main :)
  • bravo les gars :-)
  • StéphaneStéphane Member, Former PluXml Project Manager
    Avez-vous regarder la doc de simplepie pour voir s'il n'y a pas un paramètre pour limiter le nombre d'article afficher ? ça serait dommage qu'ils n'aient pas prévu ça.

    Consultant PluXml

    Ancien responsable du projet (2010 à 2018)

  • Il y aurais bien get_item_quantity, mais je sais pas comment l'intégrer :(
  • securitoilesecuritoile Member
    mai 2010 modifié
    snif, j'ai essayé mais sans succés j'ai comme erreur

    Fatal error: Call to a member function listRssFeed() on a non-object in data/statiques/002.rss.php on line 1

    et dans le footer de l'index du site

    Fatal error: Cannot redeclare class plxSimplePie in plugins/simplepie/plx.simplepie.php on line 5
  • StéphaneStéphane Member, Former PluXml Project Manager
    A voir le message d'erreur
    Fatal error: Call to a member function listRssFeed() on a non-object in data/statiques/002.rss.php  on line 1
    
    je dirai que tu n'as pas suivi la méthode décrite sur le wiki: http://wiki.pluxml.org/?page=ajouter_un_lecteur_de_flux_rss_distant

    Maintenant, essaye en mettant au debut de ta page statique
    global $plxSimplePie;
    
    Mais pas sur que ça marche...

    Consultant PluXml

    Ancien responsable du projet (2010 à 2018)

  • écoute je viens de refaire la procédure la ca marche :)
    merci Stéphane
  • Frédéric a écrit:
    le lien n'est plus dans le wiki .... y-a-t-il autre chose ?
  • HarukaHaruka PluXml Project Manager
    Le lien sur le wiki était devenu obsolète, il a donc été retiré. Sauf erreur de ma part il n'y a pas non plus de plugin :s
  • P3ter a écrit:
    Le lien sur le wiki était devenu obsolète, il a donc été retiré. Sauf erreur de ma part il n'y a pas non plus de plugin :s
    ben nous vla biens tiens .... ;)
    et pourquoi 'obsolète' alors qu'il semble toujours fonctionner pourtant ???
    il tourne sur mon blog et ici aussi :
    http://www.unesourisetmoi.info/ze/
    mais du coup plus de traces de la procédure et pas de 'remplaçant' ....
    tu n'aurais pas une archive de cette page du wiki ?
Connectez-vous ou Inscrivez-vous pour répondre.