Afficher un flux RSS dans une page Web
Tags: (X)HTML/CSS, PHP, XML
Un petit script tout simple en PHP5 que je viens d’implémenter pour afficher un flux externe sur la page d’accueil de mon site et qui peut être utile à d’autres. Ce post n’a pas d’autre objectif que de proposer un retour d’expérience et de partager les difficultés et les solutions trouvées en cours de route.
Le besoin :
Afficher un flux RSS externe, celui de mon blog (Feedburner) sur une page Web, celle de 33h33.
La solution :
A partir du script proposé par Jarodxxx sur son site, une mine que je vous invite à visiter très régulièrement, voici les quelques ajustements apportés pour coller à mon besoin :
Deux fichiers sont utilisés :
index.php5 qui va afficher le flux
affiche_rss.php5 qui récupère, parse et formate le flux en question.
1/ Affiche_rss.php5 :
Je ne souhaitais pas afficher la description mais seulement le titre et la date
Affichage de la date :
On la récupère dans le flux via pubDate sauf que la date est affichée au format EN.
Pour l’afficher en français, j’ai utilisé ceci :
$date=$value->pubDate;
$date2=date('d/m/Y H:i:s', strtotime($date));
Affichage du titre et encodage :
Pour l’affichage du titre, seul petit problème, l’encodage : la fonction utilisée utf8_decode gère bien l’encodage des accents mais transforme les apostrophes en points d’interrogation, c’est ballot.
Pour pallier à ce problème, j’ai utilisé la fonction str_replace() en remplacement de utf8_decode(), en demandant de remplacer les « ? » par des « ‘ » dans chaque titre retourné :
str_replace('?',''',$value->title)
Fichier affiche_rss.php5 complet :
/**********************************Nécessite PHP5Paramètres de configuration du script/*********************************/$flux = 'http://feeds2.feedburner.com/non du flux?format=xml';$nb_items = 3; // nombre d'éléments à afficher/*********************************/// On récupère le flux externe sous la forme d'un objet$xml = simplexml_load_file($flux);$i = 0;foreach ( $xml->channel->item as $value){// On convertit la date du flux (pudDate) au format Fr< $date=$value->pubDate;$date2=date("d/m/Y H:i:s", strtotime($date));if ( $i < $nb_items ){echo "".str_replace("?","'",$value->title)."";echo "";}$i++;}?>
2/ index.php5
Dans le fichier “réceptacle” si j’ose dire, index.php5, il faut bien mettre :
<?php echo "<?xml version=\"1.0\" encoding=\"utf-8\"?>" ?>
Et encoder ses caractères spéciaux si ce n’est déjà fait (é -> é). Cela fonctionnait très bien sur tous les navigateurs SAUF IE7, qui a affiché correctement le tout après avoir précisé dans les balises META :
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
Que dire de plus à part que le fichier affiche_rss.php5 est inclus de façon on ne peut plus classique dans le fichier index :
< ?php $inc_file = "affiche_rss.php5";
if (file_exists($inc_file)) { include($inc_file); } ?>
Les styles sont gérés tout aussi classiquement dans la feuille de style générale.
Le résultat : www.33h33.com
Voilà, il y a plein de façon d’afficher un flux RSS, notamment en passant par des parsers (par exemple MagpieRSS ou SimplePie pour le PHP) et il existe pleins de tutos en ligne très bien faits qui vous apprennent à le faire pas à pas. Mon besoin était tout simple, et je voulais une solution simple, celle-ci me convient bien… pour l’instant.
Sur le même thème :
- + Bout de code : squelette page xhtml
Tags : (X)HTML/CSS - + Bout de code : lien dans une nouvelle fenêtre
Tags : (X)HTML/CSS

Envie de réagir ?