Affichage d'un flux RSS


Warning: Invalid argument supplied for foreach() in /mnt/114/sda/0/0/christophe.helson/affichage-RSS/index.php5 on line 39

Lemonde.fr propose à ses lecteurs des fils RSS pour recevoir les titres de l'actualité en continu. Un fil RSS est un document qui structure ses données en XML :

<item>
  <title>Un espoir de traitement pour enrayer la maladie de Huntington</title>
  <link>http://www.lemonde.fr/web/article/0,1-0@2-3244,...</link>
  <description>Pour ralentir cette affection ... neuronales d&#39;origine foetale</description>
  <pubDate>Mon, 06 Mar 2006 14:34:23 GMT</pubDate>
  <guid isPermaLink="false"> http://www.lemonde.fr/web/article/0,1-0@2-3244,... </guid>
</item>

On utilise la classe SimpleXML pour convertir le fichier XML en un objet de cette classe :

$alaune = 'http://www.lemonde.fr/rss/sequence/0,2-3208,1-0,0.xml';
$root = @simplexml_load_file($alaune);

On accéde aux sous éléments de l'objet $root avec la notation ->. Ici on affiche le logo Le Monde.fr avec un lien vers la page d'accueil du site :

$imgurl = (string) $root->channel->image->url;
$imgtit = (string) $root->channel->image->title;
$imglink = (string) $root->channel->image->link;
echo "<a href='$imglink'><img src='$imgurl' title='$imgtit' alt='$imgtit' /></a> ";

Enfin on liste les différentes nouvelles avec une boucle foreach qui peut s'utiliser avec des objets de la classe SimpleXML. Dans cet exemple on n'affiche que les 5 premiers éléments.

C'est la balise HTML <dl> (definition list) qui est utilisée pour l'affichage puisqu'elle correspond sémantiquement à une liste de couples (titre/définition).

L'ensemble est ensuite intégré dans une boîte div auquelle on applique un style d'affichage adéquat.

function convertit($chaine){
  $tab_htm = array("&amp;#34;","&amp;#39;");
  $tab_fin = array("\"", "'");
  $chaine = str_replace($tab_htm, $tab_fin, $chaine);
  return $chaine;
}
$i=1;
echo "<dl> ";
foreach($root->channel->item as $actu){
  echo "<dt><a href='";
  echo htmlentities((string)$actu->link, ENT_QUOTES, 'UTF-8');
  echo "'>";
  echo htmlentities((string)$actu->title, ENT_QUOTES, 'UTF-8');
  echo "</a></dt> <dd>";
  $actdes = htmlentities((string)$actu->description, ENT_QUOTES, 'UTF-8');
  echo convertit($actdes);
  echo "</dd>";
  if (++$i>5) break;
}
echo "</dl> ";

NB: les flux RSS sont destinés à être intégrés dans un lecteur RSS pour une utilisation personnelle. L'exemple ci-dessus de réaffichage n'est utilisé que pour la démonstration des possibilités Objet de PHP 5. Pour rediffuser le flux des actualités du Monde, il convient de s'adresser directement à la rédaction du site pour obtenir les autorisations nécessaires.