diff options
Diffstat (limited to 'files/es/api_de_acceso_a_canales/index.html')
-rw-r--r-- | files/es/api_de_acceso_a_canales/index.html | 166 |
1 files changed, 166 insertions, 0 deletions
diff --git a/files/es/api_de_acceso_a_canales/index.html b/files/es/api_de_acceso_a_canales/index.html new file mode 100644 index 0000000000..7c21ceb776 --- /dev/null +++ b/files/es/api_de_acceso_a_canales/index.html @@ -0,0 +1,166 @@ +--- +title: API de acceso a canales +slug: API_de_acceso_a_canales +tags: + - Complementos + - Todas_las_Categorías + - extensiones +translation_of: Mozilla/Tech/Feed_content_access_API +--- +<p><a href="/es/Firefox_2_para_desarrolladores" title="es/Firefox_2_para_desarrolladores">Firefox 2</a> y Thunderbird 2 introducen una serie de interfaces que hacen más sencillo que los autores de extensiones accedan a los canales RSS y Atom.</p> +<h2 id="Interfaces_del_canal" name="Interfaces_del_canal">Interfaces del canal</h2> +<dl> + <dt> + <code><a href="/es/NsIFeed" title="es/NsIFeed">nsIFeed</a></code></dt> + <dd> + Representa un canal RSS o Atom.</dd> + <dt> + <code><a href="/es/NsIFeedContainer" title="es/NsIFeedContainer">nsIFeedContainer</a></code></dt> + <dd> + Una clase básica subclasificada por varias interfaces relacionadas al canal.</dd> + <dt> + <code><a href="/es/NsIFeedElementBase" title="es/NsIFeedElementBase">nsIFeedElementBase</a></code></dt> + <dd> + Una clase básica subclasificada por varias de las otras interfaces relacionadas con el canal.</dd> + <dt> + <code><a href="/es/NsIFeedEntry" title="es/NsIFeedEntry">nsIFeedEntry</a></code></dt> + <dd> + Representa una única entrada en un canal RSS o Atom.</dd> + <dt> + <code><a href="/es/NsIFeedGenerator" title="es/NsIFeedGenerator">nsIFeedGenerator</a></code></dt> + <dd> + Describe el programa que generó un canal RSS o Atom.</dd> + <dt> + <code><a href="/es/NsIFeedPerson" title="es/NsIFeedPerson">nsIFeedPerson</a></code></dt> + <dd> + Representa a 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" title="es/NsIFeedProcessor">nsIFeedProcessor</a></code></dt> + <dd> + Analiza canales RSS y Atom.</dd> + <dt> + <code><a href="/es/NsIFeedProgressListener" title="es/NsIFeedProgressListener">nsIFeedProgressListener</a></code></dt> + <dd> + Implementada por el programa que quiere analizar un canal RSS o Atom, para recibir mensajes durante el proceso de análisis.</dd> + <dt> + <code><a href="/es/NsIFeedResult" title="es/NsIFeedResult">nsIFeedResult</a></code></dt> + <dd> + Describe el resultado al analizar un canal.</dd> + <dt> + <code><a href="/es/NsIFeedResultListener" title="es/NsIFeedResultListener">nsIFeedResultListener</a></code></dt> + <dd> + Implementado por el programa que quiere analizar un canal RSS o Atom para recibir avisos cuando el análisis se complete.</dd> + <dt> + <code><a href="/es/NsIFeedTextConstruct" title="es/NsIFeedTextConstruct">nsIFeedTextConstruct</a></code></dt> + <dd> + Representa valores de texto en un canal; incluye funciones que permiten traer el texto como texto sin formato o como HTML.</dd> + <dt> + <code><a href="/es/NsIScriptableUnescapeHTML" title="es/NsIScriptableUnescapeHTML">nsIScriptableUnescapeHTML</a></code></dt> + <dd> + Una clase de utilidad que elimina las secuencias de escape de las cadenas HTML.</dd> +</dl> +<h2 id="Ejemplo:_Leer_un_canal_de_la_Web" name="Ejemplo:_Leer_un_canal_de_la_Web">Ejemplo: Leer un canal de la Web</h2> +<p>Realmente es bastante fácil leer y analizar un canal: Usa un <code><a href="/es/XMLHttpRequest" title="es/XMLHttpRequest">XMLHttpRequest</a></code> para cargar el canal, y luego pasa su cadena a un <code><a href="/es/NsIFeedProcessor" title="es/NsIFeedProcessor">nsIFeedProcessor</a></code> para analizarlo.</p> +<p>Cargar el canal y enviarlo al analizador sintáxtico se hace 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 al analizar el canal."); + } + } + } + + 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" title="es/NsIFeedProcessor">nsIFeedProcessor</a></code> te permite analizar los datos del canal desde varias fuentes distintas; en este caso, estamos cargando un documento en una cadena, para seguidamente analizar la cadena usando su método <code>parseFromString()</code>. Sin embargo, también se podría analizar desde un archivo usando <code>parseFromStream()</code>, o directamente desde una URL usando <code>parseAsync()</code>.</p> +<p>El procesamiento real de análisis del canal se hace por un método llamado <code>handleResult()</code> en el objeto <code>FeedTestResultListener</code>. Ese código es similar a éste:</p> +<pre> FeedTestResultListener.prototype = { + handleResult: function(result) { + var feed = result.doc; + + feed.QueryInterface(Components.interfaces.nsIFeed); + + // Abre una nueva ventana + + var win = window.open("", "FeedTest_Window"); + var doc = win.document; + + doc.open(); + + // Escribe la cabecera HTML y el título de la página + + 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>¡Que no haya noticias es buena noticia!</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>"); + } + } + } + + // Cerramos el documento; ¡hemos acabado! + + doc.write("</body></html>"); + doc.close(); + } + } +</pre> +<p>La función <code>handleResult()</code> recibe como argumento un <code><a href="/es/NsIFeedResult" title="es/NsIFeedResult">nsIFeedResult</a></code> que describe un canal; su propiedad <code>doc</code> es un <code><a href="/es/NsIFeed" title="es/NsIFeed">nsIFeed</a></code> que contiene todos los datos del canal.</p> +<p>Para obtener el título del canal, se consulta la propiedad <code>feed.title</code>. El título es un <code><a href="/es/NsIFeedTextConstruct" title="es/NsIFeedTextConstruct">nsIFeedTextConstruct</a></code> que puede representar el texto en varios formatos; obtenemos su propiedad <code>text</code> para representar el título del canal como un texto codificado en HTML. Podríamos, alternativamente, usar su método <code>plainText()</code> para obtener una copia del título traducido a texto sin formato.</p> +<p>Luego examinamos el array (arreglo) de artículos en el canal consultando el <code>feed.items</code> <code><a href="/es/NsIArray" title="es/NsIArray">nsIArray</a></code>. Este array contiene los objetos <code><a href="/es/NsIFeedEntry" title="es/NsIFeedEntry">nsIFeedEntry</a></code> que describen cada artículo del canal.</p> +<p>Construimos el contenido de los documentos accediendo a las propiedades del título, enlace, resumen y contenido para cada artículo. La URL completa del enlace se recupera usando el método <code>resolve()</code> del enlace.</p> +<p>Para iniciar la lectura de un canal, simplemente llamamos <code>fetch(<em>url</em>)</code>. Esto abre una nueva ventana con el contenido del canal, pudiendo hacer clic en cada título de las entradas que nos llevarán al artículo en sí.</p> +<p>Para los detalles de cada uno de las interfaces de acceso al canal, visita sus respectivas páginas de referencia.</p> |