Yahoo Query Language – ¡¡Estoy sorprendido!!

Hace poco tuve que empezar un proyecto en el que básicamente tenía que conseguir coger contenido de páginas externas (con el consiguiente permiso, claro), tratarlo y volverlo a poner en otro lugar. Había mirado mil formas de hacerlo, desde scripts basados en jQuery hasta auténticas “hackadas” usando versiones modificadas de llamadas usando JSON mediante Ajax para emular un GET de HTTP para parsear todo el contenido de la web… en fin, nada realmente limpio que me convenciera, hasta que ayer, y por pura casualidad encontré YQL (https://developer.yahoo.com/yql), más conocido como Yahoo Query Language y ¡¡Vaya cosa!!

Pero, ¿qué hace YQL? Pues básicamente, y usando un pseudolenguage basado en SQL, es decir, usando SELECTs y similares podemos hacer búsquedas de lo que queramos en una URL determinada. Para colmo YQL tiene una consola donde podemos hacer todos los tests habidos y por haber que queramos probar antes de implementar nuestro código. Una vez contentos con el resultado lo que hacemos es implementar una llamada AJAX mediante JavaScript a la URL generada por YQL y ¡¡Tachán!! obtenemos un bonito XML, o JSON con el contenido.

La cosa es más potente de lo que imaginamos… por poneros ejemplos:

  • Obtener los titulares de los RSS de Yahoo news:
    • select title from rss where url=”https://rss.news.yahoo.com/rss/topstories”
  • Obtener los lugares del mundo que se llamen Madrid (os sorprendería ver los resultados):
    • select * from geo.places where text=”madrid”

Por ejemplo, para la primera consulta, y si queremos el resultado en un JSON tendríamos que hacer una llamada AJAX a la siguiente URL:

https://query.yahooapis.com/v1/public/yql?q=select%20title%20from%20rss%20where%20url%3D%22http%3A%2F%2Frss.news.yahoo.com%2Frss%2Ftopstories%22&format=json&diagnostics=true&callback=

No voy a entrar en detalle de cómo crear una llamada AJAX, pero en caso de usar algo como jQuery podría ser algo así:

$.getJSON( "https://query.yahooapis.com/v1/public/yql?q=select%20title%20from%20rss%20where%20url%3D%22http%3A%2F%2Frss.news.yahoo.com%2Frss%2Ftopstories%22&format=json&diagnostics=true&callback=", function( json ) {
console.log( "JSON Data: " + json );
});
La verdad es que no tengo ni idea de si la gran competencia (Google) tiene algo parecido. A mí me ha venido de perlas y funciona a la perfección con lo que necesito.