<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" "http://openweb.eu.org/dtd/docbkx42/docbookx.dtd">
<article role="article" xml:lang="fr" lang="fr" id="rss_syn">
  <articleinfo>
    <title>Indiquer la fréquence de mise à jour d'un fil de syndication au format RSS</title>
    <author>
      <firstname>Fabrice</firstname>
      <surname>Bonny</surname>
      <email>fabrice.bonny@openweb.eu.org</email>
    </author>
    <pubdate>2005-01-10</pubdate>
    <date>2005-01-10</date>
    <subjectset>
      <subject role="profil">
        <subjectterm>expert</subjectterm>
        <subjectterm>debutant</subjectterm>
        <subjectterm>gourou</subjectterm>
      </subject>
      <subject role="technologie">
        <subjectterm>rss</subjectterm>
      </subject>
    </subjectset>
    <abstract>
      <para>Les fils de syndication, et particulièrement ceux au format RSS, connaissent un succès chaque jour croissant. Mais on voit en parallèle s'accroître la consommation de bande passante et de temps serveur. Comment faire pour ne pas effectuer de multiples requêtes inutiles sur des informations actualisées tout au plus quotidiennement ?
      </para>
    </abstract>
  </articleinfo>
  <para>Les moyens de veille et d'information ont profondément changé avec l'avènement de la syndication. Nous sommes passés de l'ère de la lettre d'information mensuelle ou hebdomadaire, parfois quotidienne, à une surveillance souvent horaire d'un nombre de sites toujours plus important, via les outils de syndication de contenu. Ceci peut entraîner une consommation inutile et non négligeable de bande passante et de temps serveur. Il s'avère donc indispensable de limiter le trafic lié à la syndication, autant côté client que côté serveur.</para>
  <section>
    <title>La théorie</title>
    <section>
      <title>Un début de prise en compte</title>
      <para>Le <ulink url="http://blogs.law.harvard.edu/tech/rss">format <acronym>RSS</acronym>2.0</ulink> permet l'ajout d'un élément <token>ttl</token> dans l'entête d'un fil. La valeur de cet élément correspond à une durée en minutes indiquant la durée de vie (Time To Live) de l'information.</para>
      <para>Voici un exemple minimal&#160;:</para>
      <programlisting>&lt;?xml version="1.0"?&gt;
&lt;rss version="2.0"&gt;
 &lt;channel&gt;
  &lt;title&gt;Mon site&lt;/title&gt;
  &lt;link&gt;http://www.example.org/&lt;/link&gt;
  &lt;description&gt;Ma description&lt;/description&gt;
  &lt;ttl&gt;90&lt;/ttl&gt;
  &lt;item&gt;
   &lt;title&gt;Une actu&lt;/title&gt;
   &lt;link&gt;http://www.example.org/2005/01/01&lt;/link&gt;
   &lt;description&gt;Un peu de texte pour décrire mon info&lt;/description&gt;
  &lt;/item&gt;
 &lt;/channel&gt;
&lt;/rss&gt;</programlisting>
      <para>Cet exemple indique de ne pas réinterroger ce fil avant 90 minutes.</para>
    </section>
    <section>
      <title>Un mécanisme d'évitement</title>
      <para>Le format <ulink url="http://my.netscape.com/publish/formats/rss-spec-0.91.html"><acronym>RSS</acronym>0.91</ulink> avait introduit la possibilité d'indiquer les jours et heures durant lesquels il n'y a pas de publication. Ces éléments existent également en <acronym>RSS</acronym>2.0 (mais pas en <acronym>RSS</acronym>1.0 dont nous allons parler plus loin).</para>
      <para>En voici un exemple en RSS0.91&#160;:</para>
      <programlisting>&lt;?xml version="1.0"?&gt;
&lt;rss version="0.91"&gt;
 &lt;channel&gt;
  &lt;title&gt;Mon site&lt;/title&gt;
  &lt;link&gt;http://www.example.org/&lt;/link&gt;
  &lt;description&gt;Ma description&lt;/description&gt;
  &lt;image&gt;
   &lt;title&gt;Mon image&lt;/title&gt;
   &lt;url&gt;http://www.exemple.org/images/logo.png&lt;/url&gt;
   &lt;link&gt;http://www.exemple.org/&lt;/link&gt;
   &lt;width&gt;100&lt;/width&gt;
   &lt;height&gt;100&lt;/height&gt;
   &lt;description&gt;Mon logo&lt;/description&gt;
  &lt;/image&gt;
  &lt;skipDays&gt;
   &lt;day&gt;Monday&lt;/day&gt;
   &lt;day&gt;Tuesday&lt;/day&gt;
   &lt;day&gt;Wednesday&lt;/day&gt;
   &lt;day&gt;Thursday&lt;/day&gt;
   &lt;day&gt;Friday&lt;/day&gt;
  &lt;/skipDays&gt;
  &lt;skipHours&gt;
   &lt;hour&gt;1&lt;/hour&gt;
   &lt;hour&gt;2&lt;/hour&gt;
   &lt;hour&gt;3&lt;/hour&gt;
   &lt;hour&gt;4&lt;/hour&gt;
   &lt;hour&gt;5&lt;/hour&gt;
  &lt;/skipHours&gt;
  &lt;item&gt;
   &lt;title&gt;Une actu&lt;/title&gt;
   &lt;link&gt;http://www.example.org/2005/01/01&lt;/link&gt;
   &lt;description&gt;Un peu de texte pour décrire mon info&lt;/description&gt;
  &lt;/item&gt;
 &lt;/channel&gt;
&lt;/rss&gt;</programlisting>
      <para>Ici, rien n'est publié en semaine, ni entre 1 heure et 5 heures du matin.</para>
    </section>
    <section>
      <title>Une extension plus convaincante</title>
      <para>Il est heureusement possible de décrire son rythme d'actualisation de manière plus fine grâce à <ulink url="http://web.resource.org/rss/1.0/"><acronym>RSS</acronym>1.0</ulink>. Son <ulink url="http://web.resource.org/rss/1.0/modules/syndication/">module syndication</ulink> permet en effet de spécifier&#160;:</para>
      <itemizedlist>
        <listitem>
          <para>L'intervalle de mise à jour via <token>updatePeriod</token> qui <quote>indique l'intervalle de mise à jour du canal. Les valeurs admises sont&#160;: <token>hourly</token>, <token>daily</token>, <token>weekly</token>, <token>monthly</token>, <token>yearly</token>. S'il est omis, <token>daily</token> est la valeur par défaut.</quote></para>
        </listitem>
        <listitem>
          <para>La fréquence de mise à jour via <token>updateFrequency</token> qui est <quote>utilisé pour décrire la fréquence de mise à jour dans l'intervalle donnée. Un entier indique combien de fois le canal est mis à jour dans cet intervalle. Par exemple, une <token>updatePeriod</token> ayant comme valeur "<token>daily</token>", et une <token>updateFrequency</token> de 2 indiquent que le canal est mis à jour deux fois par jour. S'il est omis, la valeur par défaut est de 1.</quote></para>
        </listitem>
        <listitem>
          <para>La date de référence via <token>updateBase</token>, qui <quote>définit une date de base à utiliser de concert avec <token>updatePeriod</token> et <token>updateFrequency</token> pour calculer le calendrier de publication. Le format de date prend la forme <token>yyyy-mm-ddThh:mm</token></quote>.</para>
        </listitem>
      </itemizedlist>
      <para>Voici un exemple en <acronym>RSS</acronym>1.0</para>
      <programlisting>&lt;?xml version="1.0"?&gt;
&lt;rdf:RDF
 xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
 xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
 xmlns="http://purl.org/rss/1.0/"&gt;
 &lt;channel rdf:about="http://www.example.org/rss/"&gt;
  &lt;title&gt;Mon site&lt;/title&gt;
  &lt;link&gt;http://www.example.org/&lt;/link&gt;
  &lt;description&gt;Ma description&lt;/description&gt;
  &lt;sy:updatePeriod&gt;monthly&lt;/sy:updatePeriod&gt;
  &lt;sy:updateFrequency&gt;2&lt;/sy:updateFrequency&gt;
  &lt;sy:updateBase&gt;2005-01-01T12:00+00:00&lt;/sy:updateBase&gt;
  &lt;items&gt;
   &lt;rdf:Seq&gt;
    &lt;rdf:li resource="http://www.example.org/rss/2004/08/01/" /&gt;
   &lt;/rdf:Seq&gt;
  &lt;/items&gt;
 &lt;/channel&gt;
 &lt;item rdf:about="http://www.example.org/rss/"&gt;
  &lt;title&gt;Une actu&lt;/title&gt;
  &lt;link&gt;http://www.example.org/rss/2005/01/01/&lt;/link&gt;
  &lt;description&gt;Un peu de texte pour décrire mon info&lt;/description&gt;
 &lt;/item&gt;
&lt;/rdf:RDF&gt;</programlisting>
      <para>Pour utiliser ce module il faut ajouter l'espace de noms dans l'élément <token>rdf</token>. Ici, cet espace étant <token>sy</token>, on ajoute à l'élément racine <token>&lt;rdf&gt;</token> l'attribut <token>xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"</token>. Puis nous ajoutons nos trois éléments de fréquence de mise à jour dans la déclaration du canal (<token>channel</token>)&#160;:</para>
      <itemizedlist>
        <listitem>
          <token>&lt;sy:updatePeriod&gt;monthly&lt;/sy:updatePeriod&gt;</token>
        </listitem>
        <listitem>
          <token>&lt;sy:updateFrequency&gt;2&lt;/sy:updateFrequency&gt;</token>
        </listitem>
        <listitem>
          <token>&lt;sy:updateBase&gt;2005-01-01T12:00+00:00&lt;/sy:updateBase&gt;</token>
        </listitem>
      </itemizedlist>
      <para>La date de référence (<token>updateBase</token>) est exprimée sous la forme <token>aaaa-mm-jjThh:mm+hh:mm</token>. Les indications <token>hh:mm</token> qui suivent le +, ou le - suivant les cas, spécifient le décalage par rapport au temps universel (<acronym>UTC</acronym>). Une <ulink url="http://www.w3.org/TR/NOTE-datetime">Note du <acronym>W3C</acronym> sur les formats de date et d'heure</ulink> précise la syntaxe à utiliser pour cette date.</para>
      <para>Dans notre exemple, le fil est donc mis à jour deux fois par mois, soit tous les quinze jours. La date de référence étant le 01/01/2005, la prochaine vérification devra avoir lieu le 16/01/2005 à 12:00.</para>
    </section>
  </section>
  <section>
    <title>La pratique</title>
    <para>Qu'en est-il à présent de l'implémentation dans les applications <acronym>RSS</acronym>&#160;? Le travail à effectuer est minime, mais est-il utile&#160;?</para>
    <section>
      <title>Les outils de contenus</title>
      <para>La plupart des outils de blogs ne proposent rien pour régler ces paramètres. Qu'à cela ne tienne, nous avons plusieurs possibilités&#160;:</para>
      <itemizedlist>
        <listitem>
          <para>écrire à l'auteur de l'outil comme ça a déjà été fait pour <ulink url="http://www.dotclear.net/">Dotclear</ulink>, par exemple&#160;;</para>
        </listitem>
        <listitem>
          <para>modifier vous-même le gabarit utilisé pour la syndication, s'il en existe un, en ajoutant les quelques lignes qui manquent&#160;;</para>
        </listitem>
        <listitem>
          <para>si vous êtes l'auteur d'un outil, proposer une interface permettant de modifier le gabarit ou le code ou à défaut, proposer d'indiquer ce paramètre à l'installation.</para>
        </listitem>
      </itemizedlist>
    </section>
    <section>
      <title>Les outils de consultation</title>
      <para>De ce côté aussi, peu d'outils comprennent cette extension. Là encore, vous pouvez&#160;:</para>
      <itemizedlist>
        <listitem>
          <para>tester un autre outil&#160;;</para>
        </listitem>
        <listitem>
          <para>écrire à l'auteur de l'outil que vous utilisez comme ça a été fait pour <ulink url="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=880332&amp;group_id=70179&amp;atid=526866">Feedreader</ulink>&#160;;</para>
        </listitem>
        <listitem>
          <para>modifier vous-même l'outil si vous êtes développeur&#160;;</para>
        </listitem>
        <listitem>
          <para>si vous êtes l'auteur d'un agrégateur, prendre en compte le module syndication.</para>
        </listitem>
      </itemizedlist>
    </section>
    <section>
      <title>Les autres outils</title>
      <para>Il se peut que vous vous demandiez si ce module présente un intérêt réel. Il est vrai que peu d'outils le prennent actuellement en compte mais <acronym>RSS</acronym> est un format jeune et il n'y a pas que les agrégateurs qui lisent les fils de syndication. C'est aussi le cas d'annuaires, de moteurs de recherche, etc. Sans compter d'autres outils qui vont certainement voir le jour.</para>
    </section>
  </section>
  <section>
    <title>Conclusion</title>
    <para>Indiquer la fréquence de mise à jour de votre fil <acronym>RSS</acronym> demande donc peu de travail et représente un investissement pour l'avenir. Il s'agit d'optimiser la charge du réseau et du serveur en limitant le rythme des requêtes. Mais il peut aussi s'agir d'accélerer la fréquence pour un site d'actualités en temps réel. Libération, l'Humanité ou RTL possédent déjà un fil de syndication et on peut parier sans grand risque que les autres grands journaux vont les suivre.</para>
    <para>En combinant l'ensemble des techniques exposées, surtout si vous utilisez RSS2.0, vos lecteurs n'auront plus aucune excuse s'ils se demandent encore quand est prévue la prochaine publication.</para>
    <note>
    <para>Cet article fait référence à <acronym>RSS</acronym>0.91, <acronym>RSS</acronym>1.0 et <acronym>RSS</acronym>2.0, qui, en dépit de leur nom, ne représentent pas des évolutions d'un seul et même format, mais des formats différents. C'est pourquoi certaines possibilités ne se retrouvent pas d'une version sur l'autre. Pour plus d'informations, voir <ulink url="/articles/rss_introduction/">l'introduction à <acronym>RSS</acronym></ulink>.</para>
    </note>
  </section>
</article>
