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)