Skip to content

A web tool for visualizing real time data offered by the APIs that follow the General Bikeshare Feed Specification.

Notifications You must be signed in to change notification settings

landersanmi/GBFS-Visualizer

Repository files navigation

GBFS Visualizer

Generic badge Generic badge Generic badge Generic badge Generic badge

demo_gif

Índice

1. Introducción

El objetivo principal de este proyecto es centralizar y ofrecer de manera visual la información compartida por los diferentes sistemas GBFS (General Bikeshare Feed Specification), añadiendo la posibilidad de filtrar dicha información proporcionada en base a unas características. Estos sistemas que siguen el estándar GBFS, proporcionan información sobre la empresa, las estaciones de alquiler/aparcado que puede poseer y el estado en tiempo real de dichas estaciones y bicicletas (en caso de ser un sistema que no posee estaciones, es decir, puedes alquilar o devolver una bicicleta en cualquier localización).

Para hacer uso de esta herramienta es necesario iniciar sesión con una cuenta de Google, para eso el servidor OAuth se encargará de hacer las llamadas necesarias a la API OAuth de Google y redirigir al GBFS Visualizer server las peticiones de logeo que sean exitosas.

2. Arquitectura general

demo_gif

3. Software necesario

  • Python >=3.6     ✅ 3.8.12
  • NodeJS >= 10.6    ✅ 16.13.0
  • NPM >= 6.10.0     ✅ 8.1.3
  • MongoDB Server 4.4  ✅ 4.4.10

✅ Version utilizada por mí.

4. Servicios a ejecutar

  • Inicializar el servidor de MongoDB en el puerto 27017 (default).
  • Desde la sección 'API y servicios > Credentials' de Google Cloud Platform tenemos que generar 2 nuevas credenciales:
    • Clave de API: Utilizada por el GBFS Visualizer server para hacer uso de la API de Maps [MAPS API KEY].
    • ID de cliente OAuth 2.0: Utilizado por el OAuth server para permitir el OAuth login de Google, en este caso se generarán el ID de cliente [GOOGLE_CLIENT_ID] y el Secreto del cliente [GOOGLE_CLIENT_SECRET]. Al generar esta credencial establecemos las siguientes opciones:
    • Rellenamos el fichero keys.json del directorio raíz con las claves API y Secret generados.
  • Finalmente, desde la sección 'Google Maps Platform > Administrador de mapas' tenemos que crear un nuevo ID de mapa para un tipo de mapa JavaScript.

5. Dependencias a instalar

Para hacer uso de este proyecto, es necesario instalar varias depencías de las que hacen uso cada uno de los microservicios. Lo recomendable para evitar incidencias con otras dependencias instaladas previamente será crear un nuevo entorno virtual de python. En mi caso, haciendo uso de Anaconda Prompt:

$ conda create --name GBFS python=3.8.12

Por un lado, para instalar las dependencias del proyecto GBFS Visualizer server implementado en python será necesario activar el entorno creado previamente, ubicarse en el directorio /gbfs_visualizer_server y ejecutar el siguiente comando en un Terminal:

conda activate GBFS
cd gbfs_visualizer_server
pip install -r requirements.txt

Por otro lado, tras instalar NodedJS y NPM nos ubicaremos en el directorio /OAuth_server y ejecutamos el siguiente comando:

npm install

6. Como arrancar la parte servidora

Para inicializar al completo la parte servidora, tendremos que inicializar cada uno de los microservicios, por un lado nos ubicamos en el directorio /gbfs_visualizer_server y ejecutamos el siguiente comando:

python -m openapi_server

Por otro lado, ejecutamos el servidor que se encarga del OAuth y hace de Gateway al microservicio GBFS Visualizer server. Nos ubicamos en el directorio /OAuth_server y ejecutamos el comando:

node index.js 

6.1 Primer arranque

En el caso de ser la primera vez que se ejecuta el proyecto, será necesario almacenar en la BD relacionada con los GBFS la información estática de los mismos, como son, los datos del sistema o la información de las estaciones. La información dinámica sobre el estado de las estaciones y las bicicletas sueltas se recupera al instante de la API de cada sistema específico. Primero, será necesario descargar el fichero gbfs_systems.csv y ubicarlo en el directorio /gbfs_visualizer_server/openapi_server/db/ .Luego, tendremos que ejecutar el script db_initializer.py ubicado en /gbfs_visualizer_server/openapi_server/db/db_initializer.py con el GBFS Visualizer server en marcha, ya que se hace uso de su API REST para almacenar dichos datos mediante múltiples POST request. Este proceso tarda alrededor de 10 minutos en ejecutarse completamente y almacenar los datos de más de 450 sistemas GBFS (5MB aprox).

Debido a los cambios que pueden surgir dentro de las API de los sistemas GBFS, el db_initializer.py implementado al comienzo del proyecto me ha causado algún problema para cargar los datos de nuevo en la BD, por lo que se adjunta un backup de la base de datos 'GBFS' utilizada por mí y que contiene la informacion de los más de 450 sistemas.

Para realizar un restore de la base de datos solo es necesario ejecutar un comando, por lo que puede ser una opción mucho mejor en comparación con el db_initializer.py, para recuperar el backup de la base de datos, abrimos un Terminal en la carpeta bin del directorio de instalación de MongoDB (C:\Program Files\MongoDB\Server\4.4\bin) y ejecutamos el siguiente comando especificando la carpeta donde hemos descargado el backup:

mongorestore --db <database name > <folder location>
mongorestore --db GBFS C:\User\Downloads\GBFS_Backup

7. Como acceder a la parte cliente

7.1 Swagger UI

Interfaz que proporciona información y el uso de la API REST generada para cada proyecto.

7.2 Aplicación

Para proceder a la página principal del proyecto, accedemos a la siguiente ruta una vez inicializados ambos microservicios:

About

A web tool for visualizing real time data offered by the APIs that follow the General Bikeshare Feed Specification.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published