Ir al contenido principal

Usando AEMET OpenData

El pasado 13 de diciembre se presentó el servicio AEMET OpenData que permite descargar gratuitamente los datos explicitados en el Anexo II de la resolución de 30 de diciembre de 2015 de AEMET, por la que se establecen los precios públicos que han de regir la prestación de servicios meteorológicos y climatológicos. Esta resolución ha sido publicada en el BOE nº 4 de 5 de enero de 2016.

La manera más fácil de acceder a este nuevo servicio es a través de la página web de AEMET, ya sea desde el menú 'Datos Abiertos', opción AEMET OpenData o directamente desde el icono que aparece en la parte inferior de la pantalla, tal como se muestra en las figuras 1 y 2

 Figura 1

Figura 2

 
Figura 3

La figura 3 muestra la pantalla de acceso al servicio, que presenta cuatro opciones:
  • AEMET OpenData - ¿Qué es?
  • Obtención de API Key - Solicitar
  • Acceso General -Entrar
  • Acceso Desarrolladores - Entrar
El primer punto nos ofrece una visión general de este nuevo servicio, pero los realmente importantes son los tres restantes.

Para poder usar AEMET OpenData es imprescindible solicitar una 'Api Key', que tendrá una validez de tres meses y estará asociada a una dirección de correo electrónico.

El proceso de solicitud se lleva a cabo desde la opción Obtención de API Key de la pantalla de la figura 3, introduciendo únicamente la dirección de correo electrónico asociada, tras lo cual recibiremos nuestra API Key en dicha dirección de correo.

Una vez dispongamos de la misma ya podemos acceder a la información meteorológica y climatológica disponible, aunque yo me centraré en la información climatológica, que junto a la predicción por municipios diaria es la que utilizo fundamentalmente en el blog.

Como podemos ver en la figura 3 hay dos formas de acceso: General y para Desarrolladores; el primero permite consultar datos puntuales de una estación, pero no nos será útil si lo que pretendemos es generar nuestra propia Base de Datos con la información disponible para una, varias o todas las estaciones publicadas; en este segundo caso tendremos que utilizar el acceso para Desarrolladores, pero no para satisfacer directamente nuestro propósito, sino como una ayuda necesaria para el desarrollo de una aplicación específica para tal finalidad. Es decir, si lo que queremos es construirnos nuestra propia Base de Datos, no nos queda más remedio que desarrollarnos una aplicación a medida, para lo cual necesitaremos apoyarnos en el Acceso para Desarrolladores, según veremos más adelante.

Veamos como utilizar el acceso general para consultar, por ejemplo, los datos climatológicos del 10 de agosto de 2012 en el Aeropuerto de Sevilla. Al pulsar sobre la opción 'Acceso general' de la pantalla de la figura 3 nos aparecerá la pantalla de la figura 4.

Figura 4

Para poder obtener cualquiera de los productos disponibles es imprescindible introducir nuestra Api Key en la parte superior de la pantalla mostrada en la figura 4. Tras hacerlo ya podemos desplazarnos por la página hasta localizar la opción que nos interesa, que en nuestro caso son las Climatologías diarias del bloque 'Valores climatológicos'. Ya sólo hace falta seleccionar en primer lugar la provincia de nuestro interés, a continuación la estación, seguidamente la fecha y por último pulsar sobre el botón 'Obtener', tal que se aprecia en la figura 5.

Figura 5

Lo que obtenemos no son los datos en sí, sino enlaces a los mismos, como se muestra en la figura 6.

Figura 6

Como podemos ver la petición ha tenido éxito, y nos ha devuelto dos URL una con los datos propiamente dichos y otra con los metadatos asociados a los mismos. Ahora tendremos que copiar la URL que nos interese en el navegador para acceder a los datos, figura 7 o a los metadatos, figura 8.

 Figura 7

Figura 8

Como dije anteriormente, el acceso general es apropiado si lo que necesitamos es consultar un dato concreto, como es el caso mostrado en este ejemplo, pero no nos sirve si lo que pretendemos es obtener un conjunto más amplio de datos, como por ejemplo todos los datos diarios del año 2016 en las estaciones de Andalucía.

En este caso no nos queda más remedio que construirnos nuestra propia aplicación utilizando para ello la ayuda que nos ofrece el Acceso para Desarrolladores mostrado en la figura 9.

Figura 9

Como podemos ver tenemos tres opciones, aunque de momento una de ellas no está disponible. La opción Ejemplo de programas cliente nos muestra la sintaxis de acceso al servicio para gran parte de los lenguajes de programación actuales.

Figura 10

En la figura 10 se reproduce el código que se muestra para el lenguaje C, que incluye la petición propiamente dicha:

https://opendata.aemet.es/opendata/api/valores/climatologicos/inventarioestaciones/estaciones/?api_key=jyJhbGciOiJIU...

Vemos que corresponde a la opción Inventario de estaciones del Apartado Valores Climatológicos y que la petición finaliza con nuestra Api Key. Para conocer la petición a incluir para el resto de las opciones tendremos que apoyarnos en el apartado 'Documentación AEMET OpenData. HATEOAS' que es la primera de las tres opciones de la pantalla de la figura 9.

Veamos por ejemplo como obtener los datos diarios de todas las estaciones disponibles para los quince primeros días de 2017.

Figura 11

En la figura 11 se muestra la pantalla que corresponde a esta opción; como podemos ver aparecen los distintos bloques disponibles; en nuestro caso el que nos interesa es 'Valores climatológicos'. Vemos también como cada bloque permite mostrar u ocultar las distintas opciones que contiene. En nuestro caso la que mejor se ajusta a lo que buscamos es la segunda: Climatología diaria (todas las estaciones); si hacemos click en ella, se desplegará tal como podemos ver en la figura 12.

Figura 12

Ahora sólo falta rellenar los parámetros necesarios, que en este caso son las fechas inicial y final del periodo buscado. Tras hacerlo pulsaremos sobre el botón 'Try it out', que nos devolverá la petición o Request URL a lanzar desde nuestra aplicación, según se muestra en la figura 13.

 Figura 13

En nuestro caso habremos obtenido la siguiente Request URL:

https://opendata.aemet.es/opendata/api/valores/climatologicos/diarios/datos/fecha
ini/2017-01-01T00%3A00%3A00UTC/fechafin/2017-01-15T23%3A59%3A00UTC/todasestaciones

A la URL obtenida hay que añadirle nuestra Api Key, ya que de lo contrario no funcionará; así pues la URL final será:

https://opendata.aemet.es/opendata/api/valores/climatologicos/diarios/datos/fecha
ini/2017-01-01T00%3A00%3A00UTC/fechafin/2017-01-15T23%3A59%3A00UTC/todasestaciones
/?api_key=jv...

Es conveniente probar la URL resultante para asegurarnos de que está bien construida y dentro de los límites establecidos. En nuestro caso, la respuesta obtenida se muestra en la figura 14.

Figura 14

Como podemos ver, en caso de necesitar datos diarios, no podemos pedir más de 10 días, tanto si pedimos todas las estaciones como si pedimos una sóla; de la misma manera, si pedimos datos mensuales sólo podemos pedir un año y una estación de cada vez.

Por ello, no nos queda más remedio que construirnos un programa a medida que mediante el uso de bucles nos permita ir obteniendo todos los datos de nuestro interés y su almacenamiento en algún tipo de base de datos, fichero o formato que nos permita su explotación posterior con facilidad, ya que el formato de salida, que podemos ver en la figura 7, seguramente no nos resultará apropiado.

A la hora de ir lanzando las distintas peticiones hay que tener en cuenta que el número de peticiones por minuto y Api Key está limitado y si se excede habrá peticiones que no nos devolverán resultados. En mi caso, para solucionar este problema he usado un retardo de 2 segundos entre peticiones y además genero un log con las peticiones que pueden fallar para reintentarlas posteriormente con un retardo mayor.

Seguidamente describiré brevemente la aplicación que he desarrollado para generar una Base Access con los datos climatológicos diarios y mensuales, así como con las temperaturas previstas para 851 localidades de la predicción por municipios diaria. Además, guardo también los Resúmenes diarios del apartado Observación de la página web de AEMET que recoge la información de la red de Estaciones Automáticas. La figura 15 muestra la interfaz de la aplicación.

Figura 15

La aplicación la he desarrollado en Vb.Net y seguidamente os mostraré y comentaré algunos fragmentos de código que os pueden ser de utilidad si os animáis a construiros vuestra propia aplicación.

Figura 16

La figura 16 muestra el bucle que utilizo para obtener los datos diarios de todas las estaciones para uno o varios años. Vimos anteriormente que esta petición necesita como parámetros de entrada la fecha inicial y final del periodo solicitado y que no se pueden pedir más de 10 días. En este fragmento de código utilizo un bucle For para recorrer la colección de años y un bucle While para ir recorriendo cada uno de los años seleccionado en periodos de 10 días e ir lanzando las distintas peticiones mediante la llamada al procedimiento ObtenerDatoDiarioTodasEstaciones. Antes comenté que el número de peticiones por minuto y Api Key está limitado, lo que obliga a introducir un retardo; para minimizarlo utilizo tres Api Key que voy alternando, de manera que en el código utilizo un Sleep (1800/NApisKeys), siendo NApisKeys el número de Apis Keys disponibles.

En la figura 17 se muestra el código del procedimiento ObtenerDatoDiarioTodasEstaciones


Figura 17

El primer recuadro muestra la generación de la Request URL necesaria y finaliza almacenando su contenido en la variable de tipo string res. El contenido de dicha variable será similar al mostrado en la figura 6, por ello en el código del segundo recuadro se obtiene la URL que contiene los datos, que se ejecuta mediante el código del tercer recuadro que recupera los datos y los almacena en el string responseFromServer. Este string contiene una sucesión de bloques similares al mostrado en la figura 7, que finalmente almaceno en una Base de Datos Access llamando al procedimiento InsertarRegistrosDiariosTodasEstaciones según se muestra en el último recuadro.

No voy a mostrar el código de este último procedimiento, ya que primero tendría que mostrar la estructura de la Base Access creada y el post se alargaría en exceso.

De manera similar se puede obtener buena parte de la información ofrecida por AEMET OpenData, entre ella el resto de la información climatológica disponible.

Comentarios