Créer des flux RSS facilement et rapidement - Apprendre-PHP.com

Rechercher
Boutique en ligne, solution e-commerce, script PHP et PERL : RAYNETTE

Créer des flux RSS facilement et rapidement

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 :

  1. Connexion sur la base de données à partir d'un objet PDO
  2. Récupération des 10 dernières actualités publiées
  3. Instanciation d'un objet RSSFeed
  4. Enregistrement de chaque actualité dans le flux RSS
  5. Sauvegarde du flux sur le serveur web dans un fichier XML 
  6. 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
define('DB_SERVEUR', 'localhost');
// Login
define('DB_LOGIN','root');
// Mot de passe
define('DB_PASSWORD','root');
// Nom de la base de données
define('DB_NOM','APTutoriels');
// Nom des tables utiles
define('DB_ACTUALITE_TABLE','actualite');
define('DB_CATEGORIE_TABLE','categorie');
// Driver correspondant à la BDD utilisée
define('DB_DSN','mysql:host='. DB_SERVEUR .';dbname='. DB_NOM);
// Nombre de news maximum par flux
define('MAX_NEWS_PAR_FLUX', 10);
// URL du site
define('URL_SITE','http://www.votresite.com');
// Informations du webmaster
define('WEBMASTER_NOM','John DOE');
define('WEBMASTER_EMAIL','johndoe@server.com');
?>

Programme principal

Listing du fichier rss-news.php
<?php
/**
* Programme principal
* Construit le flux RSS
***/
// Import du fichier de configuration
require(dirname(__FILE__).'/news-config.inc.php');
// Import de la classe RSSFeed
require(dirname(__FILE__).'/RSSFeed/RSSFeed.class.php');
/**
* 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
$aDernieresNews = array();
// 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
(
"SELECT
actu.id,
actu.categorie_id,
actu.titre,
actu.corps,
actu.auteur,
actu.email,
actu.creation,
cat.libelle
FROM ". DB_ACTUALITE_TABLE ." AS actu,". DB_CATEGORIE_TABLE ." AS cat
WHERE
publication=1
AND
actu.categorie_id = cat.id
ORDER 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)
{
echo $e->getMessage();
}
// A-t-on récupéré des enregistrements ?
if(sizeof($aDernieresNews)>0)
{
// 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->setLink(URL_SITE .'/'. basename(__FILE__));
$oRssFeed->setPubDate('2007-12-31');
$oRssFeed->setLastBuildDate(date('Y-m-d'));
$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 flux
foreach($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);
if(!empty($sEmail))
{
$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
header('Content-Type: text/xml; charset=utf-8');
$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.



Les commentaires

1. Par Xireus le lundi 31 décembre 2007 à 17:05

Excellent tuto, dans la continuité des autres ! bravo à toi et bonne année 2008.

Ajouter un commentaire

Votre avis
Se souvenir de mes informations