Récupérer flux RSS d'un site PluXml pour l'afficher sur un second site PluXml

Bonjour,

J'aimerai récupérer un flux RSS d'un de mes sites PluXml pour l'afficher comme je le souhaite sur un autre de mes sites PluXml (Titre de l'article , thumbnail, lien), éventuellement filtrable d'après une catégorie.
Auriez-vous une idée de comment m'y prendre ?

D'avance merci

Mots clés:

Réponses

  • Salut Kroc !
    Il y a ce plugin spécialement conçu pour ça qui à l'air pas mal, je ne l'ai pas tester personnellement.
    https://forum.pluxml.org/discussion/comment/31394

    Mon blog sous PluXml depuis 2016: PetitPouyo

  • krockroc Member
    novembre 2020 modifié

    Salut @petitpouyo , merci pour le lien.
    J'ai téléchargé et regarder, mais le plugin a l'air un peu vieux et peu aisé à l'usage.
    Je crois que je vais revoir mes ambitions à la baisse sur ce sujet, et chercher une autre solution plus simple pour lier mes deux sites :)

  • bazooka07bazooka07 PluXml Lead Developer, Moderator
    novembre 2020 modifié

    Un flux RSS est un simple fichier XML à télécharger et à analyser (parse) pour en extraire le contenu.
    format flux RSS

    Pour l'analyse, on peut utiliser la librairie SimplePie comme le plugin, le faire à l'ancienne comme PluXml ou utiliser SimpleXml.

    N.B. Le format des flux RSS n'est pas spécifique à PluXml, on peut afficher des infos depuis d'autres moteurs de CMS.
    On peut simplement créer une page statique dans PluXml comme ceci :

    <?php
    // const RSS_URL = 'hhttp://test.lan/PluXml-5.8.4/feed.php?rss';
    // const RSS_URL = 'hhttp://test.lan/PluXml-5.8.4/feed/rss/categorie1/rubrique-1';
    // const RSS_URL = 'hhttp://test.lan/PluXml-5.8.4/feed/rss/tag/soleil';
    // const RSS_URL = 'https://www.krocui.com/feed/rss';
    
    // const RSS_URL = 'hhttps://www.huffingtonpost.fr/feeds/index.xml';
    
    // enclosure avec contenu audio
    const RSS_URL = 'https://www.arteradio.com/xml_sound_emission?emissionname=%22FEN%C3%8ATRE%20SUR%20COUR%22';
    // const RSS_URL = 'https://podcast.bfmbusiness.com/channel295/BFMchannel295.xml';
    // const RSS_URL = 'http://radiofrance-podcast.net/podcast09/rss_14497.xml';
    // const RSS_URL = 'https://podcast.rmc.fr/channel30/RMCInfochannel30.xml';
    
    // enclosure avec image :
    // const RSS_URL = 'https://www.france24.com/fr/france/rss';
    
    $ch = curl_init(RSS_URL);
    
    curl_setopt_array($ch, array(
        CURLOPT_RETURNTRANSFER  => true,
        CURLOPT_USERAGENT       => 'Mozilla/5.0 (Windows NT 6.3; Win64; x64; rv:64.0) Gecko/20100101 Firefox/64.0',
        CURLOPT_FOLLOWLOCATION  => true,
    ));
    $buffer = curl_exec($ch);
    $status = curl_getinfo($ch);
    curl_close($ch);
    
    if($buffer !== false && $status['http_code'] == 200) {
        unset($status);
        $obj = simplexml_load_string($buffer);
    ?>
    <header>
    <h3>
        <a href="<?= $obj->channel->link->__toString(); ?>"><?= $obj->channel->title->__toString() ?></a>
    </h3>
    <p>
        <?= $obj->channel->description->__toString(); ?>
    </p>
    </header>
    <section>
    <?php
        foreach($obj->channel->item as $item) {
            $dt = new DateTime($item->pubDate->__toString());
    ?>
        <article>
            <h4><?= $item->title->__toString() ?></h4>
            <p>Publié le <?= preg_replace_callback('@^(\d)@', function($t) { return plxDate::getCalendar('day', $t[1]); }, $dt->format('w d/m/Y à G\hi')) ?></p>
            <div>
    <?= $item->description->__toString() ?>                    
            </div>
            <p><a href="<?= $item->link->__toString() ?>" target="_blank">Lire la suite</a></p>
    <?php
            if($item->enclosure) {
                if(strpos($item->enclosure['type'], 'audio/') === 0) {
    ?>
            <p><audio src="<?= $item->enclosure['url'] ?>" controls><a href="$item->enclosure['url']" target="_blank">Ecouter</a></p>
    <?php                   
                } elseif(strpos($item->enclosure['type'], 'image/') === 0) {
    ?>
            <p><img src="<?= $item->enclosure['url'] ?>" /></p>
    <?php                   
                }
            }
    ?>
        </article>
    <?php   
        }
    } else {
    ?>
        <div>
            <p>Error <?= $status['http_code'] ?></p>
            <p><em><?= $status['url'] ?></em>)</p>
            <p>Content-Type : <?= $status['content_type'] ?></p>
            <pre><?php /*  print_r($status); */ ?></pre>
        </div>
    <?php
    }
    ?>
    </section>
    

    Attention: Ne pas confondre les flux RSS et Atom. Leurs formats sont différents.

  • krockroc Member
    novembre 2020 modifié

    Bonjour @bazooka07, merci beaucoup pour ta réponse précise et efficace !

    Je viens de tester, et autant ça fonctionne à merveille pour les fluxs du Huffington ou Arte que tu fournis, autant ça ne fonctionne pas du tout sur mes flux PluXml (ex: https://www.krocui.com/feed/rss).
    Je n'ai pas de message d'erreur, mais ça n'affiche absolument rien.
    Par contre, si je met le flux suivant, ça marche : https://www.pluxml.org/feed/rss

    J'ai continué à tester en mettant divers flux rss provenant de sites faits avec notre CMS, et parfois ça fonctionne, parfois ça ne fonctionne pas, sans que je trouve de lien logique.

  • bazooka07bazooka07 PluXml Lead Developer, Moderator

    Ton hébergeur a mis un filtre pour les requêtes de flux RSS.
    J'ai corrigé le code ci-dessus pour le leurrer ( User-agent de Firefox sous Windows 7).

  • krockroc Member
    novembre 2020 modifié

    Fantastique ça fonctionne ! Mille mercis !
    Voilà un code qui m'ouvre de belles possibilités !
    En plus tu as ajouté des options pour les enclosures :)

    Je vais maintenant faire en sorte d'isoler la vignette (car je souhaite uniquement afficher la miniature pour le moment et pas le contenu).

  • krockroc Member
    novembre 2020 modifié

    C'est bon, ça fonctionne, j'ai simplement ajouté cette ligne dans le fichier class.plx.feed.php pour ajouter la miniature dans le flux RSS.

    $entry .= "\t\t".'<enclosure url="'.$src.'" type="image/png" />'."\n";
    
  • krockroc Member
    novembre 2020 modifié
  • @kroc rien à voir avec les flux rss mais j'adore ton univers !

    Mon blog sous PluXml depuis 2016: PetitPouyo

  • krockroc Member
    novembre 2020 modifié

    Merci !

Connectez-vous ou Inscrivez-vous pour répondre.