sábado, 6 de junio de 2015

Accediendo a datos a través de APIs

Preparado para las III Jornadas de Periodismo de Datos.



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:

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.).
A continuación os dejo los enlaces donde os podéis registrar para cada una de las APIs. La mala noticia es que en casi todos los casos alguien tiene que revisar vuestra petición, así que necesitaríamos esperar unos días. La buena noticia es que, para que hoy podamos hacer nuestras pruebas, ya he generado yo algunos usuarios (ojo, que los datos de identificación que os doy sólo funcionarán durante unas horas, y luego ya tendréis que trabajar con vuestros propios usuarios y claves.

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:

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: