sábado, 19 de enero de 2008

La feed de mi vida (beta)

Desde hace ya algunos meses había jugado un poco con la idea de generar una feed que mantenga un registro de todas las actividades más o menos relevantes que realizo en línea. Incluso con Héctor habíamos discutido la posibilidad de implementar bien esta idea en un sitio web. Así que bueno, después de un rato de ociosidad, me dediqué a crear el primer prototipo de la feed de mi vida.

Más que para presumirla como algo realmente interesante (que quizá no lo sea) o útil (que quizá nunca lo llegue a ser), la idea de este post es platicar un poco el cómo está implementada esta feed, y los problemas técnicos principales que tuve que enfrentar para realizarla. Y pues saber también así si es que ustedes tienen comentarios o sugerencias al respecto.

El contenido se comienza a generar cuando Juan se sienta frente a su computadora y realiza actividades cómo postear algo en el blog, subir fotos en Picasa o Flickr, perder el tiempo en StumbleUpon, etc. Y cada uno de éstos sitios genera feeds individuales registrando las actividades que Juan realiza.

Luego cada uno de los feeds individuales son procesados por pequeños programas en Pipes de Yahoo! para cambiar el contenido de cada elemento por textitos informativos del estilo:
 Juan posted a new blog entry: I died in a blogging accident
Luego, usando Google Reader, me subscribo a todas estas feeds modificadas y las agrupo en un folder ‘mylife’ que también hago público. Esto genera una página web así como la dichosa RSS feed de mi vida.

Finalmente, para generar una página web más concisa al estilo de las feeds de noticias en Facebook, yo re-proceso estáticamente la feed generada por Google (usando un pequeño script en Perl) para crear el resultado final que les mostré al inicio del post en la feed de mi vida. Ta ran!

Y aunque esto no suena terriblemente complicado (por supuesto tampoco trivial), si hay muchos detallitos que tendieron a complicar el proceso.

Primero, contrario a lo que esperaba, modificar los feeds en Pipes resultó ser un poco rebuscado. Mandando al traste las promesas de XML sobre interoperabilidad y facilidad para intercambiar información entre aplicaciones, al final tengo que terminar hackeando y scrapeando los datos usando expresiones regulares para obtener el resultado deseado. Parte es culpa de Pipes que tiene limitadas capacidades para manipular las entradas, parte es culpa de los generadores de las feeds que no siempre ponen todos los datos accesibles de la mejor manera.

El segundo problema es integrar todas las feeds. Aunque Pipes tiene un operador para combinar varias feeds, el problema es que al final no se pueden ordenar correctamente las entradas ya que muchas de las feeds originales, notablemente StumbleUpon, no incluyen la fecha en que el elemento fue publicado. Otro problema fue con mi lista de favoritos de Flickr, ya que la feed generada incluye la fecha en que el autor original subió la foto, pero no la fecha en que yo la marqué como favorita.

Para resolver este problema fue que tuve que meter en la ecuación a Google Reader. Éste es quien se encarga de recopilar todas las feeds y de ordenar las entradas apropiadamente según fueron siendo publicadas. Esto lo pueden hacer ya que sus servidores mantienen una lista de las entradas que ya fueron ‘vistas’ y la actualizan constantemente agregando las ‘nuevas’ entradas frente a las anteriores.

Finalmente, dado que no encontré ningún servicio en linea que me permitiera (de una manera conveniente) generar y personalizar una página HTML a partir de una feed, este último paso lo tuve que realizar con un script de Perl que, medio manualmente, tengo que ejecutar de cuando en cuando para actualizar la página que despliega la feed de mi vida en internet.

También con un procedimiento medio hackeoso tengo traducir el texto unicode utf8 que genera Google (y que viene arrastrado de las fuentes originales) al Latin-1 que es el único que me permite mi chafa servidor (que me sigo ‘robando’ de la uni de Manchester).

Mi solución no me termina de agradar ya que, de nuevo en contra de todo lo que promete la nueva ‘Web 2.0’, está llena de parches que la hacen muy frágil y poco escalable. Flickr, por ejemplo, decidió hace unos días cambiar ligeramente el formato de sus feeds (movieron el contenido de cada entrada de ‘description’ a ‘content.encoded’), rompiendo mi filtro en Pipes y haciendo crashear mi script de Perl.

Una implementación ‘decente’, por supuesto, no utilizaría Pipes ni Google Reader. Se tendrían que implementar seguramente las funciones que uso de estos servicios en Perl o PHP, y tener corriendo la aplicación en algún servidor. Los problemas, sin embargo, de la falta de uniformidad de las fuentes, y el hecho de que finalmente hay que estar creando filtros ‘ad-hoc’ (y frágiles) para cada fuente, me parecen sin embargo más difíciles de superar.

¿Algunos comentarios o sugerencias?

No hay comentarios.: