Créer des flux RSS facilement et rapidement
Ce tutoriel présente une manière simple, rapide et efficace de concevoir des flux RSS au moyen d'une classe PHP5. Afin de rendre ce cours moins théorique, nous partirons d'un exemple pratique et concret. Nous simulerons la génération d'un flux RSS d'un module d'actualités issues d'une base de données. Nous utiliserons une base de données MySQL mais il revient à vous de l'adapter à vos besoins si votre application repose sur un autre SGBDR.
Pré-requis de base
Pour cet exemple, nous estimerons que vous maîtrisez les bases essentielles suivantes :
- Création d'une base / table de données
- Utilisation de l'ordre SELECT de base
- Connaissances minimales de la programmation orientée objet
La maîtrise des bases de la programmation orientée objet est essentielle pour suivre ce cours puisque tout reposera sur la manipulation d'objet. En effet, nous implémenterons un package de classes qui nous permettront de concevoir le flux RSS. N'allons pas trop vite et définissons d'abord ce qu'est un flux RSS.
Qu'est-ce-qu'un flux RSS ?
RSS est l'acronyme de « Really Simple Syndication ». Il s'agit d'un format standard d'échange de données reposant sur la technologie XML qui permet de structurer un contenu au moyen d'un balisage de l'information. Ainsi, cela permet de donner du sens au contenu syndiqué grâce aux balises XML adéquates mais également de pouvoir le stocker en brut et sans mise en forme particulière. L'avantage de ça est bien entendu de pouvoir le porter sur un support complètement différent que son support original.
Le package de classes RSSFeed - OpenSource
Tout notre flux RSS sera construit à partir d'un package de classes écrites en PHP5. Pourquoi donc utiliser de tels outils ? Il y'a plusieurs raisons à implémenter des objets pour construire notre flux.
La première et certainement la plus évidente est de se rendre complètement indépendant de la technologie XML. L'utilisation des objets RSSFeed et RSSFeedtem permettent d'abstraire complètement la couche XML. De ce fait, nous n'aurons pas à nous préoccupper de la syntaxe d'un fichier XML RSS.
Le seconde avantage concerne le code produit. En utilisant une approche orientée objet, le code PHP sera structuré et d'une longueur réduite. Si une maintenance évolutive est à prévoir dans le code, alors elle pourra être menée sans difficulté.
Notez au passage que cette API gère l'intégralité des balises que l'on peut trouver dans un flux RSS. Ainsi tous les types de flux RSS sont possibles, c'est-à-dire allant du plus minimaliste au plus complexe possible.
Construction du schéma de la base de données
Il est temps maintenant de s'intéresser au schéma de la base de données. Notre flux RSS final contiendra les informations des actualités présentes dans la base de données. Nous aurons donc besoin d'une table actualite dans laquelle nous enregistrerons chacune des news. Sa structure est définie ci-dessous.
Structure de la table " actualite "CREATE TABLE IF NOT EXISTS actualite(id INT(7) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,categorie_id INT(4) NOT NULL,titre VARCHAR(200) NOT NULL,corps TEXT NOT NULL,auteur VARCHAR(30) NOT NULL,email VARCHAR(60),creation DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00',edition DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00',publication TINYINT(1) DEFAULT 0);
Structure de la table " categorie "CREATE TABLE IF NOT EXISTS categorie(id INT(7) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,libelle VARCHAR(100) NOT NULL);
Exécutez ces codes SQL dans votre utilitaire d'administration de base de données (PHPMyAdmin, MySQL Query Browser...) afin de créer les tables et remplissez les de quelques enregistrements. Vous aurez un jeu de données de test qui vous permettront de vérifier que le code fonctionne correctement.
La table categorie et actualite sont en relation grâce à la clé étrangère categorie_id qui pointe sur le champ id de la table categorie.
Passons à présent au code PHP de génération du flux RSS.
Programme PHP de génération du flux RSS
Présentation du fichier
Ce programme est extrêmement simple. Il suivra pas à pas l'algorithmique suivant :
- Connexion sur la base de données à partir d'un objet PDO
- Récupération des 10 dernières actualités publiées
- Instanciation d'un objet RSSFeed
- Enregistrement de chaque actualité dans le flux RSS
- Sauvegarde du flux sur le serveur web dans un fichier XML
- Affichage du flux XML sur la sortie standard
Tout le code du programme est commenté et vous disposez de la documentation complète de l'API RSSFeed pour vous aider (voir plus haut).
Fichier de configuration
Listing du fichier de configuration news-config.inc.php<?php/*** Constantes d'accès à la base de données* et de configuration des news**/// Adresse du serveur de base de données// Login// Mot de passe// Nom de la base de données// Nom des tables utiles// Driver correspondant à la BDD utilisée// Nombre de news maximum par flux// URL du site// Informations du webmaster?>
Programme principal
Listing du fichier rss-news.php<?php/*** Programme principal* Construit le flux RSS***/// Import du fichier de configuration// Import de la classe RSSFeed/*** Déclaration des variables globales***/// Objets de connexion et de manipulatin de la BDD$oPDO = null;$oPDOStatement = null;// Objets de manipulation du fichier RSS$oRssFeed = null;$oRssItem = null;// Tableau stockant les news issues de la bdd// Variable stockant l'email issu de la BDD$sEmail = '';try{// Connexion sur la BDD$oPDO = new PDO(DB_DSN, DB_LOGIN, DB_PASSWORD);$oPDO->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);// Récupération des dernières news valides$oPDOStatement = $oPDO->query("SELECTactu.id,actu.categorie_id,actu.titre,actu.corps,actu.auteur,actu.email,actu.creation,cat.libelleFROM ". DB_ACTUALITE_TABLE ." AS actu,". DB_CATEGORIE_TABLE ." AS catWHEREpublication=1ANDactu.categorie_id = cat.idORDER BY creation DESC LIMIT 0,". MAX_NEWS_PAR_FLUX);// Stockage des news dans un tableau$aDernieresNews = $oPDOStatement->fetchAll(PDO::FETCH_OBJ);// Fermeture de la connexion SQL$oPDO = null;}catch(PDOException $e){}// A-t-on récupéré des enregistrements ?{// Création des entêtes du flux RSS$oRssFeed = new RSSFeed('utf-8');$oRssFeed->setProtectString(true);$oRssFeed->setTitle('Flux RSS des actualités');$oRssFeed->setDescription('Les dernières actualités directement par flux RSS');$oRssFeed->setPubDate('2007-12-31');$oRssFeed->setWebMaster(WEBMASTER_EMAIL,WEBMASTER_NOM);$oRssFeed->setManagingEditor(WEBMASTER_EMAIL,WEBMASTER_NOM);$oRssFeed->setCopyright('(C) Copyright 2007 - VotreSite.com - Tous droits réservés - reproduction interdite');$oRssFeed->setGenerator('Powered with RSSFeed Class by Hugo "Emacs" HAMON - http://www.apprendre-php.com');$oRssFeed->setLanguage('fr');// Ajout des news au fluxforeach($aDernieresNews as $oNews){// Récupération de l'email$sEmail = $oNews->email;$oRssItem = new RSSFeedItem();$oRssItem->setTitle($oNews->titre);$oRssItem->setDescription($oNews->corps);$oRssItem->setLink(URL_SITE .'/news.php?id='. $oNews->id);$oRssItem->setGuid(URL_SITE .'/news.php?id='. $oNews->id, true);{$oRssItem->setAuthor($sEmail, $oNews->auteur);}$oRssItem->setPubDate($oNews->creation);$oRssFeed->appendItem($oRssItem);$oRssItem = null;}// Sauvegarde du flux RSS$oRssFeed->save('rss-news.xml');// Affichage sur la sortie standard$oRssFeed->display();}?>
Téléchargement et licence des sources
Les fichiers sources du programme sont disponibles en téléchargement libre. Vous pouvez les modifier et les commercialiser librement.
Conclusion
Nous venons d'étudier un cas concret de génération de flux RSS à partir d'une API capable d'abstraire totalement la syntaxe XML d'un document RSS. Libre à vous à présent d'étudier la documentation de l'API RSSFeed et de la déployer sur vos applications.
- « Remplacement dynamiques des acronymes et abréviations
- Réalisation d'un livre d'or avec PDO et MVC »
Les commentaires
2. Par Kud le 05/09/2008 13:47
Très bon tuto.
Cependant, un tuto avec le Framework Zend ne serait pas de refus.
3. Par Sylvain le 15/11/2008 13:56
Très bon tuto, classes très faciles à utiliser.
Juste une petite erreur dans le fichier RSSFeed.class.php, ligne 24
s/$_feddCloud/$_feedCloud.
Merci.
4. Par Emacs le 15/11/2008 21:12
Merci Sylvain pour la remontée du bug. Je l'avais corrigée mais visiblement pas uploadée. Je fais ça tout de suite
5. Par mike974 le 16/03/2009 18:17
Super tuto très clair
j'aurais une question (peut-être) très simple pour les spécialistes : je voudrais lancer la création automatique de ce flux à chaque changement dans ma base ... Comment faire ?
Merci de vos poistes !
6. Par syl le 28/04/2009 19:53
encore un tuto qui ne fonctionne pas !
ça sert à rien de faire quelque chose pour ensuite avoir une erreur à l'arrivée.
error line 26 in RSS-News/rss-news.php
7. Par Maureka le 27/05/2009 01:35
Très bon tuto! Cependant, je rencontre des bug avec ie7 et FF3. Par contre il fonctionne bien avec Safari 4 beta!
8. Par ML le 21/08/2009 09:46
Tuto de A à Z, c'est une très bonne initiative. Très clair.
1. Par Xireus le 31/12/2007 17:15