Yahoo Pipes, YQL e JSONP

Obsoleto O código deste exemplo non está actualizado e podería non traballar correctamente ao empregar fontes de datos externas.

yahoo_pipesComo na nosa Galicia é moi habitual que chova (inda que estemos en verán), hoxe deume a cabeza para xogar con Yahoo Pipes e ver de que vai esta tecnología. Yahoo! Pipes é un contorno web 2.0 que permite definir de forma visual a transformación dunha fonte de entrada (xml, json, ...) e obter unha saída que poderá ser reutilizada por outras pipes ou outros servizos. Este concepto é coñecido como Mashup (aplicación híbrida, servizos que empregan outros servizos para proporcionar novos servizos).

EXPERIMENTO: cargar a fonte RSS dunha web nunha pipe para transformala en JSON, tendo desta maneira a posibilidade de cargar os datos dende javascript noutra web (noutro dominio e dende o lado cliente) vía JSONP.

Lendo a documentación de Yahoo! Pipes descubro que hai unha nova forma de alimentarse dos datos dun RSS que se chama YQL (Yahoo! Query Language). Lendo un pouco vexo que para levar a cabo o experimento plantexado non é preciso facer uso de Yahoo! Pipes senón que é posible empregar YQL independentemente facendo unha petición a un web service. Replantexamos o experimento:

EXPERIMENTO v0.2: cargar os datos dun RSS en formato JSON coa axuda de YQL.

 

Facendo unhas probas coa consola de YQL e obtemos a "SQL" que temos que pasar ao web service:

select * from rss where url="http://www.xornal.com/rss/opinion/" limit 10

URL á que realizar a petición vía JSONP:

http://query.yahooapis.com/v1/public/yql?q=select...&format=json&callback=cbfunc

 

Con esta URL xa podemos realizar a petición e co resultado en JSON formatealo. No seguinte código amósase un exemplo de código javascript que carga os datos da fonte RSS vía petición JSONP a YQL, e formatea o resultado nunha lista HTML con ligazóns aos artigos de opinión de Xornal.com:

dojo.require("dojo.io.script");
dojo.require("dojo.string");

// Callback
var renderOpinions = function(data) {
if((parseInt(data.query.count) > 0)) {
var lista = dojo.byId('resultado');
lista.innerHTML = ''; // Limpiar si xa existen elementos de antes

dojo.forEach(data.query.results.item, function(opinion) {
var listItem = document.createElement('li');
listItem.innerHTML = dojo.string.substitute(
'[${author}]<a href="${link}">${title}</a>', opinion);
lista.appendChild(listItem);
});
}
};


// Cargar opinións vía JSONP
// SEE dojo.io.script
var foo = dojo.io.script.get({
callbackParamName: 'callback',
load: renderOpinions, // function(json){console.log(json)}
content: {
q: 'select * from rss where url="http://www.xornal.com/rss/opinion/"',
format: 'json'
},
url: 'http://query.yahooapis.com/v1/public/yql'
});

No exemplo de código faise uso do framework javascript Dojo para realizar a chamada JSONP dun xeito máis sinxelo. Este framework contén moitas funcionalidades que simplifican o traballo. Facendo uso de: dojo.io.script.get podemos facer a chamada á URL de YQL. O código en funcionamento pódese probar dende aquí.

 

EXPERIMENTO v0.3: Retomamos o experimento inicial para amplialo facendo uso agora de Yahoo! Pipes e YQL, e crearemos unha Pipe que liste unicamente os artigos de opinión dun autor que lle proporcionaremos previamente.

 

No contorno de Yahoo! Pipes definimos unha cadea de texto coa sintase da SQL (privatestring), na que substituiremos (strreplace) o nome do autor que solicitamos ao usuario (textinput). Unha vez construida a SQL necesaria

select * from rss where url="http://www.xornal.com/rss/opinion/" AND author matches ".*Reixa.*"

realizamos a captura dos datos con YQL e recuperamos o contido. Toda esta parte pode resultar incomprensible vista sobre o texto pero dende o contorno de Pipes resulta moi sinxelo:

pipe_edit
Detalle da Pipe para filtrar opinións por autor

 

Unha vez gardada a Pipe é posible publicala para que outra xente poida facer uso dela. Para este experimento a ligazón é:

http://pipes.yahoo.com/pipes/pipe.info?_id=HNbyvcZ_3hG9G_W_pJDuew

pipe_published
Detalle da versión publicada da Pipe

 

As posibilidades facendo uso de YQL increméntanse tendo en conta que tamén é posible extraer contido HTML (web scraping) de calquera páxina. Outro experimento podería ser como recuperar información da wikipedia, traducir o contido cos servizos de google e incluir o resultado nun blogue.
Última actualización 2012-08-15
1:48 AM (Europe/Madrid)
Data de creación 2009-08-01
6:45 PM (Europe/Madrid)
javascript mashup ria

Relacionados