Después de la experiencia del año pasado, en las II Jornadas de Periodismo de Datos, contando cómo se puede utilizar la línea de comandos para hacer algunas cosas interesantes con ficheros de datos muy grandes, este año vamos a avanzar un poquito más y demostrar que cualquier periodista también puede acceder muy fácilmente a datos que estén disponibles en una API, y no sólo utilizar los datos que estén disponibles en ficheros Excel o similares.
Primero tendremos que ver lo que es una API. Eso sí, como nos vayamos a la definición de Wikipedia, nos vamos a quedar igual, así que nada mejor que ver algunos ejemplos de APIs para entender mucho mejor lo que nos pueden ofrecer:
- La de datos abiertos de Zaragoza: http://www.zaragoza.es/ciudad/risp/api.htm
- La de datos de Localidata: http://datos.localidata.com/
- La de datos de la EMT, en Madrid: http://opendata.emtmadrid.es/
- Y la de datos abiertos de Aragón: http://opendata.aragon.es/portal/desarrolladores/api-aragodbpedia
Claro que hay muchas más, y no todas son de datos abiertos gubernamentales (Open Government Data), sino que también hay muchas con datos que no se pueden reutilizar libremente para fines comerciales, o con restricciones de uso importantes (por ejemplo, las de Google Places, la de Twitter, la de FourSquare, etc.). Si os aburrís, podéis seguir mirando y buscando APIs en http://www.programmableweb.com/. Seguro que os sorprendéis viendo lo que se puede encontrar aquí.
1. Calentando motores... Registrándonos en las APIs para poder usarlas
Es bastante habitual que sea necesario registrarnos para usar una API, incluso aunque sea de datos abiertos.
- En el caso de las APIs que son de pago, la razón para solicitar el registro está muy clara: es una forma de poder contabilizar el número de peticiones, limitar la frecuencia de dichas peticiones según el tipo de pago que se realice, ofrecer analíticas más detalladas de los usuarios de la API, etc.
- En el caso de las APIs de datos abiertos, no hay que asustarse y pensar que nos están engañando y que los datos no son realmente abiertos, o que quieren saber necesariamente quiénes somos. Normalmente se trata de dar una buena calidad de servicio, y poder determinar los distintos tipos de usuarios que manejan nuestra API (esporádicos, usuarios intensivos, etc.).
- Zaragoza: en esta API no hay que registrarse (aunque podría establecerse algún mecanismo de autenticación y autorización en el futuro si es necesario para asegurar la calidad de servicio ofrecida).
- Es recomendable, no obstante, registrarse en https://www.zaragoza.es/ciudad/risp/listado_Aplicacion para hacer saber a los encargados de la API el uso que se está haciendo de los datos y recibir avisos.
- Localidata: https://localidata.3scale.net/signup
- Si os dais de alta os pasaremos una API key
- EMT: http://opendata.emtmadrid.es/Formulario
- Moraleja: cuida dónde pones tus passwords, porque si no no podrás enseñarlo en las JPD_15 ;-(
- Aragón: https://opendataaragon.3scale.net/signup
- Usaremos primero la siguiente API key: e103dc13eb276ad734e680f5855f20c6
- Y luego utilizaremos la siguiente: ccedf913242b23abf4fc1c82044c61f1
2. Comenzando a utilizar cada una de las APIs...
Vamos ahora a mostrar algunos ejemplos muy sencillos de llamadas típicas a cada una de estas APIs. Basta con que hagáis click en cada uno de los enlaces que tenemos a continuación:
- Un hotel en Zaragoza: http://www.zaragoza.es/api/recurso/turismo/alojamiento/109
- ¿Y esto son datos estructurados de buena calidad? Probemos a añadirle un .json o .csv a esta URI.
- La lista de hoteles NH en Madrid: http://datos.localidata.com/recurso/comercio/Provincia/Madrid/Municipio/madrid/Local/Label/nh?api_key=<<tu_API_Key>>
- Los datos de la comarca Cinco Villas en Aragón: http://opendata.aragon.es/recurso/territorio/Comarca/Cinco_Villas?api_key=e103dc13eb276ad734e680f5855f20c6
- ¿Ha pasado algo raro con esta última?
- ¿Y si probamos con http://opendata.aragon.es/recurso/territorio/Comarca/Cinco_Villas?api_key=ccedf913242b23abf4fc1c82044c61f1? (os explicaré por qué ha pasado esto, para que entendamos las limitaciones de acceso para asegurar la calidad de servicio de la API).
3. Añadiendo un poquito más de complejidad al asunto...
Cada API no sólo tiene sus propias categorías de datos, que además no tienen por qué ser las mismas, sino que tiene sus propias características y funcionalidades. Vamos a ver algunas de las características principales de cada una de ellas. Ahh, y para los muy friquis recomiendo tener instalado algún plugin para trabajar con APIs REST, como por ejemplo el Advanced REST Client de Chrome, o el REST Client de Firefox.
3.1 Zaragoza (https://www.zaragoza.es/ciudad/risp/api.htm)
Para navegar por los datos que están ahora mismo disponibles en la API (no son aún todos los del catálogo de datos abiertos de la ciudad), se puede utilizar esta interfaz, que usa Swagger.
Es bastante intuitivo de utilizar, y vamos a hacer algunas pruebas con él, por ejemplo, con el dataset de Quejas y Sugerencias, que es mi preferido. Esto lo haremos en vivo durante la presentación, y luego subiré aquí el vídeo de la presentación.
Las características principales de esta API son las siguientes:
- Todas las consultas son de tipo GET.
- En el campo q se puede utilizar la sintaxis FIQL para buscar por los valores de cualquier campo. Por ejemplo, para buscar los hoteles NH en Zaragoza se puede usar la siguiente URL: http://www.zaragoza.es/api/recurso/turismo/alojamiento?q=title%3D%3DNH* (en la interfaz es más fácil de escribir, pues basta con poner en q lo siguiente: title==NH*
- Hay una gran diversidad de formatos en los que se pueden obtener los datos: HTML, JSON, CSV, RDF, JSON-LD, GeoCSV, etc.
Por cierto, que si ya os tiráis a la piscina y os atrevéis hasta con GitHub, podéis colaborar con los responsables de la API en https://github.com/zaragoza-sedeelectronica
3.2 Localidata (http://datos.localidata.com)
Aquí podéis ver una descripción de la API, que no utiliza Swagger, pero proporciona también una información muy parecida, describiendo todas las operaciones de la API.
Todas las consultas son de tipo GET, y cada una de ellas tiene un coste distinto.
Los formatos en los que se puede obtener la información son también múltiples: HTML, CSV, JSON, GeoJSON, JSON-LD, y RDF/Turtle.
Y también tenemos varias vistas disponibles (parámetro _view): ampliada, coordenadas, simple y tabla
3.3 EMT (http://opendata.emtmadrid.es/)
Aquí también se pueden obtener los datos directamente desde la Web, utilizando las llamadas que hay codificadas, y que no necesitan de usuario y password.
De hecho, los resultados se pueden descargar en JSON, y cargar por ejemplo en OpenRefine.
La principal diferencia de esta API es que casi todas las llamadas son de tipo POST, por lo que es conveniente utilizar un cliente REST como los que hemos comentado en alguna de las secciones anteriores. El servidor actual está en https://openbus.emtmadrid.es:9443/emt-proxy-server/last/<<operación>>
3.4 Aragón (http://opendata.aragon.es/portal/desarrolladores/api-aragodbpedia)
En este caso, la API es muy similar a la que hemos presentado anteriormente para Localidata, pues utiliza la misma tecnología.
Los formatos que se ofrecen son HTML, CSV, JSON y RDF/Turtle, y los datos están enlazados con la DBpedia española.
También se ofrecen varias vistas (parámetro _view): simple, ampliada y completa.
Igual que antes, podéis también colaborar en GitHub en https://github.com/aragonopendata.
4. Sacándole aún más partido a las APIs
Y ahora voy a incluir aquí algunos enlaces de posts anteriores en los que he explicado qué se puede hacer con algunas de estas APIs, y que espero que os sirvan de ayuda:
- Visualizando datos de distritos de Madrid con DataWrapper
- Mostrando datos básicos de distritos de Madrid con CartoDB
- Mostrando datos de la API de Localidata en Google Maps
- Enlazando barrios de Madrid de la Wikipedia con la API de Localidata
- ¿Qué farmacias tengo cerca de Medialab-Prado?
- Enlazando el callejero de Zaragoza con los autores de la Biblioteca Nacional de España