Accueil Boite à Outils Syndication de contenu Syndication de contenu - Archives Un lecteur RSS pour votre site 2/2

Publié le : 28 janvier 2005
Imprimer Imprimer cet article

Auteur :
Alain Sichel

Alain Sichel
Un lecteur RSS pour votre site 2/2
Explication du lecteur RSS utilisable par vos visiteurs

Cet article a été publié le 27 janvier 2005, il est actuellement dépassé et n’a plus qu’un intérêt "historique". Pour présenter un lecteur de fichiers de syndication sur votre site, je vous conseille plutôt de voir Lecteur RSS/Atom pour votre site 1/2 et 2/2.

Après un premier article pour présenter le Lecteur RSS [1] et permettre de l’installer tel quel dans une page, cette deuxième partie donne quelques explications sur son fonctionnement [2].

Le formulaire

Le formulaire permet au visiteur de taper l’adresse du fichier de syndication à afficher ; voici sa présentation :

<?=$PHP_SELF ?> " method="post">
Adresse du fichier de syndication :
MagpieRSS[2]  EasyRSS[3]

et voici son code :

<form action="<?=$PHP_SELF ?>" method="post"><center>
         <table border="1" cellspacing="0" cellpadding="10">
           <tr class="unite">
             <td colspan="2">Adresse du fichier de syndication&nbsp;:
                 <input type="text" name="adresse" size="50" value="<? if(isset($_POST["adresse"])) {echo $fichier_xml;
                                  $nouv="<p>Pour lire un nouveau fichier de syndication, tapez son adresse ci-dessus.</p>";}
                                  else {echo "Accès clavier touche ,";} ?>" onfocus="this.value='http://'" accesskey="," /></td>
           </tr>
           <tr class="unite">
             <td><center><input type="radio" name="parseur" value="magpie" <? if(($_POST["parseur"])!="easy") {echo 'checked="checked"';} ?> /> MagpieRSS<sup>[<a href="#note2">2</a>]</sup>&nbsp;
                 <input type="radio" name="parseur" value="easy" <? if(($_POST["parseur"])=="easy") {echo 'checked="checked"';} ?> /> EasyRSS<sup>[<a href="#note3">3</a>]</sup>
                 </center></td>
                          <td><center>
                 <input type="submit" name="Submit" value="Envoi" alt="Envoi" title="Envoi" /></center></td>
           </tr>
         </table></center></form>

Les points particuliers sont :

- l’annonce par défaut dans le champ : "Accès clavier touche ," indique un raccourci clavier [3], elle est remplacée par "http://" dès que le focus est dans le champ. Après envoi du formulaire par contre, c’est l’URL du fichier demandé qui s’affiche.

- le choix proposé par défaut est d’utiliser MagpieRSS ; si on préfère EasyRSS, après envoi du formulaire, le bouton correspondant est affiché : <? if(($_POST["parseur"])=="easy") {echo 'checked="checked"';} ?>.

Le choix du système d’affichage

Après envoi du formulaire, le script doit d’abord déterminer si on va utiliser MagpieRSS ou EasyRSS comme lecteur :

<?php
if(($_POST["parseur"])=="magpie") {
// ici on exécute le script MagpieRSS
(...)
}
if(($_POST["parseur"])=="easy") {
// là on exécute le script EasyRSS
(...)
}
?>

Les contrôles

Que l’on utilise MagpieRSS ou EasyRSS, on commence par contôler la validité de l’URL transmise par le formulaire :

if(isset($_POST["adresse"])) {
$adresse = ($_POST["adresse"]);
if (preg_match("#^http://.([\w./-]+)$#i",$adresse,$ret)) {
// là on exécute le script
}
else {echo "<p class=\"red\">L'adresse indiquée n'est pas valide, essayez à nouveau&nbsp;:</p>\n<br />";}

Si l’URL n’est pas conforme, on affiche un message d’errreur.

Ensuite, si le script n’arrive pas à lire le fichier, on le signale :

- avec MagpieRSS [4] :

if(($rss -> channel['link'])=="") {echo '<a name="retour4"></a><p class="red">L\'analyse de '.$fichier_xml." ne permet pas d'afficher un fil de syndication. Faites un nouvel essai, en cas d'échec, voyez la note en bas de page<sup>[<a href=\"#note4\">4</a>]</sup>.</p><br />\n"; }
        else { si cela se passe bien, on affiche le fichier
}

- avec EasyRSS :

if($nbnews==0) {echo "<p class=\"red\">L'analyse du fichier ".$fil." ne permet pas d'afficher un fil de syndication. Il ne s'agit pas d'un fichier au format RSS 0.91 ou il contient des erreurs.</p><br />\n"; }
else {en l'absence d'erreur on affiche le fichier
}

Utilisation de MagpieRSS

Après le choix de MagpieRSS, les contrôles, voici la suite du script :

$fichier_xml = $ret[0];
$nombre_element = 20;

$rss = fetch_rss($fichier_xml);

if(($rss -> channel['link'])=="") {echo '<a name="retour4"></a><p class="red">L\'analyse de '.$fichier_xml." ne permet pas d'afficher un fil de syndication. Faites un nouvel essai, en cas d'échec, voyez la note en bas de page<sup>[<a href=\"#note4\">4</a>]</sup>.</p><br />\n"; }

La valeur $nombre_element = 20; indique le nombre d’articles que l’on souhaite afficher. En cas difficulté de lecture du fichier, le script affiche un message d’erreur, sinon il continue :

else {
        echo '<table width="100%" border="0"><tr><td width="50%"><h4 align="center"><a href="'.$rss -> channel['link'].
                '" target="_blank">'.$rss -> channel['title']."</a></h4></td>\n<td>";
        if(isset($rss -> image['url'])) { echo "<center><a href=\"".$rss -> image['link'].'" target="_blank"><img src="'
                .$rss -> image['url'].'" width="'.$rss -> image['width'].'" height="'.$rss -> image['height'].'" border="0" alt="'
                .$rss -> image['title']."\"></a></center>"; }
        echo "</td></tr></table>\n<ul>\n";

Le script affiche ici dans un tableau, dans la cellule gauche le nom du site avec son lien et dans la cellule droite le logo du site. Il présente ensuite les articles :

if (is_array($rss->items))

   {
   $liste = array_slice($rss->items, 0, $nombre_element);
       
   foreach ($liste as $item ) {

       $title = $item[title];
                $url = $item[link];
       $pubdate = $item[pubdate];
                if ($item[pubdate]=="") {$pubdate = $item[date];}
                $author = $item[author];
       $category = $item[category];
                $description = $item[description];
                $avant = array ("'<img.*?>'si","'<p.*?>'si","'</p>'si","'&.*?;'si","'<br.*?>'si");
                $apres = array (" "," "," ","&.*?;"," ");
                $description = preg_replace($avant,$rapres,$description);
       $date = date("d/m/Y", strtotime($pubdate));
       echo "<li>";
                if ($pubdate!="") { echo '<b>'.$date.'&nbsp;:</b> '; }
                if ($author!="") { echo '<span class="vert">'.$author.'&nbsp;:</span> '; }
                echo '<a href="'.$url.'">'.$title."</a>";
                if ($category!="") { echo " <b>($category)</b>"; }
                if ($description!="") { echo '&nbsp;:<br />'.$description; }
                echo "</li>\n";
       }
        echo "</ul>\n";
   }
}

<

Les lignes

$avant = array ("'<img.*?>'si","'<p.*?>'si","'</p>'si","'&.*?;'si","'<br.*?>'si");
 $apres = array (" "," "," ","&.*?;"," ");
 $description = preg_replace($avant,$rapres,$description);

permettent de supprimer les images, les paragraphes, les retours à la ligne et de corriger le code de certains caractères dans "Description" [5].

L’écriture sous la forme if ($pubdate!="") { echo '<b>'.$date.'&nbsp;:</b> '; } permet d’afficher une information "Date", "Auteur", "Catégorie" ou "Description" uniquement si elle existe.

Utilisation d’easyRSS

Le même principe est appliqué pour l’affichage en utilisant easyRSS ; voici le code du script :

if(($_POST["parseur"])=="easy") {
include('easyrss/easyRSS.inc.php');
if(isset($_POST["adresse"])) {
$url = ($_POST["adresse"]);
if (preg_match("#^http://.([\w./-]+)$#i",$adresse,$ret)) {
$fil = $ret[0];

$rss = new easyRSS();
$rss -> parsefile($fil, 20);

if ($rss -> exist_image()) {
        echo '<table width="100%" border="0"><tr><td width="50%"><h4 align="center"><a href="'.$rss -> get_channel_link().
                '" target="_blank">'.$rss -> get_channel_title()."</a></h4></td>\n<td><center><a href=\""
                .$rss -> get_image_link().'" target="_blank"><img src="'.$rss -> get_image_url().
                '" width="'.$rss -> get_image_width().'" height="'.$rss -> get_image_height().'" border="0" alt="'
                .$rss -> get_image_title()."\"></a></center></td></tr></table>\n"; }
else { echo '<h4 align="center"><a href="'.$rss -> get_channel_link().'" target="_blank">'.$rss -> get_channel_title()."</a></h4>\n"; }

// nombre d'items    
$nbnews = $rss -> get_num_items();
$news_title = $rss -> get_items_title();
$news_link = $rss -> get_items_link();

if($nbnews==0) {echo "<p class=\"red\">L'analyse du fichier ".$fil." ne permet pas d'afficher un fil de syndication. Il ne s'agit pas d'un fichier au format RSS 0.91 ou il contient des erreurs.</p><br />\n"; }
else {
// récupération de l'auteur des articles
$news_author = $rss -> get_items_author();

// récupération des descriptions des articles
$news_description = $rss -> get_items_description();

// on remplace les caractères &lt; et &gt; par < et > ainsi que &quot; par
$search = array ("/&lt;/","/&gt;/","/&quot;/");
$replace = array ('<','>','"');
$news_description=preg_replace($search,$replace,$news_description);

// on redonne un code d'affichage correct à certains caractères spéciaux

// si on supprime les images
$avant = array ("'<img.*?>'si","'<p.*?>'si","'</p>'si","'&.*?;'si","'<br.*?>'si");
$apres = array (" "," "," ","&.*?;"," ");

// si on ne les supprime pas
/** $avant = array ("'<p.*?>'si","'</p>'si","'&.*?;'si");
$apres = array (" "," ","&.*?;"); **/

$news_description = preg_replace($avant,$rapres,$news_description);
$news_date = $rss -> get_items_date();
echo "\n<ul>\n";

for($i = 1; $i <= $nbnews; $i++) { $date[$i]=strftime("%d/%m/%Y", strtotime($news_date[$i]));
        echo '<li>';
        if ($news_date[$i]!="") { echo '<b>'.$date[$i].'&nbsp;:</b> '; }
        if ($news_author[$i]!="") { echo '<span class="vert">'.$news_author[$i].'&nbsp;:</span> '; }
        echo '<a href="'.$news_link[$i].'" target="_blank">'.$news_title[$i].'</a>';
        if ($news_description[$i]!="") { echo "&nbsp;:<br />\n".$news_description[$i]; }
        echo "</li>\n";
}

echo "</ul>";
   
if($rss -> exist_textinput()) {
        echo '<form  method="get" action="'.$rss -> get_textinput_link().'">'.
                $rss -> get_textinput_description().'&nbsp;
                <input type="text" name="'.$rss -> get_textinput_name().
                '"size="10" maxlength="10">&nbsp;<input type="submit" name="Submit"
                value="'.$rss -> get_textinput_title().'">
                </form>'; }
}
}
else {echo "<p class=\"red\">L'adresse indiquée n'est pas valide, essayez à nouveau&nbsp;:</p>\n<br />";}
}
}
?>

La présentation souhaitée est la même qu’avec MagpieRSS. Pour d’autres explications sur le fonctionnement du script vous pouvez vous reporter à l’article Utilisation de la classe easyRSS.


 

 

[1] Ce script a été mis au point pour le site du CYES.

[2] Le code complet à afficher dans la page a déjà été indiqué dans l’article précédent.

[3] Les raccourcis claviers font partie des techniques destinées à faciliter l’accessibilité d’un site pour les personnes handicapées. Ces techniques feront l’objet d’un article spécifique. Vous pouvez consulter sur ce sujet les pages Accessibilité du site et Accessibilité des sites Web.

[4] En cas d’erreur voici le contenu de le note 4 (déjà indiqué dans l’article précédent) :

"En cas de difficulté, il est possible que le fichier ne soit pas conforme. Pour le vérifier, voyez Feed Validator ou RSS Validator.
Vous pouvez également essayer de lire ce fichier avec easyRSS qui accepte mieux certaines erreurs.
".

[5] Ce script a été modifié le 1/04/05 afin d’éviter l’affichage d’espaces insécables &nbsp; dans le champ "Description".




Cliquez ici pour réagir à cet article

Imprimer Imprimer cet article