¿Te entra la risa floja cuando oyes hablar de transformación digital? ¿Ya no crees en promesas de datos abiertos? ¿Crees que está feo dilapidar dinero público en "portalitos"? Estás en el sitio adecuado.
El plan es construir APIs decentes que consulten fuentes de datos públicas (por ejemplo, páginas web) para poder utilizar los servicios de la administración de forma programática.
Prueba a consultar algunos ejemplos en una demo real:
- Ubicación geográfica del código postal "09400".
- Antenas de telefonía de Aranda de Duero.
- Señales de Televisión de Villadiego.
- Cobertura 4G a 800MHz en Aranda de Duero.
- Listado de radares de tráfico.
Faltan muchos servicios por incluir y no voy a poder hacerlo solo. ¡Colabora!
El proyecto se divide en varios paquetes:
- packages/egov-api-server: Servidor que expone un API GraphQL para acceder a los datos públicos.
- packages/egov-data-providers: Contiene los servicios de consulta que extraen datos de fuentes públicas. El
egov-api-server
utiliza este paquete. - packages/egov-examples: Ejemplos de uso programático de los servicios de consulta.
Servidor HTTP que expone un API GraphQL para acceder a datos públicos reales (probar demo). Está desarrollado en Node.js (TypeScript) con Apollo GraphQL y es la forma más sencilla de acceder a los datos.
Puedes consultar el esquema de datos. He empezado con datos de localizaciones geográficas y de servicios de telecomunicaciones disponibles en la zona (antenas, canales de televisión digital, redes disponibles).
Sólo necesitas Node.js 10+. Debes inicializar el proyecto después de clonarlo por primera vez:
git clone git@github.com:palmerabollo/egov.git
cd egov
npm install
Y ejecutarlo:
npm run start:api-server
En http://localhost:4000 tendrás la interfaz web de acceso al API GraphQL para ejecutar tus consultas. Si te apetece cacharrear, hay más detalles sobre el proceso de desarrollo en la guía para colaboradores.
Nota: algunas administraciones tienen servidores inseguros, afectados por vulnerabilidades (CVE-2009-3555) desde hace más de una década. Esto impide el soporte de Node.js >16 / OpenSSL 3.x. Hay que investigar si se puede ignorar con la variable
SSL_OP_LEGACY_SERVER_CONNECT
.
Incluye la implementación de los proveedores de datos: servicios de consulta que extraen datos de fuentes públicas. Algunos servicios consultan datos cuando se solicitan (online) y otros utilizan datos locales (offline).
Crear un nuevo servicio es muy sencillo. Actualmente están desarrollados los siguientes. Echa un vistazo y propón nuevas ideas en las issues o envía tu pull request con nuevos servicios. Es muy fácil.
Servicio | Clase | Origen de los datos | Online |
---|---|---|---|
Búsqueda de poblaciones y códigos postales Categoría: General |
PostalCodeService |
geonames.org | ❎ (local file) |
Localización de antenas de telefonía móvil Categoría: Telco |
AntennaService |
geoportal.minetur.gob.es | ✅ (api) |
Comprobación de cobertura 4G a 800MHz Categoría: Telco |
NetworkService |
www.llega800.es | ✅ (api) |
Señales de televisión por ubicación geográfica Categoría: Telco |
DigitalTelevisionService |
www.televisiondigital.gob.es | ✅ (html) |
Radares de tráfico Categoría: Tráfico |
TrafficRadarService |
www.dgt.es | ✅ (html, pdf) |
Información de vehículos Categoría: Tráfico |
TrafficVehicleService |
www.dgt.es | ✅ (html, pdf) |
Ejemplos de uso programático de los servicios de consulta disponibles en egov-data-providers
.
import * as egov from '@egov/data-providers';
let service = new egov.AntennaService();
let antennas = await service.findAntennas(41.73, -5.32);
console.table(antennas, ['code', 'latitude', 'longitude']);
// output
// ┌─────────┬───────────────────────────────────┬───────────┬───────────┐
// │ (index) │ code │ latitude │ longitude │
// ├─────────┼───────────────────────────────────┼───────────┼───────────┤
// │ 0 │ 'VODAFONE ESPAÑA, S.A. - 144588' │ 41.471472 │ -4.989911 │
// │ 1 │ 'VODAFONE ESPAÑA, S.A. - 144589' │ 41.479806 │ -5.048222 │
// │ 2 │ 'ORANGE ESPAGNE, SAU - CYLR2147A' │ 41.471472 │ -4.989911 │
// │ 3 │ 'ORANGE ESPAGNE, SAU - CYLR2223B' │ 41.479806 │ -5.048222 │
// └─────────┴───────────────────────────────────┴───────────┴───────────┘
El código de eGov está desarrollado en Node.js (TypeScript). Quienes quieran contribuir con nuevos proveedores de datos en otros lenguaje de programación, tienen la posibilidad de que se ejecuten como procesos independientes que expongan un interfaz HTTP. Estos procesos adaptadores pueden obtener los datos, procesarlos y ofrecerlos a eGov a través de ese interfaz HTTP.
Hay una prueba de concepto para obtener los radares de tráfico con un proceso Python que hace scraping de los datos de radares de la DGT. Este proceso se está ejecutando como una función serverless en AWS Lambda.
data-provider --(http)--> adapter --(http scrape)--> datasource
¿Por qué serverless? Porque es la manera de hacer el proyecto económicamente sostenible, sin tener que pedir dinero por ahora.
Copyright 2019 - Guido García (guido.garcia AT protonmail DOT com)
Licensed under the GNU Affero General Public License, Version 2.0 (the "License"); you may not use this file except in compliance with the License.
Some information about postal codes is provided by geonames under a Creative Commons Attribution 4.0 License.