02 mayo, 2009

YQL Execute; select a from Internet; response.object=<item>a</item>

YQL es la nueva interfície de servicios web XML/JSONP de Yahoo!. Se parece a SQL y aporta como novedad YQL Execute, que es el soporte de JavaScript como lenguaje de procedimientos almacenados (una elección perfecta) por lo que ahora es posible usar JavaScript y E4X (la extensión del lenguaje para trabajar con XML nativamente) para extraer información de otras páginas web y consultar, filtrar o unir los resultados con YQL.

El lema de YQL de convertir Internet en una base de datos da un paso más hacia convertirse en una herramienta imprescindible capaz de crear con muy poco esfuerzo auténticos mash-ups de información: desde la obtención de datos de varias fuentes hasta una presentación personalizada de los resultados. Su estándar Open Data Tables ofrece unas guías para que se pueda publicar información y que sea fácilmente consultable mediante YQL sin necesidad de procesarla previamente. Pero si los datos que necesitamos no siguen el estándar, con YQL Execute se ofrece una flexibilidad extrema para procesar documentos HTML de Internet con Javascript y obtener justo lo que se necesita.

Los datos pueden ser accedidos de forma segura, combinados, filtrados, convertidos, retorcidos y, finalmente, generar un resultado en el formato óptimo para que las aplicaciones web se encuentren con el trabajo hecho y resulten muy fáciles de escribir.

Ejemplo:

<?xml version="1.0" encoding="UTF-8"?>
<table xmlns="http://query.yahooapis.com/v1/schema/table.xsd">
  <meta>
    <sampleQuery>select * from {table} where a='cat' and b='dog';</sampleQuery>
  </meta>
  <bindings>
    <select itemPath="" produces="XML">
      <urls>
        <url>http://fake.url/{a}</url>
      </urls>
      <inputs>
        <key id='a' type='xs:string' paramType='path' required="true" />
        <key id='b' type='xs:string' paramType='variable' required="true" />
      </inputs>
      <execute><![CDATA[
        // Your server-side javascript goes here
        response.object = <item>
          <url>{request.url}</url>
          <a>{a}</a>
          <b>{b}</b>
        </item>;
      ]]></execute>
    </select>
  </bindings>
</table>

El corazón de este ejemplo es el elemento "execute", que acepta varios valores de entrada del motor YQL (tal y como se indica en los elementos "input") y produce los datos a devolver. En el ejemplo, se crea un documento XML simple usando E4X y devolviéndolo con los valores "a" y "b" a partir de la sentencia YQL.

Para usar una sola tabla open data en YQL es necesario anteceder una sentencia use antes de ejecutar la consulta sobre la tabla. Por tanto, enviar la siguiente sentencia YQL a nuestro servicio importará la tabla de arriba y la ejecutará:

use "http://yqlblog.net/samples/helloworld.xml";

select * from helloworld where a="cat" and b="dog";

Puede verse el resultado aquí. Otros ejemplos en el blog de Yahoo! Developer. Via Ajaxian.

1 comentarios:

John Ortiz dijo...

Si hago una consulta y obtengo los resultados correspondientes, ¿cómo puedo recorrerlos para presentarlos en un documento HTML formateado con CSS?

Lo que básicamento pretendo hacer es una extensión para Google Chrome.

Gracias por esta información y por la ayuda que me podrás dar.

Hasta pronto.

Publicar un comentario en la entrada

Últimos links en indiza.com