Paramétrer magpierss

lo2b

WRInaute occasionnel
bonjour, me voilà obligé de m'aventurer dans le monde (obscur) du php pour intégrer des flux RSS sur un site.
pas de pb pour utiliser magpierss, avec le script suivant que j'ai récupéré :

Code:
<?php
// on inclut la classe magpierss
require_once("magpierss/rss_fetch.inc");

// la fonction FeedParser() va extraire le contenu pour l'afficher
// elle prend en paramètre $url_feed, l'url du flux RSS et $nb_items_affiches, le nombre d'éléments (items) à afficher
function FeedParser($url_feed, $nb_items_affiches) {

    // lecture du fichier distant (flux XML)
    $rss = fetch_rss($url_feed);

    // si le parcours du fichier se passe bien, on lit les élements (items)
    if (is_array($rss->items))  {

        // on ne garde que les $nb_items_affiches premiers éléments (items), nombre défini dans l'en-tête de la fonction
        $items = array_slice($rss->items, 0, $nb_items_affiches);

        // on peut récupérer les informations sur le site proposant le flux (optionnel)
        $site_titre = $rss->channel["title"]; // titre du site
        $site_lien = $rss->channel["link"]; // lien du site
        $site_description = $rss->channel["description"]; // description du site    
        // à présent on stocke les données dans $html, variable à afficher

        // titre sous forme de lien
        $html .= "<a href=\"$site_lien\" title=\"$site_description\" target=\"_blank\">$site_titre</a><br />\n";

        // on affiche la description du site proposant le flux
        $html .= "<span>$site_description</span><br clear=\"left\" target=\"_blank\"><br />\n"; // le clear="left" renvoie à la ligne même s'il y a une image

        // on fait une boucle sur les informations : pour chaque item, récupérer $titre... et afficher
        foreach($items as $item) {

            // on mémorise les informations de chaque item dans des variables
            $titre = $item["title"];
            $lien = $item["link"];
            $description = $item["description"];
            

            // la date utilisée pour les flux RSS est au format timestamp, il faut donc formater la date
            // conversion au format jj/mm/aa. pour plus d'informations, vous conférer au tutorial sur les timestamp
            $date = date("d/m/y",strtotime($item["pubdate"]));          

            // on affiche le titre de chaque item
            $html .= "<a href=\"".$lien."\" title=\"".$titre."\" target=\"_blank\">".$titre."</a><br>\n";

            // puis la date et la description
            $html .= "<span>$date - $description</span><br clear=\"left\"><br />\n";
        } // fin de la boucle

        // on retourne la variable $html au programme (elle contient le code HTML pour l'affichage du flux)
        return $html;
    } // fin du traitement du fichier
} // fin de la fonction FeedParser()
?>

voilà mes trois questions :

1. comment faire pour n'afficher que les titres du flux syndiqué ?
2. comment faire pour ne pas afficher les images ?
3. comment faire pour syndiquer plusieurs flux ensemble ?

après avoir longement cherché sur Google, je n'ai pas trouvé de tuto expliquant toutes les fonctions paramétrables de magpierss...
 

bee_human

WRInaute passionné
Pour 1 c'est simple: tu retire cela:
// puis la date et la description
$html .= "<span>$date - $description</span><br clear=\"left\"><br />\n";

si tu veux garder la date il faut que tu modifies la ligne du dessus pour que la date soit devant ton titre.

Pour 2, si la description contient des images, les images s'afficheront à partir du moment où tu afficheras la description. Pour retirer que les images sans retirer la description, il faut que tu réinterprètes complétement le champ description pour éliminer toutes les balises img avec ceux qui les ferment et ceux qui ne les ferment pas. Avec ceux qui éventuellement utilisent l'image comme lien etc...

Pour le 3, il faut également réécrire le code php pour n'afficher la variable $html qu'une fois que tus l'a rempli avec l'ensemble des flux dans l'ordre que tu souhaites (en passant par un tableau intermédiaire qui te permettra le tri)
 

tryan

WRInaute passionné
Pour la 2, sa ne serait pas plus simple de reduire les images à 1px par css plutot que de ce casser la tete à revoir le code ?
 

lo2b

WRInaute occasionnel
merci. j'ai modifié le code pour obtenir l'affichage minimal que je cherchais :
date - titre

Code:
<?php
// on inclut la classe magpierss
require_once("magpierss/rss_fetch.inc");

// la fonction FeedParser() va extraire le contenu pour l'afficher
// elle prend en paramètre $url_feed, l'url du flux RSS et $nb_items_affiches, le nombre d'éléments (items) à afficher
function FeedParser($url_feed, $nb_items_affiches) {

    // lecture du fichier distant (flux XML)
    $rss = fetch_rss($url_feed);

    // si le parcours du fichier se passe bien, on lit les élements (items)
    if (is_array($rss->items))  {

        // on ne garde que les $nb_items_affiches premiers éléments (items), nombre défini dans l'en-tête de la fonction
        $items = array_slice($rss->items, 0, $nb_items_affiches);

        // à présent on stocke les données dans $html, variable à afficher

        // on fait une boucle sur les informations : pour chaque item, récupérer $titre... et afficher
        foreach($items as $item) {

            // on mémorise les informations de chaque item dans des variables
            $titre = $item["title"];
            $lien = $item["link"];            

            // la date utilisée pour les flux RSS est au format timestamp, il faut donc formater la date
            // conversion au format jj/mm/aa. pour plus d'informations, vous conférer au tutorial sur les timestamp
            $date = date("d/m/y",strtotime($item["pubdate"]));

            // on affiche la date
            $html .= "<span>$date </span>\n";

            // puis le titre de chaque item
            $html .= "<a href=\"".$lien."\" title=\"".$titre."\" target=\"_blank\">".$titre."</a><br>\n";

        } // fin de la boucle

        // on retourne la variable $html au programme (elle contient le code HTML pour l'affichage du flux)
        return $html;
    } // fin du traitement du fichier
} // fin de la fonction FeedParser()
?>

pour ma 2e question, de toute façon je n'affiche que le titre, donc pas de pb d'image...
pour ma 3e question, ce sera pour quand je serai plus grand :mrgreen:
 

tryan

WRInaute passionné
Dans ta page qui affiche ton flux rss, tu fais:
Code:
 <?
$rss= ("http://monflux1/rss.xml") ;
$rss1= ("http://monflux2/rss.xml") ;
?>
Et dans l'appel du flux rss:
Code:
<?php
require_once("feedparser.php");
echo
 FeedParser("$rss" ,10) ;
echo
 FeedParser("$rss1" ,10) ;
?>
Normalement sa t'affiche tes 2 flux :wink: .
 

lo2b

WRInaute occasionnel
merci ! ...Mais je dois m'être trompé quelque part...

feedparser.php
Code:
<?php 
// on inclut la classe magpierss 
require_once("magpierss/rss_fetch.inc"); 

// la fonction FeedParser() va extraire le contenu pour l'afficher 
// elle prend en paramètre $url_feed, l'url du flux RSS et $nb_items_affiches, le nombre d'éléments (items) à afficher 
function FeedParser($url_feed, $nb_items_affiches) { 

    // lecture du fichier distant (flux XML) 
    $rss = fetch_rss($url_feed); 

    // si le parcours du fichier se passe bien, on lit les élements (items) 
    if (is_array($rss->items))  { 

        // on ne garde que les $nb_items_affiches premiers éléments (items), nombre défini dans l'en-tête de la fonction 
        $items = array_slice($rss->items, 0, $nb_items_affiches); 

        // à présent on stocke les données dans $html, variable à afficher 

        // on fait une boucle sur les informations : pour chaque item, récupérer $titre... et afficher 
        foreach($items as $item) { 

            // on mémorise les informations de chaque item dans des variables 
            $titre = $item["title"]; 
            $lien = $item["link"];            

            // la date utilisée pour les flux RSS est au format timestamp, il faut donc formater la date 
            // conversion au format jj/mm/aa. pour plus d'informations, vous conférer au tutorial sur les timestamp 
            $date = date("d/m/y",strtotime($item["pubdate"])); 

            // on affiche la date 
            $html .= "<span>$date </span>\n"; 

            // puis le titre de chaque item 
            $html .= "<a href=\"".$lien."\" title=\"".$titre."\" target=\"_blank\">".$titre."</a><br>\n"; 

        } // fin de la boucle 

        // on retourne la variable $html au programme (elle contient le code HTML pour l'affichage du flux) 
        return $html; 
    } // fin du traitement du fichier 
} // fin de la fonction FeedParser() 
?>

un-seul-flux-rss.php
Code:
<html>

<head>
<meta http-equiv="Content-Language" content="fr">
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>Nouvelle page 1</title>
</head>

<body>

<?  $rss= ("http://tempsreel.nouvelobs.com/file/rss_perm/rss_permanent_politique.xml") ;  $rss1= ("http://www.lemonde.fr/rss/sequence/0,2-3224,1-0,0.xml") ;  ?> 

<?php 
require_once("feedparser.php"); 
echo 
 FeedParser("$rss" ,20) ; 
echo 
 FeedParser("$rss1" ,20) ; 
?>

</body>

</html>

voilà ce que cela donne (sans mise en page...) :
-http://annuaire.politique.free.fr/un-seul-flux-rss.php
bref, les deux flux se succèdent mais ne se mélangent pas chronologiquement...

(je vais alors peut-être me contenter de
-http://annuaire.politique.free.fr/plusieurs-flux-rss.php)
 

bee_human

WRInaute passionné
tryan a dit:
Non, c'est bien sa.
lo2b a dit:
3. comment faire pour syndiquer plusieurs flux ensemble ?
Ta jamais dit qu'ils devaient se mélanger ^^ !

Généralement quand on veut parser 2 flux ensemble, c'est pour les mélanger. C'est pour cette raison que j'ai suggéré le passage par un tableau intermédiaire pour le trier ensuite suivant ses propres critères: date ou ordre alphabétique du titre par exemple.
 

tryan

WRInaute passionné
Oki, moi je suis bete et discipliné :lol: , si c'est pas marqué texto que c'est pour les mélanger, je ne peux pas le savoir.
Ceci dit, aurrais-tu un exemple sous la main, un tuto à suivre ou je ne sais quoi ?
 

Discussions similaires

Haut