Hello, I’m Vinch

And this is my website.

Templates PHP et Smarty pour créer des flux RSS 2.0

04/01/07

This post is more than 10 years old. It might not reflect my current skills and convictions.

Comme promis dans un précédent billet, voici les templates en PHP et via la syntaxe Smarty pour générer des flux RSS 2.0 (minimaux).

Vous devez d’abord vous assurer de transmettre à votre template un array nommé articles qui ressemble à peu près à ceci (si vous utilisez MySQL comme SGBDR, un mysql\_fetch\_assoc devrait vous donner ce genre de résultat) :

Array
(
    [0] => Array
        (
            [title] => Vous allez bien ?
            [url_title] => vous-allez-bien
            [creation_date] => 2007-04-01 00:00:01
            [description] => C'est juste une question comme ça, en passant...
        )

    [1] => Array
        (
            [title] => Bonjour la compagnie !
            [url_title] => bonjour-la-compagnie
            [creation_date] => 2007-03-31 23:59:59
            [description] => Ceci est un exemple d'article qui ne sert à rien, c'est juste pour montrer...
        )

    [2] => Array
	(
		...
	)
    ...
)

* title correspond au titre de l’article.
* url\_title est un identifiant unique de l’article. Il s’agit du titre transformé en quelque chose pouvant « se trouver » dans une URL. Il est composé uniquement des caractères qui y sont autorisés, c’est-à-dire des chiffres, des lettres et des tirets (préférés aux underscores). Par exemple, si le title est « Bonjour la compagnie ! », on aura « bonjour-la-compagnie » comme url\_title. On préfère afficher un identifiant unique de cette forme plutôt qu’un simple identifiant numérique pour améliorer le référencement naturel.
* creation_date correspond à la date de création de l’article, au format DATETIME (car provenant en général de MySQL).
* description est une introduction de l’article voire l’article tout entier (il y a beaucoup de débats à ce propos sur le Web).

Vous pouvez bien sûr adapter les noms à votre convenance, ça n’a absolument aucune importance, à condition que ça corresponde avec ce qui se trouve dans le template.

N’oubliez pas de spécifier le type MIME dans le fichier PHP qui appelle le template. Vous pouvez le faire en ajoutant cette ligne de code tout en haut du fichier :

<?php header('Content-Type: text/xml; charset=UTF-8'); ?>

Ou encore mieux :

<?php header('Content-Type: application/rss+xml; charset=UTF-8'); ?>

Cette ligne a pour but de dire à votre navigateur de considérer votre flux comme étant de type XML (et de l’afficher en conséquence). Si vous ne dites rien, il l’affichera comme du HTML (text/html étant le type MIME par défaut).

Le template en PHP est le suivant :

<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
	<channel>
		<title>Les articles de Vincent Battaglia</title>
		<link>http://www.vinch.be/articles/</link>
		<description>Ceci est un exemple !</description>
		<?php foreach($articles as $article) : ?>
		<item>
			<guid>http://www.vinch.be/articles/view/<?php echo $article['url_title']; ?></guid>
			<title><?php echo $article['title']; ?></title>
			<link>http://www.vinch.be/articles/view/<?php echo $article['url_title']; ?></link>
			<description><?php echo $article['description']; ?></description>
			<pubDate><?php echo date("D, j M Y H:i:s", $article['creation_date'];);?></pubDate>
		</item>
		<?php endforeach; ?>
	</channel>
</rss>

Avec la syntaxe Smarty, on a :

<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
	<channel>
		<title>Les articles de Vincent Battaglia</title>
		<link>http://www.vinch.be/articles/</link>
		<description>Ceci est un exemple !</description>
		{foreach from=$articles item=article}
		<item>
			<guid>http://www.vinch.be/articles/view/{$article.url_title}</guid>
			<title>{$article.title}</title>
			<link>http://www.vinch.be/articles/view/{$article.url_title}</link>
			<description>{$article.description}</description>
			<pubDate>{$article.created_on|date_format:"%a, %d %b %Y %H:%M %Z"}</pubDate>
		</item>
		{/foreach}
	</channel>
</rss>

Vous devez tout d’abord entrer manuellement les informations concernant votre flux, à savoir le titre (title), l’URL vers la page principale (link) et une description du flux (description). Il existe beaucoup d’autres balises enfants de channel mais seules les trois citées précédemment sont obligatoires.

D’après la recommandation RSS 2.0, tous les enfants de la balise item sont facultatifs, à condition que soit le titre (title), soit la description (description) soit présent.

Cependant, pour chaque item, je recommande de renseigner au moins les éléments suivants :

* guid : l’identifiant unique de l’item, sous forme d’une chaîne de caractère. En pratique, on utilise souvent l’URL vers l’article comme guid.
* title : le titre.
* description : le contenu (synopsis, résumé ou article tout entier).
* link : lien vers l’article sur le site concerné.
* pubDate : date de publication de l’article au format RFC 822.

La dernière chose à faire est de valider votre flux et de le tester dans votre agrégateur préféré.

Je suis ouvert à vos questions/suggestions 😉

2 comments

Leave a comment