Contenu | Recherche | Plan du site | Accessibilité | Contact

Documentation

Coding - XML et syndication RSS

Introduction aux flux RSS

[ Feed ] RSS (Really Simply Syndication) est une méthode simple et efficace pour accéder aux sources d'information sur le web, c'est un format de syndication de contenu Web. Elle permet aux sites web et aux webblog de proposer leur contenu de manière simplifiée. C'est un fichier XML dynamique dont votre lecteur RSS affiche le contenu qui est mis à jour en permanence. Posséder un flux RSS sur un site permet aux visiteurs intéressés d'être informés dès qu'il y aura du nouveau. Pour lire un flux il existe des lecteurs de flux RSS, tels que Liferea. Avec Firefox 2.0 un icône s'affiche dans la barre d'adresse, il suffit alors de cliquer pour s'inscrire au marque-page dynamique. Vous pouvez aussi utiliser un client de messagerie comme Thunderbird.

Créer un flux RSS 2.0

Nous vous proposons de commencer par créer un fichier nommé rss.xml que vous pouvez placer à la racine de votre site, c'est un simple fichier au format XML qui contiendra les flux. Vous pouvez facilement créer ce fichier avec votre éditeur de texte préféré. Il est bon de savoir qu'il existe des éditeurs de texte tels que Geany, Bluefish, ou Gedit, fournissant la colorisation syntaxique des documents XML

La première ligne du fichier se nomme l'en-tête, les fichiers RSS doivent être conformes à la spécification XML 1.0. Il faut aussi spécifier le jeu de caractères à utiliser, pour un site en français, ISO-8859-1 ou UTF-8. Ensuite il y a l'élément <rss>, avec un attribut version qui est obligatoire pour spécifier la version de RSS. Après c'est l'élément unique <channel>, qui contient des métadonnées à propos du channel et de ses contenus:

<?xml version="1.0" encoding="iso-8859-1" ?>
<rss version="2.0">
    <channel>
    <title>Libordux RSS news</title>
    <link>http://www.libordux.org/</link>
    <description>Flux d'actualités du site web de Libordux</description>
    
        <item>Les items du channel se mettent ici</item>
    
    </channel>
</rss>

Les éléments pouvant se trouver dans la balise <channel>:

<title> - Titre.
<link> - URL du site contenant.
<description> - Description.
<language> - La langue.
<copyright> - Le copyright.
<managingEditor> - Mail de la personne responsable du contenu.
<webMaster> - Mail du webmaster.
<pubDate> - Date de publication.
<lastBuildDate> - Date de la dernière publication.
<category> - Catégorie à laquelle le channel appartient.
<generator> - Programme utilisé pour générer.
<docs> - Lien vers la documentation du format utilisé dans le flux.
<cloud> - S'enregistrer pour être notifié des modifications.
<ttl> - Time to live, avant le prochain rafraîchissement.
<image> - Image affichée avec le channel.
<rating> - Note PICS.
<textInput> - Pour ajouter une zone de saisie de texte.
<skipHours> - L'heures que les agrégateurs peuvent ignorer.
<skipDays> - Les jours que les agrégateurs peuvent ignorer.

Pour finir, un fichier .xml basique, il faut des items. Un channel peut contenir un nombre indéfini d'items. Chaque item répresente un article, ou une news, et peut avoir notamment un titre, une description, un lien vers l'article en question, une date de publication, etc.

<item>
    <title>Les droits sous Linux</title>
    <link>http://www.example.org/</link>
    <guid isPermaLink="true">http://www.example.org/about/</guid>
    <pubDate>Fri, 15 Jan 2006 12:00:00 GMT</pubDate>
    <description>
    Les droits unix sont un moyen de...
    </description>
</item>

Les éléments pouvant se trouver dans la balise <item>:

<title> - Le titre.
<link> - l'URL de la page ou de l'article.
<description> - Description.
<author> - Mail de l'auteur.
<category> - Catégorie à laquelle de l'item.
<comments> - Lien vers une page de commentaires à propos de l'item.
<enclosure> - Objet media attaché à l'item.
<guid> - Texte qui identifie de manière unique cet item.
<pubDate> - Date de publication.
<source> - Channel auquel l'item appartient.

Lier des pages à un flux RSS

Pour lier une page à votre flux RSS, il suffit d'ajouter un lien vers le fichier rss.xml préalablement créé. Ce lien se met entre les balises <head></head> à la(les) page(s) sur laquelle (lesquelles) vous voulez que votre flux soit disponible:

<link rel="alternate" type="application/rss xml" href="rss.xml">

Pour donner un titre personnalisé au flux, lors de l'inscription (quand le client clic sur l'îcon), il suffit de rajouter lélément <title> dans votre lien:

<link rel="alternate" type="application/rss xml" title="libordux.org RSS News" href="rss.xml">

[Valid RSS] Quand vous avez terminé votre flux RSS, vous pouvez le valider, afin de pouvoir afficher ce logo et de vérifier la comformité de votre code. A noter que les flux RSS sont référencés par les moteurs de recherche. Une fois inscrit les flux se remet à jour à chaque démarrage ou redémarage du navigateur web de l'utilisateur.

Afficher des flux RSS 2.0 avec PHP

On peut créer un petit script PHP, avec une fonction qui se chargera de scruter le fichier .xml pour en extraire les informations que l'on veut. Dans notre cas nous afficherons le titre title, le lien vers la page ou l'article link, la déscription description, et la date de publication pubDate. La fonction se nomme readrss.

Vous pouvez recopier le code directement dans une de vos pages ou créer un nouveau fichier, que vous appelerez ensuite crâce à la fonction include de PHP. Vous pourez ajouter un peu de style CSS pour une meilleure présentation:

<?php
function readrss($fichier,$objets) {
    if($chaine = @implode("",@file($fichier))) {
        $tmp = preg_split("/<\/index.php?"."item".">/",$chaine);
        for($i=1;$i<sizeof($tmp)-1;$i =2)
        foreach($objets as $objet) {
            $tmp2 = preg_split("/<\/index.php?".$objet.">/",$tmp[$i]);
            $resultat[$i-1][] = @$tmp2[1];
        }
        return $resultat;
    }
}
$rss = readrss("rss.xml",array("title","link","description","pubDate"));
foreach($rss as $tab) {
    echo '<div><p><tt>'.$tab[3].'</tt><br />
    Post: <strong> '.$tab[0].'</strong><br />
    '.$tab[2].' <a href="'.$tab[1].'">Suite...</a>
    </p></div>';
}
?>