mozilla

Revision 262933 of 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 : 262933
  • Créé :
  • Créateur : Fredchat
  • Version actuelle ? Non
  • Commentaire /* Suite de la traduction */
Étiquettes : 

Contenu de la révision

{{template.Traduction_en_cours("Feed content access API")}} 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
Représente un flux RSS ou Atom.
nsIFeedContainer
A base class subclassed by several of the feed-related interfaces.
nsIFeedElementBase
A base class subclassed by several of the other feed-related interfaces.
nsIFeedEntry
Représente une entrée simple dans un flux RSS ou Atom.
nsIFeedGenerator
Décrit le logiciel générateur du flus RSS.
nsIFeedPerson
Représente une personne. Contient le nom de la personne, son courriel et l'adresse de sa page Web.
nsIFeedProcessor
Analyse les flux RSS et Atom.
nsIFeedProgressListener
Implémenté par le logiciel qui veut analyser le flux RSS ou Atom pour recevoir un message pendant le processus d'analyse.
nsIFeedResult
Décrit le résultat de l'analyse d'un flux.
nsIFeedResultListener
Implémenté par le logiciel qui veut analyser le flux RSS ou Atom pour recevoir un message lorsque l'analyse est terminée.
nsIFeedTextConstruct
Représente les valeurs texte dans un flux ; inclus les fonctions qui vous permettent de charger le texte au format texte plein ou HTML.
nsIScriptableUnescapeHTML
Une classe utilitaire qui décode les chaînes HTML.

Exemple : Lecture d'un flux depuis Internet

Il est assez facile de lire et d'analyser un flux. Utilisez XMLHttpRequest pour charge le flux, puis analysez ses chaînes à l'aide de nsIFeedProcessor.

Charger et envoyer le flux vers l'analyseur, se fait à l'aide d'un code similaire à :

  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 vous permet d'analyser les données du flux depuis de multiples sources ; 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().

The actual processing of the parsed feed is done by a method called handleResult() on the FeedTestResultListener object. Le code ressemble à cela :

    FeedTestResultListener.prototype = {
      handleResult: function(result) {
        var feed = result.doc;
        
        feed.QueryInterface(Components.interfaces.nsIFeed);
    
        // Open a new window
    
        var win = window.open("", "FeedTest_Window");
        var doc = win.document;
    
        doc.open();
        
        // Write the HTML header and page title
        
        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;
        
        // Write the article information
        
        if (!numItems) {
          doc.write("<i>No news is good news!</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>");
            }
          }
        }
        
        // Close the document; we're done!
        
        doc.write("</body></html>");
        doc.close();
      }
    }

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

Pour obtenir le titre du flux, cherchez la propriété feed.title. Le titre est une interface nsIFeedTextConstruct qui peut présenter du texte suivant différents formats ; on utilise la 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 plein.

On peut parcourir la liste des éléments du flux en utilisant feed.items 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éments sont des liens qui vous redirigent vers les articles correspondants.

Pour plus d'informations sur chaque interface d'accès au flux, consultez leur page référence respectivement.

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

Source de la révision

<p>{{template.Traduction_en_cours("Feed content access API")}}
<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>
</dt><dd> Représente un flux RSS ou Atom.
</dd><dt> <code><a href="fr/NsIFeedContainer">nsIFeedContainer</a></code>
</dt><dd> <i>A base class subclassed by several of the feed-related interfaces.</i>
</dd><dt> <code><a href="fr/NsIFeedElementBase">nsIFeedElementBase</a></code>
</dt><dd> <i>A base class subclassed by several of the other feed-related interfaces.</i>
</dd><dt> <code><a href="fr/NsIFeedEntry">nsIFeedEntry</a></code>
</dt><dd> Représente une entrée simple dans un flux RSS ou Atom.
</dd><dt> <code><a href="fr/NsIFeedGenerator">nsIFeedGenerator</a></code>
</dt><dd> Décrit le logiciel générateur du flus RSS.
</dd><dt> <code><a href="fr/NsIFeedPerson">nsIFeedPerson</a></code>
</dt><dd> Représente une personne. Contient le nom de la personne, son courriel et l'adresse de sa page Web.
</dd><dt> <code><a href="fr/NsIFeedProcessor">nsIFeedProcessor</a></code>
</dt><dd> Analyse les flux RSS et Atom.
</dd><dt> <code><a href="fr/NsIFeedProgressListener">nsIFeedProgressListener</a></code>
</dt><dd> Implémenté par le logiciel qui veut analyser le flux RSS ou Atom pour recevoir un message pendant le processus d'analyse.
</dd><dt> <code><a href="fr/NsIFeedResult">nsIFeedResult</a></code>
</dt><dd> Décrit le résultat de l'analyse d'un flux.
</dd><dt> <code><a href="fr/NsIFeedResultListener">nsIFeedResultListener</a></code>
</dt><dd> Implémenté par le logiciel qui veut 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>
</dt><dd> Représente les valeurs texte dans un flux ; inclus les fonctions qui vous permettent de charger le texte au format <i>texte plein</i> ou <i>HTML</i>.
</dd><dt> <code><a href="fr/NsIScriptableUnescapeHTML">nsIScriptableUnescapeHTML</a></code>
</dt><dd> Une classe utilitaire qui décode les chaînes HTML.
</dd></dl>
<h2 name="Exemple_:_Lecture_d.27un_flux_depuis_Internet">Exemple : Lecture d'un flux depuis Internet</h2>
<p>Il est assez facile de lire et d'analyser un flux. Utilisez <code><a href="fr/XMLHttpRequest">XMLHttpRequest</a></code> pour charge le flux, puis analysez ses chaînes à l'aide de <code><a href="fr/NsIFeedProcessor">nsIFeedProcessor</a></code>.
</p><p>Charger et envoyer le flux vers l'analyseur, se fait à l'aide d'un code similaire à :
</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> vous permet d'analyser les données du flux depuis de multiples sources ; 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>The actual processing of the parsed feed is done by a method called <code>handleResult()</code> on the <code>FeedTestResultListener</code> object.  Le code ressemble à cela :
</p>
<pre>    FeedTestResultListener.prototype = {
      handleResult: function(result) {
        var feed = result.doc;
        
        feed.QueryInterface(Components.interfaces.nsIFeed);
    
        // Open a new window
    
        var win = window.open("", "FeedTest_Window");
        var doc = win.document;
    
        doc.open();
        
        // Write the HTML header and page title
        
        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;
        
        // Write the article information
        
        if (!numItems) {
          doc.write("&lt;i&gt;No news is good news!&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;");
            }
          }
        }
        
        // Close the document; we're done!
        
        doc.write("&lt;/body&gt;&lt;/html&gt;");
        doc.close();
      }
    }
</pre> 
<p>La fonction <code>handleResult()</code> reçoit comme argument <code><a href="fr/NsIFeedResult">nsIFeedResult</a></code>, qui décrit un flux ; sa propriété <code>doc</code> est une interface <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 une interface <code><a href="fr/NsIFeedTextConstruct">nsIFeedTextConstruct</a></code> qui peut présenter du texte suivant différents formats ; on utilise la 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 plein.
</p><p>On peut parcourir la liste des éléments du flux en utilisant <code>feed.items</code> <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éments sont des liens qui vous redirigent vers les articles correspondants.
</p><p>Pour plus d'informations sur chaque interface d'accès au flux, consultez leur page référence respectivement.
</p>{{ wiki.languages( { "en": "en/Feed_content_access_API", "es": "es/API_de_acceso_a_canales" } ) }}
Revenir à cette révision