Para comenzar primero veremos el siguiente código:
var win = Titatnium.UI.currentWindow; //declaramos el objeto del cliente http var xhr = Titanium.Network.createHTTPClient(); //este metodo procesara los datos remotos xhr.onload = function() { //Despliega en la consola las respuesta Ti.API.info(this.responseText); }; //este metodo sera usado en caso de que haiga algun //error accesando a los datos remotamente xhr.onerror = function() { //Nos desplegara el log del error en la consola Ti.API.error(this.status + ' - ' + this.statusText); }; //abre el feed de xml xhr.open('GET', 'http://www.elnorte.com/rss/ciencia.xml') //Ejecuta la llamada a el feed xhr.send();
Y lo que nos despliega el código en la consola es lo siguiente:
Ahora veremos como desplegarlo en tablas:
var win = Titanium.UI.currentWindow; //declaracion del arreglo vacio var datos = []; //declaramos el objeto del cliente http var xhr = Titanium.Network.createHTTPClient(); //creacion de la tabla var tabla = Titanium.UI.createTableView({ height: 366, width: 320, top: 0, left: 0 }); //agregamos tabla win.add(tabla); //este metodo procesara los datos remotos xhr.onload = function() { var xml = this.responseXML; //obtenemos el elemento del de la lista desde nuestro responseXML var items = xml.documentElement.getElementsByTagName("item"); //ciclo por cada item en xml for (var i = 0; i < items.length; i++){ //creacion de la fila de la tabla var fila = Titanium.UI.createTableViewRow({ title:items.item(i).getElementsByTagName("title").item(0).text }); //agregamos la fila al arreglo datos datos.push(fila); }//termina nuestro ciclo //Ahora le especificamos la propiedad de datos a nuestra tabla tabla.data = datos; }; //este metodo sera usado en caso de que haiga algun //error accesando a los datos remotamente xhr.onerror = function() { //Nos desplegara el log del error en la consola Ti.API.error(this.status + ' - ' + this.statusText); }; //abre el feed de xml xhr.open('GET', 'http://www.elnorte.com/rss/ciencia.xml') //Ejecuta la llamada a el feed xhr.send();
Y nos despliegará esto, que es un rss que lo tomé de la página de "El Norte":
Veremos como colocarle imágenes a cada fila y hacer que cada fila nos muestre el contenido, ya que en el anterior solamente vemos el título de la noticia:
var win = Titanium.UI.currentWindow; //declaracion del arreglo vacio var datos = []; //declaramos el objeto del cliente http var xhr = Titanium.Network.createHTTPClient(); //creacion de la tabla var tabla = Titanium.UI.createTableView({ height: 366, width: 320, top: 0, left: 0, rowHeight:70 //Le decimos el tamaño de nuestras filas }); //agregamos tabla win.add(tabla); //este metodo procesara los datos remotos xhr.onload = function() { var xml = this.responseXML; //obtenemos el elemento del de la lista desde nuestro responseXML var items = xml.documentElement.getElementsByTagName("item"); //ciclo por cada item en xml for (var i = 0; i < items.length; i++){ //creacion de la fila de la tabla var fila = Titanium.UI.createTableViewRow({ hasChild: true,//con esto decimos que tendrá una subsección la fila className: 'fila-rss'//propiedad de solo usar memoria necesaria, osea que solo las filas que veamos }); //etiqueta de titulo var tituloLabel = Titanium.UI.createLabel({ text:items.item(i).getElementsByTagName("title").item(0).text, //propiedades de la letra font:{fontSize: 14, fontWeight: 'bold'}, left:70, color:'#000000', top:5, height:20, width: 210 }); fila.add(tituloLabel); //etiqueta de descripcion var descripcionLabel = Titanium.UI.createLabel({ text:items.item(i).getElementsByTagName("description").item(0).text, font:{fontSize: 10, fontWeight:'normal'}, left: 70, color:'#000000', top: 25, height: 40, width: 200 }); if(descripcionLabel.text == ''){ descripcionLabel.text = 'Descripcion no disponible.'; } fila.add(descripcionLabel); //Agregamos un icono en el lado izquierdo a cada fila var icono = Titanium.UI.createImageView({ image:'paper.png', width: 30, height: 30, left: 10, top: 10 }); fila.add(icono); //agregamos la fila al arreglo datos datos.push(fila); }//termina nuestro ciclo //Ahora le especificamos la propiedad de datos a nuestra tabla tabla.data = datos; }; //este metodo sera usado en caso de que haiga algun //error accesando a los datos remotamente xhr.onerror = function() { //Nos desplegara el log del error en la consola Ti.API.error(this.status + ' - ' + this.statusText); }; //abre el feed de xml xhr.open('GET', 'http://www.elnorte.com/rss/ciencia.xml') //Ejecuta la llamada a el feed xhr.send();
Ahora veremos lo que nos despliega el código:
Ahora usaremos JSON, para ello nosotros usaremos Yahoo! YQL para acelerar el acceso a nuestros datos remotos.Para ello entramos a esta página http://developer.yahoo. com/yql/console :
Seleccionamos 'Data Tables', luego seleccionamos 'data' para después seleccionar 'feed'.Nos aparecerá algo como arriba pero con otra url, sustituimos por la misma que tenemos en la imágen y
seleccionamos JSON y Diagnostics,Para finalizar damos click en TEST y nos dará como resultado XML en formato JSON debajo de la etiqueta THE REST QUERY, una vez teniendo la url sustituimos esto ' por esto otro \' eliminaremos esta parte &callback=cbfunc que es la última.
Ahora modificaremos nuestro código:
var win = Titanium.UI.currentWindow; //declaracion del arreglo vacio var datos = []; //declaramos el objeto del cliente http var xhr = Titanium.Network.createHTTPClient(); //creacion de la tabla var tabla = Titanium.UI.createTableView({ height: 366, width: 320, top: 0, left: 0, rowHeight:70 //Le decimos el tamaño de nuestras filas }); //agregamos tabla win.add(tabla); //este metodo procesara los datos remotos xhr.onload = function() { //Creamos un objeto json usando la funcion JSON.parse; nos sirve para parsear datos en JSON var jsonObject = JSON.parse(this.responseText); //ciclo por cada item en json for (var i = 0; i < jsonObject.query.results.item.length; i++){ //creacion de la fila de la tabla var fila = Titanium.UI.createTableViewRow({ hasChild: true,//con esto decimos que tendrá una subsección la fila className: 'fila-rss',//propiedad de solo usar memoria necesaria, osea que solo las filas que veamos backgroundColor: '#FFFFFF' }); //etiqueta de titulo var tituloLabel = Titanium.UI.createLabel({ text:jsonObject.query.results.item[i].title, //propiedades de la letra font:{fontSize: 14, fontWeight: 'bold'}, left:70, color:'#000000', top:5, height:20, width: 210 }); fila.add(tituloLabel); //etiqueta de descripcion var descripcionLabel = Titanium.UI.createLabel({ text:jsonObject.query.results.item[i].description, font:{fontSize: 10, fontWeight:'normal'}, left: 70, color:'#000000', top: 25, height: 40, width: 200 }); if(descripcionLabel.text == ''){ descripcionLabel.text = 'Descripcion no disponible.'; } fila.add(descripcionLabel); //Agregamos un icono en el lado izquierdo a cada fila var icono = Titanium.UI.createImageView({ image:'paper.png', width: 30, height: 30, left: 10, top: 10 }); fila.add(icono); //agregamos la fila al arreglo datos datos.push(fila); }//termina nuestro ciclo //Ahora le especificamos la propiedad de datos a nuestra tabla tabla.data = datos; }; //este metodo sera usado en caso de que haiga algun //error accesando a los datos remotamente xhr.onerror = function() { //Nos desplegara el log del error en la consola Ti.API.error(this.status + ' - ' + this.statusText); }; //abre el feed de xml xhr.open('GET', 'http://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20feed%20where%20url%3D\'www.elnorte.com%2Frss%2Fciencia.xml\'&format=json&diagnostics=true') //Ejecuta la llamada a el feed xhr.send();
Esto es lo que nos despliega el código corriendo:
Vieron la diferencia?, si están leyendo probablemente dirán que esta loco veo lo mismo pero si lo corren verán de que estoy hablando ;) ... me refiero a velocidad .
Fuentes:
Ayuda de desarrollador de Appcelerator
http://developer.appcelerator.com/
Consola YQL
http://developer.yahoo.com/yql/
Bien; van 9 pts para el lab.
ResponderEliminarFuck! eso es rapidez demonios tenias razón excelente explicación saludos. You Rock men
ResponderEliminar