API de acceso a canales

  • Enlace amigable (slug) de la revisión: API_de_acceso_a_canales
  • Título de la revisión: API de acceso a canales
  • Id de la revisión: 141982
  • Creada:
  • Creador: Guis
  • ¿Es la revisión actual? No
  • Comentario

Contenido de la revisión

{{wiki.template('Traducción', [ "inglés", "Feed content access API", "en" ])}}

Firefox 2 y Thunderbird 2 introduce una serie de interfaces que la hacen fácil para extension authors to access RSS and Atom feeds.

Feed interfaces

nsIFeed
Representa una RSS o Atom feed.
nsIFeedContainer
Una clase básica subclasificada por varias interfaces relacionadas a feed.
nsIFeedElementBase
Una clase básica subclasificada por varias de las otras interfaces relacionadas a feed.
nsIFeedEntry
Representa una única entrada a un RSS o Atom feed.
nsIFeedGenerator
Describe el programa que generó un RSS o atom feed.
nsIFeedPerson
Representa una persona. Contiene el nombre de la persona, la dirección de correo electrónico, y la dirección de la página personal.
nsIFeedProcessor
Analiza RSS y Atom feeds.
nsIFeedProgressListener
Implementada por el programa que quiere analizar un RSS o Atom feed para recibir mensajes durante el proceso de análisis.
nsIFeedResult
Describe el resultado de analizar un feed.
nsIFeedResultListener
Implementado por el programa que quiere analizar un RSS o Atom feed para recibir avisos cuando el análisis se complete.
nsIFeedTextConstruct
Representa valores de texto en un feed; incluye funciones que te permiten traer el texto como un texto plano o HTML.
nsIScriptableUnescapeHTML
Una clase de utilidad que unescapes las cadenas HTML.

Ejemplo: Leyendo un feed de la Web

Es actualmente bastante fácil de leer y analizar un feed. Usa un XMLHttpRequest para cargar el feed, luego pasa su cadena a un nsIFeedProcessor para analizar el feed.

Cargar el feed y enviarlo por al analizador es hecho usando un código similar a éste:

  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);
    }
  }

La interfaz nsIFeedProcessor te permite analizar los datos de feed desde varios orígenes posibles; en este caso, estamos cargando un documento en una cadena, luego analizando la cadena usando su método parseFromString() method. Sin embargo,tú podrías además analizarlo desde un archivo usando parseFromStream(), o directamente desde una URL usando parseAsync().

El actual procesamiento del análisis de feed es hecho por un método llamado handleResult() en el objeto FeedTestResultListener. Ese codigo luce como éste:

    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 función handleResult() recibe como sus argumentos un nsIFeedResult que describe un feed; su propiedad doc es un nsIFeed que contiene todo la data feed.

Para coger el título del feed, mira la propiedad feed.title. El título es un nsIFeedTextConstruct que puede representar el texto en varios formatos; obtenemos su propiedad text para traer el título de feed como un texto HTML codificado. Podríamos, alternativamente, usar su método plainText() para obtener una copia del título traducido en un texto plano.

We then scan the array of items in the feed by looking at the feed.items nsIArray. This array contains nsIFeedEntry objects that describe each feed item.

We build the contents of the document by looking at the title, link, summary, and content properties for each item. The full URL of the link is retrieved using the link's resolve() method.

To initialize a fetch of the feed, we simply call fetch(url). This opens a new window containing the feed contents, with each item's title a clickable link that takes you to the article itself.

For details on each of the feed access interfaces, visit their respective reference pages.

{{ wiki.languages( { "en": "en/Feed_content_access_API", "fr": "fr/API_d\'acc\u00e8s_au_contenu_de_flux" } ) }}

Fuente de la revisión

<p>{{wiki.template('Traducción', [ "inglés", "Feed content access API", "en" ])}}
</p><p><a href="es/Firefox_2">Firefox 2</a> y Thunderbird 2 introduce una serie de interfaces que la hacen fácil para   extension authors to access RSS and Atom feeds.
</p>
<h2 name="Feed_interfaces">Feed interfaces</h2>
<dl><dt> <code><a href="es/NsIFeed">nsIFeed</a></code>
</dt><dd> Representa una RSS o Atom feed.
</dd><dt> <code><a href="es/NsIFeedContainer">nsIFeedContainer</a></code>
</dt><dd> Una clase básica subclasificada por varias interfaces relacionadas a feed.
</dd><dt> <code><a href="es/NsIFeedElementBase">nsIFeedElementBase</a></code>
</dt><dd> Una clase básica subclasificada por varias de las otras interfaces relacionadas a feed.
</dd><dt> <code><a href="es/NsIFeedEntry">nsIFeedEntry</a></code>
</dt><dd> Representa una única entrada a un RSS o Atom feed.
</dd><dt> <code><a href="es/NsIFeedGenerator">nsIFeedGenerator</a></code>
</dt><dd> Describe el programa que generó un RSS o atom feed.
</dd><dt> <code><a href="es/NsIFeedPerson">nsIFeedPerson</a></code>
</dt><dd> Representa una persona. Contiene el nombre de la persona, la dirección de correo electrónico, y la dirección de la página personal.
</dd><dt> <code><a href="es/NsIFeedProcessor">nsIFeedProcessor</a></code>
</dt><dd> Analiza RSS y Atom feeds.
</dd><dt> <code><a href="es/NsIFeedProgressListener">nsIFeedProgressListener</a></code>
</dt><dd> Implementada por el programa que quiere analizar un RSS o Atom feed para recibir mensajes durante el proceso de análisis.
</dd><dt> <code><a href="es/NsIFeedResult">nsIFeedResult</a></code>
</dt><dd> Describe el resultado de analizar un feed.
</dd><dt> <code><a href="es/NsIFeedResultListener">nsIFeedResultListener</a></code>
</dt><dd> Implementado por el programa que quiere analizar un RSS o Atom feed para recibir avisos cuando el análisis se complete.
</dd><dt> <code><a href="es/NsIFeedTextConstruct">nsIFeedTextConstruct</a></code>
</dt><dd> Representa valores de texto en un feed; incluye funciones que te permiten traer el texto como un texto plano o HTML.
</dd><dt> <code><a href="es/NsIScriptableUnescapeHTML">nsIScriptableUnescapeHTML</a></code>
</dt><dd> Una clase de utilidad que unescapes las cadenas HTML.
</dd></dl>
<h2 name="Ejemplo:_Leyendo_un_feed_de_la_Web">Ejemplo: Leyendo un feed de la Web</h2>
<p>Es actualmente bastante fácil de leer y analizar un feed. Usa un <code><a href="es/XMLHttpRequest">XMLHttpRequest</a></code> para cargar el feed, luego pasa su cadena a un <code><a href="es/NsIFeedProcessor">nsIFeedProcessor</a></code> para analizar el feed.
</p><p>Cargar el feed y enviarlo por al analizador es hecho usando un código similar a éste:
</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>La interfaz <code><a href="es/NsIFeedProcessor">nsIFeedProcessor</a></code> te permite analizar los datos de feed desde varios orígenes posibles; en este caso, estamos cargando un documento en una cadena, luego analizando la cadena usando su método <code>parseFromString()</code> method. Sin embargo,tú podrías además analizarlo desde un archivo usando <code>parseFromStream()</code>, o directamente desde una URL usando <code>parseAsync()</code>.
</p><p>El actual procesamiento del análisis de feed es hecho por un método llamado <code>handleResult()</code> en el objeto <code>FeedTestResultListener</code>. Ese codigo luce como éste:
</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 función <code>handleResult()</code> recibe como sus argumentos un  <code><a href="es/NsIFeedResult">nsIFeedResult</a></code> que describe un feed; su propiedad <code>doc</code> es un <code><a href="es/NsIFeed">nsIFeed</a></code> que contiene todo la data feed.
</p><p>Para coger el título del feed, mira la propiedad <code>feed.title</code>. El título es un <code><a href="es/NsIFeedTextConstruct">nsIFeedTextConstruct</a></code> que puede representar el texto en varios formatos; obtenemos su propiedad <code>text</code> para traer el título de feed como un texto HTML codificado. Podríamos, alternativamente, usar su método <code>plainText()</code> para obtener una copia del título traducido en un texto plano.
</p><p>We then scan the array of items in the feed by looking at the <code>feed.items</code> <code><a href="es/NsIArray">nsIArray</a></code>.  This array contains <code><a href="es/NsIFeedEntry">nsIFeedEntry</a></code> objects that describe each feed item.
</p><p>We build the contents of the document by looking at the title, link, summary, and content properties for each item.  The full URL of the link is retrieved using the link's <code>resolve()</code> method.
</p><p>To initialize a fetch of the feed, we simply call <code>fetch(<i>url</i>)</code>.  This opens a new window containing the feed contents, with each item's title a clickable link that takes you to the article itself.
</p><p>For details on each of the feed access interfaces, visit their respective reference pages.
</p>{{ wiki.languages( { "en": "en/Feed_content_access_API", "fr": "fr/API_d\'acc\u00e8s_au_contenu_de_flux" } ) }}
Revertir a esta revisión