API d'accès au contenu de flux

  • Raccourci de la révision : API_d'accès_au_contenu_de_flux
  • Titre de la révision : API d'accès au contenu de flux
  • ID de la révision : 262938
  • Créé :
  • Créateur : Fredchat
  • Version actuelle ? Non
  • Commentaire /* Préparation traductoin des interfaces */

Contenu de la révision

Firefox 2 et Thunderbird 2 introduisent de nouvelles interfaces permettant aux développeurs d'extensions d'accéder plus facilement aux flux RSS et Atom.

Les interfaces de flux

nsIFeed (à traduire de {{mediawiki.interwiki('en', 'nsIFeed', 'en:nsIFeed')}})
Représente un flux RSS ou Atom.
nsIFeedContainer (à traduire de {{mediawiki.interwiki('en', 'nsIFeedContainer', 'en:nsIFeedContainer')}})
Une classe de base dont dérivent plusieurs des interfaces liées aux flux.
nsIFeedElementBase (à traduire de {{mediawiki.interwiki('en', 'nsIFeedElementBase', 'en:nsIFeedElementBase')}})
Une classe de base dont dérivent plusieurs des autres interfaces liées aux flux.
nsIFeedEntry (à traduire de {{mediawiki.interwiki('en', 'nsIFeedEntry', 'en:nsIFeedEntry')}})
Représente une entrée unique dans un flux RSS ou Atom.
nsIFeedGenerator (à traduire de {{mediawiki.interwiki('en', 'nsIFeedGenerator', 'en:nsIFeedGenerator')}})
Décrit le logiciel générateur du flux RSS ou Atom.
nsIFeedPerson (à traduire de {{mediawiki.interwiki('en', 'nsIFeedPerson', 'en:nsIFeedPerson')}})
Représente une personne. Contient le nom de la personne, son adresse de courrier électronique et celle de sa page Web.
nsIFeedProcessor (à traduire de {{mediawiki.interwiki('en', 'nsIFeedProcessor', 'en:nsIFeedProcessor')}})
Analyse les flux RSS et Atom.
nsIFeedProgressListener (à traduire de {{mediawiki.interwiki('en', 'nsIFeedProgressListener', 'en:nsIFeedProgressListener')}})
Implémentée par le logiciel désirant analyser le flux RSS ou Atom pour recevoir des messages pendant le processus d'analyse.
nsIFeedResult (à traduire de {{mediawiki.interwiki('en', 'nsIFeedResult', 'en:nsIFeedResult')}})
Décrit le résultat de l'analyse d'un flux.
nsIFeedResultListener (à traduire de {{mediawiki.interwiki('en', 'nsIFeedResultListener', 'en:nsIFeedResultListener')}})
Implémentée par le logiciel désirant analyser le flux RSS ou Atom pour recevoir un message lorsque l'analyse est terminée.
nsIFeedTextConstruct (à traduire de {{mediawiki.interwiki('en', 'nsIFeedTextConstruct', 'en:nsIFeedTextConstruct')}})
Représente les valeurs texte dans un flux ; comprend les fonctions permettant de charger le texte au format texte ou HTML.
nsIScriptableUnescapeHTML (à traduire de {{mediawiki.interwiki('en', 'nsIScriptableUnescapeHTML', 'en:nsIScriptableUnescapeHTML')}})
Une classe utilitaire qui décode les chaînes HTML.

Exemple : lecture d'un flux depuis le Web

Il est assez facile de lire et d'analyser un flux. Utilisez XMLHttpRequest pour charger le flux, puis analysez la chaîne reçue à l'aide de nsIFeedProcessor.

Le chargement et l'envoi du flux vers l'analyseur se fait à l'aide d'un code semblable à :

  fetch: function(feedUrl)
  {
    var httpRequest = null;
    
    function infoReceived() {
      var data = httpRequest.responseText;
      
      var ioService = Components.classes['@mozilla.org/network/io-service;1']
                                         .getService(Components.interfaces.nsIIOService);
      var uri = ioService.newURI(feedUrl, null, null);
      
      if (data.length) {
        var parser = Components.classes["@mozilla.org/feed-processor;1"]
                                        .createInstance(Components.interfaces.nsIFeedProcessor);
        var listener = new FeedTestResultListener();
        try {
          parser.listener = listener;
          parser.parseFromString(data, uri);
        }
        catch(e) {
          alert("Error parsing feed.");
        }
      }
    }
    
    httpRequest = new XMLHttpRequest();
    
    httpRequest.open("GET", feedUrl, true);
    try {
      httpRequest.onload = infoReceived;
      httpRequest.send(null);
    }
    catch(e) {
      alert(e);
    }
  }

L'interface nsIFeedProcessor permet d'analyser les données du flux depuis plusieurs sources possibles ; dans ce cas, nous chargeons le document dans une chaîne, puis nous analysons celle-ci avec la méthode parseFromString(). Vous pouvez également l'analyser depuis un fichier en utilisant parseFromStream(), ou directement depuis une URL avec parseAsync().

La transformation finale du flux analysé est faite via la méthode handleResult() de l'objet FeedTestResultListener. Le code ressemble à cela :

    FeedTestResultListener.prototype = {
      handleResult: function(result) {
        var feed = result.doc;
        
        feed.QueryInterface(Components.interfaces.nsIFeed);
    
        // Ouvre une nouvelle fenêtre
    
        var win = window.open("", "FeedTest_Window");
        var doc = win.document;
    
        doc.open();
        
        // Écrit l'en-tête HTML et le titre de la page
        
        doc.write("<html><head><title>Feed: " + feed.title.text + "</title></head><body>");
        doc.write("<h1>" + feed.title.text + "</h1><p>");
          
        var itemArray = feed.items;
        var numItems = itemArray.length;
        
        // Écrit les informations sur l'article
        
        if (!numItems) {
          doc.write("<i>Pas de nouvelles, bonnes nouvelles !</i>");
        }
        else {
          var i;
          var theEntry;
          var theUrl;
          var info;
          
          for (i=0; i<numItems; i++) {
            theEntry = itemArray.queryElementAt(i, Components.interfaces.nsIFeedEntry);
            
            if (theEntry) {
              theUrl = 
              doc.write('<b><a href="' + theEntry.link.resolve("") + '">' + theEntry.title.text + '</a></b><br>');
              if (theEntry.summary) {
                info = theEntry.summary.text + "<p><hr><p>";
              }
              else {
                info = theEntry.content.text + "<p><hr><p>";
              }
              doc.write("<blockquote>" + info);
              doc.write("</blockquote><p>");
            }
          }
        }
        
        // Ferme le document ; c'est terminé !
        
        doc.write("</body></html>");
        doc.close();
      }
    }

La fonction handleResult() reçoit comme argument un objet nsIFeedResult, qui décrit un flux ; sa propriété doc est une objet nsIFeed qui contient toutes les données du flux.

Pour obtenir le titre du flux, cherchez la propriété feed.title. Le titre est de type nsIFeedTextConstruct qui peut présenter du texte dans différents formats ; on utilise sa propriété text pour extraire le titre du flux encodé en HTML. Nous pourrions également utiliser la méthode plainText() pour obtenir une copie du titre formatée en texte simple.

On peut parcourir la liste des éléments du flux en utilisant feed.items de type nsIArray. Cette liste contient les objects nsIFeedEntry qui décrivent chaque élément du flux.

On construit le document en récupérant les propriétés du titre, du lien, du résumé et du contenu de chaque élément. L'URL complète du lien est obtenue en utilisant la méthode resolve().

Pour initialiser l'extraction du flux, on appelle la fonction fetch(url). Ceci ouvre une nouvelle fenêtre affichant le contenu du flux, où les titres de chaque élément sont des liens redirigeant vers les articles correspondants.

Pour plus d'informations sur chaque interface d'accès au flux, consultez leurs pages de références respectives.

{{ wiki.languages( { "en": "en/Feed_content_access_API", "es": "es/API_de_acceso_a_canales" } ) }}

Source de la révision

<p><a href="fr/Firefox_2">Firefox 2</a> et Thunderbird 2 introduisent de nouvelles interfaces permettant aux développeurs d'extensions d'accéder plus facilement aux flux RSS et Atom.
</p>
<h2 name="Les_interfaces_de_flux">Les interfaces de flux</h2>
<dl><dt> <code><a href="fr/NsIFeed">nsIFeed</a></code> <small>(à traduire de {{mediawiki.interwiki('en', 'nsIFeed', 'en:nsIFeed')}})</small>
</dt><dd> Représente un flux RSS ou Atom.
</dd><dt> <code><a href="fr/NsIFeedContainer">nsIFeedContainer</a></code> <small>(à traduire de {{mediawiki.interwiki('en', 'nsIFeedContainer', 'en:nsIFeedContainer')}})</small>
</dt><dd> Une classe de base dont dérivent plusieurs des interfaces liées aux flux.
</dd><dt> <code><a href="fr/NsIFeedElementBase">nsIFeedElementBase</a></code> <small>(à traduire de {{mediawiki.interwiki('en', 'nsIFeedElementBase', 'en:nsIFeedElementBase')}})</small>
</dt><dd> Une classe de base dont dérivent plusieurs des autres interfaces liées aux flux.
</dd><dt> <code><a href="fr/NsIFeedEntry">nsIFeedEntry</a></code> <small>(à traduire de {{mediawiki.interwiki('en', 'nsIFeedEntry', 'en:nsIFeedEntry')}})</small>
</dt><dd> Représente une entrée unique dans un flux RSS ou Atom.
</dd><dt> <code><a href="fr/NsIFeedGenerator">nsIFeedGenerator</a></code> <small>(à traduire de {{mediawiki.interwiki('en', 'nsIFeedGenerator', 'en:nsIFeedGenerator')}})</small>
</dt><dd> Décrit le logiciel générateur du flux RSS ou Atom.
</dd><dt> <code><a href="fr/NsIFeedPerson">nsIFeedPerson</a></code> <small>(à traduire de {{mediawiki.interwiki('en', 'nsIFeedPerson', 'en:nsIFeedPerson')}})</small>
</dt><dd> Représente une personne. Contient le nom de la personne, son adresse de courrier électronique et celle de sa page Web.
</dd><dt> <code><a href="fr/NsIFeedProcessor">nsIFeedProcessor</a></code> <small>(à traduire de {{mediawiki.interwiki('en', 'nsIFeedProcessor', 'en:nsIFeedProcessor')}})</small>
</dt><dd> Analyse les flux RSS et Atom.
</dd><dt> <code><a href="fr/NsIFeedProgressListener">nsIFeedProgressListener</a></code> <small>(à traduire de {{mediawiki.interwiki('en', 'nsIFeedProgressListener', 'en:nsIFeedProgressListener')}})</small>
</dt><dd> Implémentée par le logiciel désirant analyser le flux RSS ou Atom pour recevoir des messages pendant le processus d'analyse.
</dd><dt> <code><a href="fr/NsIFeedResult">nsIFeedResult</a></code> <small>(à traduire de {{mediawiki.interwiki('en', 'nsIFeedResult', 'en:nsIFeedResult')}})</small>
</dt><dd> Décrit le résultat de l'analyse d'un flux.
</dd><dt> <code><a href="fr/NsIFeedResultListener">nsIFeedResultListener</a></code> <small>(à traduire de {{mediawiki.interwiki('en', 'nsIFeedResultListener', 'en:nsIFeedResultListener')}})</small>
</dt><dd> Implémentée par le logiciel désirant analyser le flux RSS ou Atom pour recevoir un message lorsque l'analyse est terminée.
</dd><dt> <code><a href="fr/NsIFeedTextConstruct">nsIFeedTextConstruct</a></code> <small>(à traduire de {{mediawiki.interwiki('en', 'nsIFeedTextConstruct', 'en:nsIFeedTextConstruct')}})</small>
</dt><dd> Représente les valeurs texte dans un flux ; comprend les fonctions permettant de charger le texte au format texte ou HTML.
</dd><dt> <code><a href="fr/NsIScriptableUnescapeHTML">nsIScriptableUnescapeHTML</a></code> <small>(à traduire de {{mediawiki.interwiki('en', 'nsIScriptableUnescapeHTML', 'en:nsIScriptableUnescapeHTML')}})</small>
</dt><dd> Une classe utilitaire qui décode les chaînes HTML.
</dd></dl>
<h2 name="Exemple_:_lecture_d.27un_flux_depuis_le_Web">Exemple : lecture d'un flux depuis le Web</h2>
<p>Il est assez facile de lire et d'analyser un flux. Utilisez <code><a href="fr/XMLHttpRequest">XMLHttpRequest</a></code> pour charger le flux, puis analysez la chaîne reçue à l'aide de <code><a href="fr/NsIFeedProcessor">nsIFeedProcessor</a></code>.
</p><p>Le chargement et l'envoi du flux vers l'analyseur se fait à l'aide d'un code semblable à :
</p>
<pre>  fetch: function(feedUrl)
  {
    var httpRequest = null;
    
    function infoReceived() {
      var data = httpRequest.responseText;
      
      var ioService = Components.classes['@mozilla.org/network/io-service;1']
                                         .getService(Components.interfaces.nsIIOService);
      var uri = ioService.newURI(feedUrl, null, null);
      
      if (data.length) {
        var parser = Components.classes["@mozilla.org/feed-processor;1"]
                                        .createInstance(Components.interfaces.nsIFeedProcessor);
        var listener = new FeedTestResultListener();
        try {
          parser.listener = listener;
          parser.parseFromString(data, uri);
        }
        catch(e) {
          alert("Error parsing feed.");
        }
      }
    }
    
    httpRequest = new XMLHttpRequest();
    
    httpRequest.open("GET", feedUrl, true);
    try {
      httpRequest.onload = infoReceived;
      httpRequest.send(null);
    }
    catch(e) {
      alert(e);
    }
  }
</pre>
<p>L'interface <code><a href="fr/NsIFeedProcessor">nsIFeedProcessor</a></code> permet d'analyser les données du flux depuis plusieurs sources possibles ; dans ce cas, nous chargeons le document dans une chaîne, puis nous analysons celle-ci avec la méthode <code>parseFromString()</code>. Vous pouvez également l'analyser depuis un fichier en utilisant <code>parseFromStream()</code>, ou directement depuis une URL avec <code>parseAsync()</code>.
</p><p>La transformation finale du flux analysé est faite via la méthode <code>handleResult()</code> de l'objet <code>FeedTestResultListener</code>.  Le code ressemble à cela :
</p>
<pre>    FeedTestResultListener.prototype = {
      handleResult: function(result) {
        var feed = result.doc;
        
        feed.QueryInterface(Components.interfaces.nsIFeed);
    
        // Ouvre une nouvelle fenêtre
    
        var win = window.open("", "FeedTest_Window");
        var doc = win.document;
    
        doc.open();
        
        // Écrit l'en-tête HTML et le titre de la page
        
        doc.write("&lt;html&gt;&lt;head&gt;&lt;title&gt;Feed: " + feed.title.text + "&lt;/title&gt;&lt;/head&gt;&lt;body&gt;");
        doc.write("&lt;h1&gt;" + feed.title.text + "&lt;/h1&gt;&lt;p&gt;");
          
        var itemArray = feed.items;
        var numItems = itemArray.length;
        
        // Écrit les informations sur l'article
        
        if (!numItems) {
          doc.write("&lt;i&gt;Pas de nouvelles, bonnes nouvelles !&lt;/i&gt;");
        }
        else {
          var i;
          var theEntry;
          var theUrl;
          var info;
          
          for (i=0; i&lt;numItems; i++) {
            theEntry = itemArray.queryElementAt(i, Components.interfaces.nsIFeedEntry);
            
            if (theEntry) {
              theUrl = 
              doc.write('&lt;b&gt;&lt;a href="' + theEntry.link.resolve("") + '"&gt;' + theEntry.title.text + '&lt;/a&gt;&lt;/b&gt;&lt;br&gt;');
              if (theEntry.summary) {
                info = theEntry.summary.text + "&lt;p&gt;&lt;hr&gt;&lt;p&gt;";
              }
              else {
                info = theEntry.content.text + "&lt;p&gt;&lt;hr&gt;&lt;p&gt;";
              }
              doc.write("&lt;blockquote&gt;" + info);
              doc.write("&lt;/blockquote&gt;&lt;p&gt;");
            }
          }
        }
        
        // Ferme le document ; c'est terminé !
        
        doc.write("&lt;/body&gt;&lt;/html&gt;");
        doc.close();
      }
    }
</pre> 
<p>La fonction <code>handleResult()</code> reçoit comme argument un objet <code><a href="fr/NsIFeedResult">nsIFeedResult</a></code>, qui décrit un flux ; sa propriété <code>doc</code> est une objet <code><a href="fr/NsIFeed">nsIFeed</a></code> qui contient toutes les données du flux.
</p><p>Pour obtenir le titre du flux, cherchez la propriété <code>feed.title</code>. Le titre est de type <code><a href="fr/NsIFeedTextConstruct">nsIFeedTextConstruct</a></code> qui peut présenter du texte dans différents formats ; on utilise sa propriété <code>text</code> pour extraire le titre du flux encodé en HTML. Nous pourrions également utiliser la méthode <code>plainText()</code> pour obtenir une copie du titre formatée en texte simple.
</p><p>On peut parcourir la liste des éléments du flux en utilisant <code>feed.items</code> de type <code><a href="fr/NsIArray">nsIArray</a></code>. Cette liste contient les objects <code><a href="fr/NsIFeedEntry">nsIFeedEntry</a></code> qui décrivent chaque élément du flux.
</p><p>On construit le document en récupérant les propriétés du titre, du lien, du résumé et du contenu de chaque élément. L'URL complète du lien est obtenue en utilisant la méthode <code>resolve()</code>.
</p><p>Pour initialiser l'extraction du flux, on appelle la fonction <code>fetch(<i>url</i>)</code>. Ceci ouvre une nouvelle fenêtre affichant le contenu du flux, où les titres de chaque élément sont des liens redirigeant vers les articles correspondants.
</p><p>Pour plus d'informations sur chaque interface d'accès au flux, consultez leurs pages de références respectives.
</p>{{ wiki.languages( { "en": "en/Feed_content_access_API", "es": "es/API_de_acceso_a_canales" } ) }}
Revenir à cette révision