• Chargement du fichier au format XML



• Récupération des informations générales



• Récupération des 10 dernières actualités



• Récupération de la valeur des attributs



• Mise en oeuvre

Comment insérer un flux RSS sur son site internet ?

XML est un standard d'échange de contenu Web. Les flux XML sont des fichiers structurés au format texte utilisés entre autre dans les flux RSS.

Les flux RSS permettent de diffuser simplement de nombreux contenus, textuels (articles, nouveautés, promotions, mails, ...) ou multi-média (radio, musique, vidéo, ...) sur tous les supports de l'information (PC, téléphone portable, Pocket PC, iPod, écran TFT, ...) à partir de sites Internet.
Plus d'informations sur cette page : Mais qu'est ce donc un Flux RSS ?

Il existe toute une série de logiciels qui permettent de les utiliser et/ou de les lire. Mais ce qui nous intéresse plus particulièrement ici dans ce tutorial est d'intégrer des flux RSS dans une page web.

Dans ce tutorial nous utiliserons le fichier RSS du résumé des articles du forum du site. Pour ce faire nous utiliserons le flux RSS suivant :
http://www.ville-arnieressuriton.com/forum/rss/digest/rss.xml
Remarque : Vous pouvez l'enregistrer en local pour faire vos tests.



 Chargement du fichier au format XML    Haut de la page

Une nouveauté très intéressante de PHP 5 est la fonction simpleXML. simpleXML permet d'utiliser facilement les fichiers au format XML car elle est très facile à mettre en oeuvre. Son inconvénient est qu'elle n'est pas très douce avec les ressources du serveur d'hébergement. En effet, elle va chercher les informations à chaque chargement de la page, ce qui pourra provoquer des ralentissements de chargement de la page aux heures d'affluence.

Avec simpleXML, pour charger un flux RSS difficille de faire plus simple :

$LecteurRSS = simplexml_load_file(' \
http://www.ville-arnieressuriton.com/forum/rss/digest/rss.xml');



 Récupération des informations générales    Haut de la page

Tout d'abord dans tous flux RSS, il est existe des informations générales telles ques le titre du fil RSS, la description, la langue, la date de dernière modification, etc ...
Il peut être intéressant dans un premier temps de récupérer ces informations par exemple le titre, la description et l'url donnés du fil RSS.

Dans notre flux RSS, nous avons les informations générales suivantes :

<channel>
<title>Forum de la commune d'Arnières sur Iton - Résumé</title>
<link>http://www.ville-arnieressuriton.com/forum/</link>
.....
</channel>


On remarque que l'information relative au titre du flux est contenu dans la balise <title> qui elle-même est contenue dans la balise <channel>.

En conséquence pour récupérer le contenu de cette balise <title>, la syntaxe est :

$LecteurRSS->channel->title;


Pour récupérer les deux balises <titre> et <lien> de notre flux RSS, on peut utiliser la syntaxe suivante :

$titre = $LecteurRSS->channel->title;
$link = $LecteurRSS->channel->link;



 Récupération des 10 dernières actualités    Haut de la page

Dans notre flux RSS chaque actualité est représentée par la balise <item> , qui contient elle-même d'autres balises (<title>, <author>, <pubDate>, <link>, <description>, ...).

Voici un exemple d'un flux RSS d'actualités :

<item>
<title>Livre : La Terre de Tous les Records</title>
<link>http://www.ville-arnieressuriton.com/forum/developpement-durable/topic117.html</link>
<pubDate>Sun, 02 Nov 2008 17:58:22 GMT</pubDate>
<description>Collection : Nature et écologie
Parution : 25/09/2008
Nb de pages : 240 pages
EAN13 : 9782732437804</description>
</item>
<item>
<title>Site : Esprit Cabane/title>
<link>http://www.ville-arnieressuriton.com/forum/developpement-durable/topic119.html</link>
<pubDate>Sun, 03 Nov 2008 13:38:22 GMT</pubDate>
<description>Site avec pleins d'idées créatives et écologiques, qui donne des infos, des astuces...
</description>
</item>


Avec simpleXML, on peut facilement récupérer les informations contenues dans ces balises en utilisant la syntaxe suivante :

$LecteurRSS->channel->item->title;

Mais de cette façon, nous ne récupérons que la dernière actualité postée.

Ainsi, si une balise XML est répétée, vous pouvez y accéder en utilisant les tableaux de PHP pour cette valeur. Comme la balise <item> est répétée, et que la première valeur d'un tableau en PHP commence à 0, l'item de la première actualité est item[0] , puis item[1] etc...

Pour récupérer les valeurs qui nous intéressent pour la première actualité nous avons donc :

$LecteurRSS->channel->item[0]->title;
$LecteurRSS->channel->item[0]->link;

Puis pour la seconde actualité :

$LecteurRSS->channel->item[1]->title;
$LecteurRSS->channel->item[1]->link;

etc ...

Pour afficher les 10 dernières actualités, nous utiliserons la fonction foreach de PHP.

$objets=array('title','link');
$i=0;

foreach ($LecteurRSS->channel->item as $item) {
   foreach($objets as $objet) {
      $resultat[$i][$objet] = $item->$objet;
   }
   $i++;
   if ($i > 10) {
      break;
   }
}



 Récupération de la valeur des attributs    Haut de la page

Nous pouvons également avoir besoin des attributs de certaines balises.
Par exemple pour la balise suivante :

<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:content="http://purl.org/rss/1.0/modules/content/"
xmlns:atom="http://www.w3.org/2005/Atom">


Pour récupérer la valeur de l'attribut version de la balise <rss>, il faut utiliser :

$LecteurRSS->rss['version'];



 Mise en oeuvre    Haut de la page

Voici l'intégralité du code source permettant l'affichage des 10 derniéres actualités d'un flux RSS.
Dans ce code PHP / SimpleXML, nous sélectionnnons les items <title>, <link>, <description> et <pubDate> du flux RSS. L'affichage des items <title> étant triées par la date de publication <pubDate> décroissante.

Fichier : readFeed.php

function readFeed($url,$objets,$nb_items=10) {
   $i=0;
   $LecteurRSS = simplexml_load_file($url);
   foreach ($LecteurRSS->channel->item as $item) {
      foreach($objets as $objet) {
         $resultat[$i][$objet] = $item->$objet;
      }
      $nb_items++;
      if ($nb_items > 10) {
         break;
      }
   }
   return $resultat;
}

function compareDate($a, $b)
{
   if ($a['pubDate'] == $b['pubDate']) {
      return 0;
   }
   return (strtotime($a['pubDate']) > strtotime($b['pubDate'])) ? -1 : 1;
}

Appel de la fonction dans la page HTML affichant le flux RSS s'effectuant de la manière suivante :

<head>
.......
<?php require_once('readFeed.php');?>
.......
<?php
// Lecure 20 dernières actualités
// <title> Titre de l'actualité
// <link> URL dela page actualité
// <description> Description de l'actualité
// <pubDate> Date de publication
// d'un Flux RSS
$rss = readFeed(
'URL du flux RSS',
array('title','link','description','pubDate'),20);
// Trie par date décroissante
usort ($rss, 'compareDate');
?>
.......
</head>
<body>
.......
<?php
// Affichage
foreach($rss as $tab) {
echo $tab['title'];
echo $tab['link'];
echo $tab['description'];
echo $tab['pubDate'];
}
?>
.......
</body>