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)