Créer un flux RSS à partir d'une base MySQL

Voici le premier billet d’une série de quatre sur la création de flux RSS.
– Création d’un flux simple à partir d’une base MySQL
– Création d’un flux paramétré
– Le stylage des flux RSS
– Les raffinements

Voici le premier, en espérant qu’il répondra à certaines questions. Pour plus de détails sur certaines parties, les commentaires sont là pour ca !

Problème : On veut créer un flux RSS à partir d’une base MySQL d’articles.

La création d’un flux RSS se fait par :
– déclaration du type xml dans l’en-tête du fichier.
– construction de l’en-tête du contenu RSS
– construction des items RSS à partir des résultats de la requête mysql

Malgré cet ordre « logique », on commencera par construire un tableau des items, afin de récupérer des informations pour l’en-tête.

Pour la syntaxe RSS, je renvoie à la traduction de la documentation officielle RSS 2.0.

On suppose que la base MySQL « articles » est constituée de : id, timestamp,category,titre,url,contenu,auteur

Sélection des articles et préparation des items RSS

// inclure ici le script de connexion a la base
$query = mysql_query("SELECT timestamp,category,titre,contenu,auteur
FROM articles ORDER BY date DESC LIMIT 20");
while ($row = mysql_fetch_assoc($query)) { $items[] = $row; }

On selectionne les champs qui seront présents dans le RSS,
triés par ordre chronologique inversé pour avoir le plus récent en premier,
et on décide de limiter à 20 le nombre de billets affichés

Le tableau $items est donc :

$items =
 array(
  [0] => array(
   'timestamp' => 1548795,
   'category' => 'actualite du site',
   'titre' => 'Nouvelle charte graphique !',
   'url' => 'http://www....com/actu/monbillet.htm',
   'contenu' => '[...]',
   'auteur' => 'webmestre'),
  [1] => array ....

La date de l’item le plus récent nous donne la « date de fraicheur » du flux.

$last_modified = date('r',$items[0]['timestamp']);

En-tête du flux RSS

On a les infos nécessaires, construisons le flux :

// ici on precise en header la date de derniere modification
header('Last-Modified: ' . $last_modified);
// et on spécifie UTF-8 pour une compatibilité améliorée
header('Content-Type: text/xml; charset="UTF-8"', true);
echo '<?xml version="1.0" encoding="UTF-8" ?>'."n";
echo '<rss version="2.0">
 <channel>
  <generator>mon-site-a-caractere-informatif</generator>
  <title>Derniers billets sur MSACI !</title>
  <link>http://www.mon-site-a-caractere-informatif.com</link>
  <description>Billets passionnants traitant de mon site</description>
  <language>fr</language>
  <lastbuilddate>'. $last_modified . '</lastbuilddate>
  <ttl>60</ttl>'."nn";

On a envoye l’en-tête du fichier RSS, avec les champs essentiels.
La variable $last_modified (date de l’item le plus récent), précise la « date de fraicheur » du flux entier.

Envoi des items

foreach($items as $item)
 {
  echo '
 <item>
  <title>'.$item['title'].'</title>
  <link>'.$item['url'].'</link>
  <guid isPermaLink="true">'.$item['url'].'</guid>
  <description>'.$item['contenu'].'</description>
  <pubDate>'.date('r',$item['date']).'</pubDate>
  <author>'.$item['auteur'].'</author>
 </item>'; "; }

Au cas ou vos contenus ne sont pas en UTF-8, il est bien sur indispensable de les convertir, par exemple :

  <title>'.utf8_encode($item['title']).'</title>
  <description>'.utf8_encode($item['contenu']).'</description>

Et on termine le fichier

echo '</channel>' . "n" . '</rss>' . "n";

Telecharger le fichier php : Creation de flux RSS (renommer en .php)

Laisser un commentaire