Un fil RSS 2.0 et un fil ATOM 0.3

Deux squelettes permettant de placer un fil RSS 2.0 ou un fil Atom 0.3 sur un site SPIP (construits sur le modèle du squelette backend).

Introduction

Mettre sur son site un lien vers un fil RSS ou un fil Atom a pour but de permettre au visiteur de se tenir au courant des nouveautés du site. Cette contribution propose des squelettes pour fournir ces informations dans les deux formats récents que sont la version 2.0 de RSS et la version 0.3 de Atom. Si vous ne savez pas à quoi sert un fil RSS ou Atom, les liens ci-dessous vous l’expliqueront (on emploie le mot « fil » pour évoquer le fil d’une conversation).

Aujourd’hui, SPIP propose déjà avec le couple backend.php3/html un fil RSS 0.91. Ma proposition d’un rss2.php3/html emploie la version 2.0 plus récente. Quand à Atom, c’est un autre format, une autre manière de présenter les informations, que ce soit à destination du logiciel de lecture de fils, ou à destination d’un site qui en syndique d’autres. Il n’est pas rare de voir sur un site, côte à côte, plusieurs icônes ou plusieurs liens pointant sur chacun des formats, afin que le visiteur puisse choisir dans quel format il veut s’abonner aux nouvelles du site.

Pour en savoir plus sur RSS :
-  la description sur feedvalidator (en anglais),
-  une page donnant de nombreuses ressources en français sur klogfr.

Pour en savoir plus sur Atom :
-  le site de Atomenabled (en anglais),
-  Une version (brouillon, en anglais) de la spécification 0.3,
-  Une présentation en français sur la-grange.net.

Mode d’emploi

Appelés avec un argument id_rubrique=NN, les deux squelettes rss2.html et atom03.html renvoient (comme le fait backend.html en RSS 0.91) la liste des 10 derniers articles dans la rubrique NN. Exemple :

http://www.transactiv-exe.org/rss2.php3?id_rubrique=2

ou encore

http://www.transactiv-exe.org/atom03.php3?id_rubrique=2

Appelés sans argument, les mêmes squelettes renvoient une liste de tous les articles datant de moins de 5 jours, et si il n’y en a pas au moins 8, ils donnent les 8 articles les plus récents du site.

Les couples html/php3 correspondant à ces deux squelettes se trouvent dans l’archive zip jointe à cet article.

Dans la version initiale de cette contrib, les squelettes ajoutaient la liste des 10 plus récents messages publiés dans les forums. J’ai maintenant supprimé cette fonctionnalité. Mais on trouvera encore dans l’archive jointe les versions initiales incluant cette fonctionnalité (sous les noms atom03forum et rss2forum).

J’ai aussi corrigé les éléments Dublin Core « date » et « creator » que j’avais écrits avec une majuscule. Les spécifications sont en effet trompeuses, car ils donnent le nom de ces éléments avec une majuscule au début, mais précisent dans le paragraphe 4.2 d’un autre document que les éléments doivent écrits en minuscules.

Fonctions requises

Ces squelettes utilisent quatre fonctions php qui doivent être placées dans mes_fonctions.php3. Ce sont :
-  la fonction pasdecrochet qui supprime le caractère « > » en début des titres de forum (au moment où j’écris cette contrib, je ne me souviens même plus du problème que ce caractère posait, mais je me souviens que ça en avait posé un),
-  la fonction w3cdate qui permet de formatter une date en accord avec W3C.NOTE-datetime-19980827 comme le demande la spécification d’Atom,
-  la fonction tagdate est utilisée pour construire à partir de #DATE une date qui sera incluse dans une chaîne de caractères unique et permanente pour chaque article (ce qui définit un <tag> dans Atom),
-  la fonction supprimehttp retire simplement les caractères « http:// » au début d’une URL.

Voici le code de ces fonctions (désolé, j’ai mis tous les commentaires en anglais, une vielle habitude) :

On remarquera aussi dans le code de ce squelette la boucle

<BOUCLE_motcle_soustitre(MOTS){titre="Sous_titre_site"}>
[(#TEXTE|texte_backend)]
</BOUCLE_motcle_soustitre>

J’ai en effet défini un mot-clé nommé « Sous_titre_site » qui résume le site en une phrase. J’ajoute à cela les 100 premiers caractères de l’article numéro 1. Si vous voulez utiliser ce squelette, je vous conseille de personnaliser ce tag (<description> dans le fil RSS, ou <tagline> dans le fil Atom) en fonction de vos besoins si le choix que j’ai fait ne vous convient pas.

Version de SPIP requise

Ces squelettes fonctionnent sur la version 1.7.2 (ils nécessitent la fonction texte_backend).

Validation

Ces squelettes ont été testés avec http://feedvalidator.org/ pour rss2 et atom03, ainsi que http://rss.scripting.com/ pour rss2.

Dans l’ensemble des essais que j’ai faits, le résultat est valide, mais avec l’appel sans argument, comme les forums sont inclus, il peut y avoir des caractères qui sont codés sous forme numérique, du style &nnnn; ce que le validator n’accepte pas quand on lui a déclaré que le texte était codé en iso-8859-1. J’avoue que ce détail ne m’a pas beaucoup préoccupé, mais j’apprécierais un commentaire me proposant un moyen de corriger cela (à tous les coups, il y a une fonction simple pour faire cela).

Améliorations

Ajouté le 15 mai 2005 :

Après passage à la version 1.8, j’ai retravaillé mes fichiers rss2 et atom03 pour qu’ils soient de nouveau complétement valides.

-  j’ai déplacé la ligne @header("Content-type: application/rss+xml"); qui se trouve dans rss2.php3, et l’ai mise en début du squelette rss2.html, ce qui donne :

<?php
    @header("Content-type: application/rss+xml");
    echo '<'.'?xml version="1.0" encoding="#CHARSET"?'.'>';
?>


-  de même, j’ai déplacé la ligne @header("Content-type: application/atom+xml"); qui se trouvait dans atom03.php3 et l’ai mise en début du squelette atom03.html, ce qui donne :

<?php
    @header("Content-type: application/atom+xml");
    echo '<'.'?xml version="1.0" encoding="#CHARSET"?'.'>';
?>

Ceci supprime un avertissement de feedvalidator sur le type mime des fichiers qui était text/html.

-  j’ai ajouté dans mes_fonctions.php3 les lignes

function supprimetags($texte) {
    // supprime les tags html d'un texte de backend (appeler avant texte_backend).
    $texte = strip_tags($texte);
    return $texte;
}

-  j’ai remplacé dans rss2.html et atom03.html toutes les chaînes #INTRODUCTION|texte_backend par #INTRODUCTION|supprimetags|texte_backend

Ce filtre supprimetags retire tous les tags html du descriptif de l’article. C’est un peu sauvage, mais efficace. Si on veut conserver les codes html, il faudrait inclure ces chaines entre <![CDATA[ et ]]> mais je ne suis pas certain que tous les lecteurs de fils sachent traiter ces attributs CDATA (Spip 1.8 sait le faire). Je pense que dans les squelettes, il faut aussi « échapper » ces caractères [ et ].

Discussion

Aucune discussion

Ajouter un commentaire

Avant de faire part d’un problème sur un plugin X, merci de lire ce qui suit :

  • Désactiver tous les plugins que vous ne voulez pas tester afin de vous assurer que le bug vient bien du plugin X. Cela vous évitera d’écrire sur le forum d’une contribution qui n’est finalement pas en cause.
  • Cherchez et notez les numéros de version de tout ce qui est en place au moment du test :
    • version de SPIP, en bas de la partie privée
    • version du plugin testé et des éventuels plugins nécessités
    • version de PHP (exec=info en partie privée)
    • version de MySQL / SQLite
  • Si votre problème concerne la partie publique de votre site, donnez une URL où le bug est visible, pour que les gens puissent voir par eux-mêmes.
  • En cas de page blanche, merci d’activer l’affichage des erreurs, et d’indiquer ensuite l’erreur qui apparaît.

Merci d’avance pour les personnes qui vous aideront !

Par ailleurs, n’oubliez pas que les contributeurs et contributrices ont une vie en dehors de SPIP.

Qui êtes-vous ?
[Se connecter]

Pour afficher votre trombine avec votre message, enregistrez-la d’abord sur gravatar.com (gratuit et indolore) et n’oubliez pas d’indiquer votre adresse e-mail ici.

Ajoutez votre commentaire ici

Ce champ accepte les raccourcis SPIP {{gras}} {italique} -*liste [texte->url] <quote> <code> et le code HTML <q> <del> <ins>. Pour créer des paragraphes, laissez simplement des lignes vides.

Ajouter un document

Suivre les commentaires : RSS 2.0 | Atom