Création d'un flux rss dynamique

Attention, depuis PHP 5.5.0, certaines extensions SQL sans doute utilisées dans ce tutoriel peuvent être obsolètes et seront supprimées dans le futur, vous devez donc adapter les codes! Exemples ici.

Histoire d'étoffer un petit peut notre site dynamique, nous allons créer un flux RSS dynamique. Si vous ne savez pas à quoi ça sert ni comment on le conçoit, je vous invite à faire une petite lecture du tutoriel suivant : Créer un flux RSS. Pour info, les bases sont quasiment les mêmes que celles de la création d'un sitemap dynamique.

Nous allons donc créer un nouveau fichier (vide) que l'on va nommer rss.php. Comme pour le sitemap, il faut utiliser une instruction pour modifier le message HTPP:

header("Content-type: application/xml");

Ensuite pour indiquer l'url exacte des pages du site dans le flux rss, on utilise une petite fonction qui récupère le nom de domaine :

function url_actuelle()
{
     return "http://" . $_SERVER["SERVER_NAME"];
}
$url = (url_actuelle());

Il nous faut ensuite créer l'entête du flux rss :

echo "<?xml version=\"1.0\" encoding=\"iso-8859-1\" ?>\n
<rss version=\"2.0\">\n
<channel>\n
<title>Exemple d'un site dynamique</title>\n
<link>$url</link>\n
<description>Exemple d'un site dynamique.</description>\n
<language>fr</language>\n\n"
;

Pour le reste, c'est comme pour le sitemap, on va chercher le titre, la description, l'identifiant et la date.

$result = mysql_query("SELECT id, titre, description, date FROM CONTENU ORDER BY id ASC 
LIMIT 20"
);   while($affiche = mysql_fetch_array($result)) { //On convertit la date en français $date = date("d/m/Y",strtotime($affiche['date'])); //On affiche les flux echo '<item>
<title>'
.$affiche['titre'].'</title>
<link>'
.$url.'/page.php?id='.$affiche['id'].'</link>
<description><![CDATA[Article du '
.$date.'<br/>'.$affiche['description'].']]></description>
</item>'
; }

Comme vous le savez sans doute, la date est enregistré au format anglais du style (2010/01/25) et par conséquence, n'est pas utilisable pour être inséré au bon format dans la la balise <pubdate>**</pubdate> (Si vous disposez d'une astuce pour transormer une date anglaise au bon format pour l'utisation d'un fichier rss, n'hésitez pas à la poster dans les commentaires ). Qu'à cela ne tienne, nous allons tout de même afficher la date en bon Français dans la description du flux rss ... histoire de...!

strtotime : Permet de transformer un texte anglais en timestamp

$date = date("d/m/Y",strtotime($affiche['date']));

Ainsi une date enregistré au format 2010/01/25 en base de données, va être modifié au format 25/02/2010.

Le fichier rss.php au complet :

<?php
// On indique que c'est du xml
header("Content-type: application/xml");      
 
//fonction pour recuperer l'url du site
function url_actuelle()
{
     return "http://" . $_SERVER["SERVER_NAME"];
}
$url = (url_actuelle());
//Entête du flux rss
echo "<?xml version=\"1.0\" encoding=\"iso-8859-1\" ?>\n
<rss version=\"2.0\">\n
<channel>\n
<title>Exemple d'un site dynamique</title>\n
<link>$url</link>\n
<description>Exemple d'un site dynamique.</description>\n
<language>fr</language>\n\n"
;   // on se connecte à la base de données include('connexion_bd.php');   mysql_connect("$nom_du_serveur","$nom_utilisateur","$passe"); mysql_select_db("$nom_de_la_base") or die('Impossible de s&eacute;lectionner une base de donn&eacute;e. Assurez vous d\'avoir correctement remplit les donn&eacute;es du fichier connexion_bd.php.');   //On selectionne les données $result = mysql_query("SELECT id, titre, description, date FROM CONTENU ORDER BY id ASC
LIMIT 20"
);   while($affiche = mysql_fetch_array($result)) { //On convertit la date en français $date = date("d/m/Y",strtotime($affiche['date'])); //On affiche les flux echo '<item>
<title>'
.$affiche['titre'].'</title>
<link>'
.$url.'/page.php?id='.$affiche['id'].'</link>
<description><![CDATA[Article du '
.$date.'<br/>'.$affiche['description'].']]>
</description>
</item>'
; } // Fermeture de la connexion à la base de données mysql_close(); //On ferme le flux rss echo "</channel>\n</rss>"; ?>


Voir/déposer un commentaire (0) | Signaler un problème