Créer son flux RSS simplement avec Zend_Feed

Mettre en place un flux RSS très simplement pour son site web.

06 août 2011

Le flux RSS est surement le meilleur moyen de diffuser ses nouveautés, c'est donc un outil indispensable pour la plupart des sites. Bien que d'apparence très simple (ce n'est qu'un générateur de XML), le développement d'un flux RSS peut vous réserver quelques surprises (problèmes d'encodage, incompatibilité avec certains navigateurs etc...).

Ce tutoriel a pour but de générer un fichier RSS grâce au composant du Zend Framework : Zend_Feed. Au vu de ses faibles dépendances, Zend_Feed est normalement utilisable dans n'importe quel projet, y compris un projet n'utilisant pas le Zend Framework.

Les accès à la base de données seront effectués grâce à l'ORM Doctrine, néanmoins rien n'empêche l'utilisation d'un bon vieu mysql_query.

Générer le fichier rss.xml

/application/scripts/GenererRss.php

$entries = array();     
 /* 
Equivalent de $result = mysql_query(SELECT 
	* 
	FROM 
	article a 
	ORDER BY 
	a.id DESC 
	LIMIT 0,20)
*/
 $articles = Doctrine::getTable('article')
	       	->createQuery('a')
	      	->orderby('a.id DESC')
	      	->limit(20)
	      	->execute();
 
/* 
** Pour chaque article on crée un tableau qui symbolise une entrée.
** Cette entrée est ensuite ajoutée aux autres entrées.
** Cette boucle est égale à while($tab = mysql_fetch_array($result))
*/

 foreach ($articles AS $article) {
 
	$entry = array(
	'title'       => $article->titre,
	'link'        => $article->url,
	'description' => $article->description,
	'lastUpdate'  => $article->ecrit_le
	);
     
     array_push($entries, $entry);
 }

/* 
** On créé ensuite un tableau symbolisant le flux RSS.
** Les entrées sont insérés dans le flux RSS. 
*/
 $rss = array(
   'title'   => $config->site->nom,
   'link'    => $config->site->url,
   'description'   => $config->site->description,,
   'charset' => $config->resources->view->encoding,
   'language'    => 'fr',
   'entries' => $entries
 );
 
/*
** Le tableau est ensuite importé dans Zend_Feed,
** on lui précise que c'est du RSS que l'on veut
** (Zend_Feed gère aussi Atom & co). 
*/
 $feed = Zend_Feed::importArray($rss, 'rss');
 
 /* Le XML est ensuite stocké dans une variable puis écrit dans un fichier. */
 $rssFeed = $feed->saveXML();

 $fh = fopen("/public/rss.xml", "w");
 fwrite($fh, $rssFeed);
 fclose($fh);
	

Intégration dans le Zend Framework

Comme dit précédemment, le Zend_Feed peut être utilisé en dehors d'un projet utilisant le Zend Framework. Cette partie du tutoriel s'adresse à ceux qui utilisent le framework et a pour but le développement d'un générateur automatique de flux RSS.

A placer avant le code précédent dans /application/scripts/GenererRss.php

/*
** Comme vous pouvez le voir la majorité de ce code est le même que dans
** /public/index.php.
*/
defined('APPLICATION_PATH')
    || define('APPLICATION_PATH', realpath(dirname(__FILE__) . '/..'));

defined('APPLICATION_ENV')
    || define('APPLICATION_ENV', (getenv('APPLICATION_ENV') ? getenv('APPLICATION_ENV') : 'devlocal'));

/* Utile pour Doctrine */
defined('APPLICATION_MODELS')
    || define('APPLICATION_MODELS', (getenv('APPLICATION_MODELS') ? getenv('APPLICATION_MODELS') : APPLICATION_PATH.'/models'));  
    
   
set_include_path(implode(PATH_SEPARATOR, array(
    realpath(APPLICATION_PATH . '/../library'),
    get_include_path(),
)));

require_once 'Doctrine.php';

/** Zend_Application */  
require_once 'Zend/Application.php';

$application = new Zend_Application(
    APPLICATION_ENV,
    APPLICATION_PATH . '/configs/application.ini'
);


date_default_timezone_set('Europe/Berlin');


$application->getBootstrap()->bootstrap('doctrine'); /* Initialisation de Doctrine */
$application->getBootstrap()->bootstrap('config'); /* Initialisation de la configuration */
$config = Zend_Registry::get('config');
	

Il suffit maintenant d'indiquer au cron qu'il doit lancer le script GenererRss.php tous les jours.

Automatisation avec le crontab

	NlC0@informatix : crontab -e

	# Dans le crontab :
	# m h  dom mon dow   command

	0 0 * * * php5 /application/scripts/GenererRss.php
	
Par
Créateur et administrateur.

Dans la même catégorie

Formater un tableau pour CURLOPT_POSTFIELDS
Email avec pièce jointe en PHP
PHP : modifier les attributs privés d'un objet
Tester l'existence d'un fichier dans l'include path
Convertir récursivement un objet PHP en tableau
PHP : formater un tableau en CSV
Comment envoyer un mail en ligne de commande ?
RSYNC : Comment synchroniser des fichiers à travers une connexion ssh ?
Exécuter un code PHP en ligne de commande
Doctrine 2 : générer les classes PHP depuis la base de données
Comment catcher les erreurs en PHP ?
Doctrine 2 : comment afficher la requête SQL ?
Comment construire une URL sans caractères spéciaux en PHP ?
Comment lister les fichiers PHP inclus sur ma page ?
Les fonctions anonymes récursives en PHP
Requête HTTP asynchrone en PHP
La résolution statique à la volée ou Late Static Bindings
Trouver les jours fériés français en PHP
Comment allumer son ordinateur à distance en PHP ?
Comment utiliser la balise meta viewport ?
Une version mobile de mon site avec le Zend Framework
Doctrine et le Zend Framework : Présentation, intégration et utilisation
Appliquer un layout sur un mail avec le Zend Framework
Comment lancer une requête multi-bases avec les fonctions MySQL ?
Implode / Explode : Du tableau à la chaine de caractères, de la chaine de caractères au tableau

Commentaire(s)