Hace un par de semanas llevé a la práctica mi idea de una remezcla de Flickr y 11870. Se trata de un script de usuario, desarrollado con Greasemonkey, muy simple. Si una foto de Flickr está relacionada con un establecimiento con ficha en 11870 solo tenemos taguear la foto con una machine tag de la forma onceocho:id=[id_del_establecimiento_en_11870]; el script añadirá al pie de la foto una pequeña sección con el nombre del establecimiento, su dirección y el enlace a la ficha completa en 11870.com. Puede verse un ejemplo en esta captura de pantalla, aunque lo mejor es que te instales el script.

Voy a explicar a grandes rasgos las piezas fundamentales de la creación del script. Un mashup como este, es decir, un sitio o script cuya principal funcionalidad se deriva de agregar datos de dos o más aplicaciones, puede estar basado en servidor, creando una tercera aplicación que realice la remezcla, o basado en cliente, mediante un programa javascript funcionando en la plataforma adecuada (que serían Firefox+Greasemonkey u Opera) para modificar un sitio objetivo e inyectar datos de otro u otros sitios. Esta remezcla en cuestión es del segundo tipo, y funciona inyectando en las páginas de Flickr datos obtenidos de 11870.
Los sitios de los que deseemos obtener datos reutilizables estarán situados en algún punto de una escala de transparencia. En el cero estarían sitios totalmente opacos, que podemos identificar con los realizados en Adobe Flash. A continuación aquellos realizados en muy malo, mal HTML, HTML normalillo y así hasta llegar a los realizados en POSH, donde podemos colocar el cinco. Todos estos sitios son con mayor o menos dificultad aproximables mediante técnicas de "screen scraping" gracias a las potentes herramientas disponibles como LWP o Hpricot. Rondando el nueve estarían las APIs estructuradas de recuperación de datos y acercándose al diez, las aproximaciones más innovadoras a interfaces no estructuradas de consulta, acercándose a la visión de las web como la conjunción de silos de datos, en el que el "sitio web" tradicional solo sería una de las muchas serializaciones posibles (esto ya está firmemente apuntado con la convicencia de distintas serializaciones, por ejemplo feeds, widgets, centralizadas o distribuidas)
En un punto dulce de la escala (en torno al notable) podriamos situar las interfaces HTML que usan microformatos. Los microformatos son un ejemplo de una serialización mixta, en la que el documento HTML dobla sus funciones: además de la más obvia, servir al agente de usuario para construir un DOM, un documento con microformatos embebidos permite a herramientas especializadas abstraer la recuperación de nodos de contenido. Los microformatos permiten por tanto la existencia de un ecosistema de herramientas que trivializan y amateurizan la recuperación de piezas de información. Con los microformatos, la unidad básica de información de una página se convierte en una "commodity". 11870.com utiliza microformatos en sus páginas. Concretamente la información de un establecimiento está microformateada con hCard, pensado para representar "gente, empresas, organizaciones y lugares" y por tanto idóneo para el uso que se le da en este caso.
A la hora de procesar una página microformateada tenemos dos opciones. La primera es utilizar un parseador de microformatos nativo para nuestro lenguaje; la segunda, construir un puente que traduzca la información de HTML+microformato a otra representación que consumiremos. En este caso, a pesar de encontrar un parseador Javascript de microformatos llamado Sumo y creado por Dan Webb, he optado por la segunda ópción y creado una pasarela que, dada una URL determinada microformateada con hCard, devuelve una salida en JSON, un formato ligero de intercambio de datos y que es especialmente adecuado para nuestro caso por poder evaluarse a tipos de datos nativos de Javascript, lo que nos facilita enormemente el manipulado de la información recibida.
Las dependencias son dos: hKit, un parseador de microformatos en PHP de Drew McLellan y esta clase PEAR de codificación/descodificación JSON. En caso de haber realizado la pasarela en Ruby, los equivalentes serían la fantástica mofo y ruby/json.
Hay dos aspectos secundarios pero fundamentales que he intentado plasmar en el puente de forma correcta: las respuestas de un servicio web siempre deben ir acompañadas de un código HTTP y un tipo MIME adecuados. La interoperabilidad, que es el plasma sanguíneo de la web, depende de la predectibilidad y coherencia de los mensajes transportados. En referencia a los códigos HTTP, la pasarela maneja un subconjunto de tres condiciones y códigos correspondientes. Dos están en la clase 4xx (error del cliente) y uno en la clase 2xx (éxito de la petición):
- El script no ha recibido el obligatorio parametro url. Respuesta con código 400 Bad Request.
- El script no ha obtenido datos para la URL corresponiente. Respuesta con código 404 Not Found.
- El script ha logrado recuperar la url suministrada y extraer datos marcados con hCard. Respuesta con código 200 OK.
Respecto a los tipos MIME, la pasarela maneja text/plain para los mensajes de error y application/json, el tipo recomendado, para las respuestas JSON.
Una vez recuperado los datos de la pasarela, el desenlace en el script de usuario es sencillo. Detectamos las "machine tags", que actúan de mecanismo ligero de enlace entre recursos, en este caso, entre el recurso "foto" y el recurso "establecimiento". A continuación recuperamos la información en JSON desde la pasarela e insertamos los datos en el DOM de la página. Lo único destacable es señalar como el desarrollo de scripts de usuario permite el empotrado de archivos binarios (en este caso el logo de 11870.com) mediante el uso de data URIs (una explicación de este patrón la da Mark Pilgrim). Para la creación de la data: URI para el logo de 11870 he recurrido a la utilidad data: URI kitchen de Hixie.
Como conclusión: hemos visto como los scripts de usuario permiten la remezcla de dos o más servicios para aumentar el valor añadido de un recurso determinado, en este caso proporcionar un "vista previa" de la ficha de un establecimiento en 11870.com adjunta a una fotografía de este establecimiento en Flickr. Para la creación de este tipo de aplicaciones de remezcla es fundamental disponer de fuentes de datos transparentes, cosa que los publicadores pueden asegurar de forma fácil mediante la utilización de microformatos. En los desarrollos es fundamental que aseguremos una correcta interoperabilidad mediante la utilización de códigos HTTP y tipos MIME adecuados. Finalmente, hemos un visto un tip sobre la inclusión de datos binarios en forma de texto mediante "data: URIs"
Recent comments
25 weeks 8 hours ago
25 weeks 4 days ago
25 weeks 5 days ago
26 weeks 20 hours ago
26 weeks 1 day ago
41 weeks 4 days ago
41 weeks 6 days ago
42 weeks 1 hour ago
42 weeks 3 hours ago
42 weeks 5 hours ago