paola villarreal

señora

Reconstruyendo la app de Ecobici - Parte 2: Detalles técnicos

Antes que nada, tengo que definir la información que voy a necesitar y, muy importante, cómo la tengo que obtener.

La página de Ecobici tiene un mapa en el que puedes consultar, estación por estación, la disponibilidad. Lo malo de este mapa es que me da la información en un formato -lógicamente- diseñado para ser visto en su página; no para ser consumido por un programa.

Pero no todo es malo: afortunadamente, esta información sí está actualizada “en tiempo real” pues, después me enteré, esta consulta va directamente a la estación en cuestión para ver cuántas bicis y cuántos lugares tiene disponibles.

No conozco otra fuente para esta información así que no tengo más remedio que hacer un programita para procesarla y hacerla accesible para después consumirla de forma más fácil.

Este programa, es muy sencillo y hará casi toda la magia. Lo haré en PHP porque correrá en mi servidor y me parece lo más práctico. Una versión en Ruby, Python o lo que les guste más, no debe de ser nada difícil.

Aprovecho para contar un detalle muy importante para la experiencia de los usuarios: consultar directamente, estación por estación, la disponibilidad es un proceso lento y poco óptimo que tendría que mejorar si quisiera, por ejemplo, mostrar un mapa con todas las estaciones usando colores (verde, amarillo o rojo) para indicar la disponibilidad en tiempo real.

Los datos tienen que estar siempre disponibles para que el usuario elija qué estación(es) quiere ver y no tenga que esperar para obtenerlos.

Para lograr lo anterior, tengo que guardar la disponibilidad en algún lado. Esto significa perder el efecto del “tiempo real” por lo que tuve que hay que diseñar una estrategia de consulta que a) sea lo suficientemente oportuna, b) no sature la red de Ecobici ni las estaciones y c) condense en un solo lugar la información de todas las estaciones.

Mi servidor es un Linux y pienso que es buena idea (de momento) hacer un cronjob (tarea que se ejecuta periódicamente) para encargarnos de consultar la disponibilidad de las estaciones. Quiero que máximo cada 3 minutos obtengamos esta información para todas las estaciones.

Este script se ejecutará cada minuto y actualizará las primeras 63 (190 / 3) estaciones que hayan pasado más tiempo sin actualizarse. 

Esta no es una solución óptima porque como el proceso de actualización es lento, es posible que estemos calendarizando la actualización de cada estación más de una vez en los 3 minutos. Pero podemos comenzar por ahí. 

En el siguiente post hablaré de este cronjob (con código) y haré nuestro endpoint principal para consulta (backend).