Circum Blog

Circum Net – IT – Conseils pratiques

Lecture d’un flux RSS

PHP, Programmation, XML

Exploiter un flux RSS à partir d’un script PHP est une tâche relativement aisée du fait que depuis la version 5 du langage PHP on dispose de la librairie SimpleXML.

SimpleXML est un module standard de PHP qui permet la lecture d’un document XML, de ses éléments et de leurs attributs en utilisant les méthodes d’accès des tableaux et des objets.

Et puisque RSS s’appuie sur une structure XML basique, la liaison entre les deux se fait naturellement. En effet, avec le format RSS la description d’un site ou d’un contenu est réalisée via un set d’une dizaines de balises différentes (<channel>, <item>, <title>, <description> …).

Ossature d’un flux RSS

<rss version="2.0">
<channel>
    <title>...</title>
    <link>...</link>
    <description></description>
    <item>
        <title>...</title>
        <link>...</link>
        <description>...</description>
    </item>
    <item>
        <title>...</title>
        <link>...</link>
        <description>...</description>
    </item>
</channel>
</rss>

Du fait de cette simplicité, il n’est pas compliqué d’envisager de manipuler par programmation le contenu d’un flux RSS. Voyons concrètement ce qu’il en est.

Lecture d’un flux RSS avec SimpleXML

<?php
$root=simplexml_load_file("http://site.org/news.rss");
foreach($root->channel->item as $item)
    {
    echo "News:" . utf8_decode($item->title) . "<br/>";
    }
?>

Ce code donne pour résultat l’affichage des titres des éléments d’information du flux RSS http://www.site.org/news.rss

Explication “ligne par ligne”

Pour charger un document XML avec SimpleXML, il suffit de lancer la fonction ‘simplexml_load_file()’. Celle-ci prend comme argument le chemin d’accès du fichier XML et retourne un objet de la classe ‘simplexml_element’. Ce dernier représente l’élément racine du document XML pris en compte.

$root = simplexml_load_file(“http://www.site.org/news.rss”);

Lorsqu’il s’agit d’un document XML simple, pour accéder à un noeud à partir de la racine il suffit de l’appeler par son nom. Dans le cas qui nous occupe, on veut se placer au niveau des éléments “item”. La structure de contrôle ‘foreach’ permet de parcourir aisément tous les éléments ‘item’ du fichier RSS et d’en traiter les composants.

foreach($root->channel->item as $item)

Une fois dans la boucle, ile ne reste plus qu’à demander l’affichage du titre de l’item traité ($item->title). La fonction “utf8_decode” s’assurant de la bonne conversion des caractères accentués ou spéciaux.

echo “News : ” . utf8_decode($item->title) . “<br/>”;

Conversion des jeux de caractères

La plupart des modules de manipulation XML traitent les données qu’ils fournissent et qu’ils réceptionnent selon le codage international UTF-8. Si des caractères accentués ou spéciaux doivent être utilisés (codage ISO-8859-1), il faudra avoir recours aux fonctions PHP ‘utf8_encode’ et ‘utf8_decode’ pour que la conversion des chaînes de caractères se passe correctement.

– utf8_encode fait passer une chaîne d’iso-8859-1 à utf-8
– utf8_decode fait passer une chaîne de utf-8 à iso-8859-1