Lire un flux RSS avec PHP 5 et SimpleXML
Dans le cas où vous souhaiteriez réaliser votre propre agrégateur de flux RSS en PHP 5 objet, une méthode très simple s'offre à vous, grâce à l'extension SimpleXML. Cette extension permet de naviguer très simplement dans vos fichiers XML, dont un flux RSS fait partie.
Tout d'abord, petit rappel de la structure d'un flux RSS :
<rss version="2.0"&g <channel> <title>Jonathan Petitcolas</title> <description>Les fantasques tribulations d'un geek déluré - Flux RSS</description> <lastBuildDate>Wed, 27 Sep. 2008 00:30:30 -0700</lastBuildDate> <link>http://www.jonathan-petitcolas.com</link> <item> <title>Mon dernier article</title> <description>Un dernier article parlant d'un flux RSS</description> <pubDate>Wed, 27 Sep. 2008 00:30:30 -0700</pubDate> <link>http://www.jonathan-petitcolas.com/</link> </item> </channel> </rss>
Comme on peut le constater, le fichier est relativement simple. Toutes les news d'un site sont dans des balises item. Il vous suffit donc de les récupérer, et de les parcourir. Au choix, soit vous pouvez utiliser des expressions régulières (solution très bourrine, mais qui fonctionnera), soit on utilise SimpleXML, une extension disponible depuis PHP 5 qui vous permettra de naviguer très simplement dans n'importe quel fichier XML.
Tout d'abord, chargeons notre fichier XML.
$xml = simplexml_load_file("http://newsrss.bbc.co.uk/rss/newsonline_uk_edition/world/rss.xml");
Une fois celui-ci chargé, nous pourrions afficher un print_r($xml); pour revoir la structure de notre fichier, telle que je l'ai écrite ci-dessus. Mais, nous ne voulons que naviguer parmi nos éléments. Pour ce faire, deux méthodes.
Soit on passe uniquement par des objets PHP crées automatiquement du fichier XML. Cette méthode, très simple et ne nécessitant aucune autre connaissance, a cependant le mauvais goût d'occuper pas mal de mémoire (on stocke vraiment TOUT). Par exemple, si on veut atteindre le titre du premier article :
echo $xml->item[0]->title;
L'autre méthode, un peu plus en finesse, nous permettra de libérer la variable $xml au profit d'une variable à l'empreinte mémoire plus faible, ne contenant que les balises qui nous intéressent. Pour ce faire, il faudra par contre des notions de X-Path. Pour ceux qui ne connaîtraient pas ce langage, sachez que pour récupérer tous les éléments item de notre fichier, il suffira d'utiliser l'instruction //item.
On peut alors afficher simplement les différents titres de nos news :
echo '<ul>';
foreach($xml->xpath('//item') as $item)
{
echo '<li>'.$item->title.'</li>';
}
echo '</ul>';
Et voilà ! Vous savez à présent comment parser très simplement un flux RSS avec SimpleXML. Libre à vous de recoder le nouveau NetVibes ! :p
