Créer un flux RSS avec une base de données SQL
Pour créer un flux RSS avec des requêtes SQL, nous utiliserons en exemple le format Wordpress très répandu. Wordpress dispose bien sûr d'un générateur de flux mais le but est didactique et l'exemple pourra servir de base à la réalisation d'un générateur plus personnalisé. Il peut s'appliquer à d'autres bases de données que celle de Wordpress en adaptant le nom des colonnes.
Définition de la table théorique
Les articles contiennent au moins les données suivantes:
- Lien, URL de la page.
- Titre.
- Description, résumé de l'article.
- Date.
- Texte de l'article.
Eventuellement, nom d'auteur, une image.
Avec phpMyAdmin nous avons une vue de la structure des tables de notre base de donnée d'articles de blog.
Ce qui nous intéresse, c'est la table posts qui contient les
billets, si le préfix choisi est blog, le nom sera blog_posts.
La structure contient de nombreuses données que nous n'utiliserons
pas. La chaîne post est utilisée comme préfixe
à la plupart des colonnes, ce sont ainsi les suivantes qui nous intéressent
(nom suivi du type de données):
- post_modified datetime : la date de dernière modification.
- post_title text : le titre.
- post_excerpt text : (extrait) le résumé.
- guid text: l'identifiant unique de la page qui se trouve être aussi le nom du fichier.
- post_content text: le contenu.
L'URL est fabriquée sous Wordpress à partir du titre et de l'adresse du site, mais cela est pris pour créer l'identifiant placé dans guid, il nous suffira donc de reprendre ce dernier pour avoir le lien sur la page.
Mais à défaut de résumé, il faudra reprendra les premières lignes du texte de l'article.
On aura donc la table suivante:
guid
|
post_title
|
post_modified
|
post_content
|
https://www.scriptol.fr/
|
RSS et SQL
|
2008-01-03 17:24:01
|
Créer un flux RSS...
|
...
|
Avec autant de lignes qu'il y a d'articles dans le blog. Cette table servira de point de départ pour définir la requête.
Définition de la requête par un script PHP
Le script comporte les étapes suivantes:
- Connexion au serveur.
- Selection de la base.
- Lecture des articles selon une condition donnée, par exemple les n derniers postés. Le résultat sera dans un tableau.
- Ecriture du fichier XML au format RSS 2.0.
- Ultérieurement, affichage du flux.
La connexion au serveur
Le fonction PHP requiert le nom du serveur, le login utilisateur et un mot de passe, ces données ont permi d'installer Worpress:
$connexion = mysql_connect('mysql5-1', 'user', 'pass')
Le nom du serveur est généralement de la forme mysql... suivi du code de version.
La selection de la base
Le numéro de connexion retourné par la fonction précédente sera utilisé dans chaque transaction avec le serveur.
$result = mysql_select_db('mabase', $connexion);
La valeur retournée est true si la base est trouvée, false sinon.
Lecture des articles
La commande SELECT ... FROM ... WHERE de SQL permet de retourner un ensemble
d'articles selon une condition donnée.
Les arguments sont:
- Les colonnes dont on veut lire le contenu. On peut spécifier une
colonne, une liste de colonnes séparée par une virgule ou
le symbole * pour reprendre les données de toutes les colonnes. Dans
cet exemple nous donnerons la liste des colonnes de la table théorique
donnée précédemment car seuls ces champs nous intéressent.
SELECT guid, post_title, post_modifier, post_content - Le nom de la table est le second paramètre, en l'occurence blog_posts.
SELECT ... FROM blog_posts - La condition dans notre exemple, ce sont les 10 derniers articles. On ne donnera pas d'autre condition pour l'instant, la clause WHERE sera omise. Au contraire, on classera les articles par date en ordre descendant et on limite le nombre à 10.
- La clause ORDER BY permet de classer les articles par date s'associe à
un nombre maximal. Et le paramètre DESC indique que l'ordre est inversé,
donc à partir de l'article le plus récent plutôt qu'à
partir du premier article.
SELECT ... FROM ... ORDER BY post_modified DESC - Le nombre maximal d'article est donné par la clause LIMIT.
SELECT ... FROM ... ORDER BY post_modified DESC LIMIT 10
Le code PHP sera donc le suivant:
$command = "SELECT guid, post_title, post_modified, post_content FROM blog_posts ORDER BY post_modified DESC LIMIT 10"; $items = mysql_query($command, $connexion);
Nous avons maintenant le contenu des articles dans un tableau à deux dimensions, au premier niveau chaque ligne de la table, et au second niveau les données de chaque colonne.
[0]=> ligne 1 [0]=> guid [1]=> post_title [2]=> post_modified [3]=> post_content [1]=> ligne 2 [0]=> guid [1]=> etc...
Il reste à extraire les données du tableau.
Utilisation des données de la base
En fait l'appel à la fonction mysql_query retourne une ressource, un identifieur correspondant aux données trouvées, il reste à extraire les données ce que l'on fera avec la fonction PHP mysql_fetch_assoc.
Cette fonction retourne une ligne du tableau et dans laquelle les valeurs
sont associées à des clés qui sont fait le nom des colonnes.
On l'utilise de façon itérative pour obtenir chaque ligne de
la table.
while($article = mysql_fetch_assoc($items)) { $url= $article["guid"]; $title= $article["post_title"]; $date= $article["post_date"]; $content= $article["post_content"]; }
Nous avons récupéré les données des articles et nous avons maintenant ce qu'il faut pour créer le fichier XML du flux.
Créer un fichier RSS sous PHP 5
Avec la librairie RSS de l'éditeur RSS ARA, créer un fichier RSS peut se faire avec quelques fonctions:
ARAFeed($title, $url, $desc, $date)
Crée un objet flux. Le titre est le nom du blog, il est suivi par son URL, une description et la date du flux.
ARAItem($title, $url, $content, $date)
Ajoute un élement au flux avec les données extraites précédemment.
save($nomfichier)
Enregistre le flux créé dans un fichier.
Le code complet de génération du flux sera donc le suivant:
$rss = ARAItem($title, $url, $content, $date); while($article = mysql_fetch_assoc($items)) { $url= $article["guid"]; $title= $article["post_title"]; $date= $article["post_date"]; $content= $article["post_content"]; $rss->ARAItem($title, $url, $content, $date) } $rss->save($nomfichier),
Ce code étant complété par les fonctions d'accès à la base de données, ce que l'on verra dans le source ci-dessous.
Afficher le flux
On peut voir directement le flux généré en donnant son URL au navigateur.
Le lecteur RSS peut être utilisé pour affiché le flux créé dans une page Web.
Télécharger le code source
Tutoriel RSS SQL et Wordpress, affichage de la date
Gaillots
$rss = '<?xml version="1.0" encoding="UTF-8" ?>'."\n"[; c'est les l'encodage des titres des entrées qui bug. - Deuxième chose, c'est les heures qui reste à 2h00 et ça avec n'importe quelle heure d'entrée. Si vous avez des idées ou si il vous faut plus d'information. :) Merci d'avance ! ^^
webmaster
Gaillots
webmaster
$rss .= "<pubDate>$date"." GMT</pubDate>\n";Le script fonctionne sous tous les navigateurs normalement.
Gaillots