BICIMAD: Explorando el API del servicio de Bike Sharing público de Madrid

Carlos Vizoso Raya

BiciMAD es el sistema de Bike Sharing público que opera en el municipio de Madrid desde el año 2014. 

Actualmente cuenta con más de 2500 bicicletas y más de 165 estaciones de carga repartidas por todo el municipio, dotando a todos los madrileños y turistas de la posibilidad de alquilar una bicicleta mediante su tarjeta NFC.

Desde la EMT se ofrece la disponibilidad de bicicletas en tiempo real en las distintas estaciones y el comportamiento de los usuarios de forma anónima de los últimos años a través de su API pública publicada en el portal opendata.emtmadrid.es

Analizando el API en tiempo real

Desde la EMT se ha puesto a disposición de los desarrolladores un API pública que permite extraer información de la ocupación de las estaciones en tiempo real.

Además de esta información en tiempo real, la EMT también ha compartido una serie de JSON estáticos con los datos de uso mensuales de los usuarios en el periodo Abril 2017-Junio 2019. Así como, la ocupación y la situación de las estaciones BiciMAD por día y hora de Julio 2018- Junio 2019.

Para empezar a utilizar el API en tiempo real, lo primero que tendremos que hacer es registrarnos en el portal de datos abierto de EMT Madrid

Una vez registrados en el portal, utilizaremos el usuario y la contraseña para poder autenticarnos vía API y empezar a hacer las consultas.

Para llevar a cabo esta exploración, hemos utilizado POSTMAN, lo podéis descargar desde su página web.

Como podéis apreciar en la imagen anterior, añadiremos la url de login a la que queremos hacer la petición GET. La url de login, es la siguiente:

https://openapi.emtmadrid.es/v1/mobilitylabs/user/login/

Y pasaremos los parámetros email y contraseña con los que nos hemos registrado en el portal abierto de EMT Madrid en el header de la petición. Una vez añadidos, pulsamos sobre el botón send y obtendremos un JSON con la respuesta del API de BICIMAD. Si todo ha funcionado correctamente, obtendréis el siguiente JSON:

{
    "code": "00",
    "description": "Register user: YOURUSER with token: YOURTOKEN ",
    "datetime": "2020-04-18T10:46:43.685267",
    "data": [
        {
            "updatedAt": "2020-04-07T17:21:56.9700000",
            "username": "USERNAME",
            "accessToken": "YOUR ACCESS TOKEN",
            "email": "YOUR EMAIL",
            "idUser": "YOUR ID USER",
            "tokenSecExpiration": 86399,
            "apiCounter": {
                "current": 0,
                "dailyUse": 20000,
                "owner": 0,
                "licenceUse": "Please mention EMT Madrid MobilityLabs as data source. Thank you and enjoy!",
                "aboutUses": "If you need to extend the daily use of this API, please, register your App in Mobilitylabs and use your own X-ClientId and  passKey instead of generic login (more info in https://mobilitylabs.emtmadrid.es/doc/new-app and https://apidocs.emtmadrid.es/#api-Block_1_User_identity-login)"
            },
            "nameApp": "OPENAPI MobilityLabs"
        }
    ]
}

Una vez obtenido el JSON anterior, utilizaremos el accessToken para obtener el listado de estaciones en tiempo real. Tal y como se especifica en la documentación del api de EMT, a partir de la petición List Bicimad Stations podemos obtener el estado de las estaciones en tiempo real. La url del API sobre la que vamos a hacer la petición es la siguiente:

https://openapi.emtmadrid.es/v1/transport/bicimad/stations/<idStation>/

Utilizaremos de nuevo POSTMAN para llevar a cabo dicha petición, en este caso, añadiremos la url anterior y pasaremos como headers el accessToken obtenido en la petición anterior.

Una vez completado el accessToken y la url, pulsamos sobre el botón send para obtener el estado de las estaciones en tiempo real. El resultado obtenido tiene la siguiente estructura:

Como podemos apreciar, tenemos una estructura orientada a transmitir el estado actual de las distintas estaciones base de BiciMAD;

code: Si el resultado del api es correcto te devuelve un 00.

data: Datos del estado actual de la estación. Recopilación de tod.a la información disponible.

activate:  Situación de la estación.

name: Nombre de la estación.

reservations_count: Número de bases reservadas.

geometry: Posición( lat, lng) de la estación.

light: Nivel de ocupación.

total_bases: Número total de bases que tiene la estación.

address: Dirección dónde se encuentra la estación.

number: Número de reservas activas.

no_available: Estado de la estación (abierta/ Cerrada).

free_bases: Número de bases libres.

dock_bikes: Número de bases ocupadas.

id: Id de la estación.

description: Descripción de la estación consultada.

datetime: Tiempo en el que se ha efectuado la consulta.

A partir de la información obtenida, podríamos obtener diferentes KPIS como por ejemplo la ocupación por cada una de las estaciones, el número de reservas activas por estación, posicionar todas las estaciones y obtener por intervalos horarios cual es la situación de la estación, etc… En entradas posteriores implementaremos una ingesta en tiempo real utilizando kafka para poder ingestar esta información y almacenarla en una base de datos noSQL.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *