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.

38 comentarios:

  1. Muchas gracias por tu ayuda César. Me ha sido muy útil!

    ResponderEliminar
  2. Hola César, muy interesante tu post! Crees que podría hacer la aplicación directamente en Access usando VBA con el objeto MSXML2.ServerXMLHTTP ?

    ResponderEliminar
    Respuestas
    1. No te puedo contestar con total seguridad, pero lo veo difícil. Por lo que estuve viendo cuando desarrollé mi aplicación no creo que con VBA se pueda hacer.

      Eliminar
  3. Buenas dias. Me ha ayudado mucho tus explicaciones de la forma de automatizar. Tengo problemas en cargar los ficheros diarios. Puedes ayudarnos explicando el codigo que hiciste para cargar los ficheros del formato json

    ResponderEliminar
  4. Buenos días José, dame una dirección de correo y te paso el código.

    ResponderEliminar
  5. Buenos días Cesar. Te agradezco infinitamente tu amabilidad. Mi mail es velardemja@aol.com. Te cuento que ya he conseguido convertir los datos del formato json pero tu código es mucho mas completo y profesional. Me ha tomado 3 días hacer la aplicación en visual C#. Como estoy en el paro trato de aprovechar mi tiempo y no comerme la cabeza.
    He estado en dos seminarios que me han marcado bastante. Ambos lo dieron en Madrid. El primero fue de el peor desastre ambiental que se produjo en Canadá en el año 2013 por el descarrilamiento de un tren y siguiente explosión de producto que se llevaba. El segundo sobre los últimos incendios forestares en Asturias. Hay dos en que me estoy centrando: el de Allende e Ibias. El primero con 3251 Ha y el segundo con 2985 Ha quemadas. Ambos se produjeron el 15 de octubre de 2017. No sabes lo que me esta costando obtener la información. Luego de oír la conferencia me interese en buscar por internet los incendios pero solo encontraba temas del "problema de Barcelona". Al final encontré una capa SIG y es la que estoy usando. Luego fue el tema de los datos meteorológicos. De casualidad encontré tu blog y no sabes lo importante que fue. Sin el no hubiera conseguido obtener los datos. Ahora me falta los datos de las estaciones de monitoreo del aire. Todavia no lo encuentro. Si sabes de algún sitio donde pueda extraerlos te agradecería me lo comentaras. Al final con toda esta información trato de "estudiar" con mis modestos conocimientos ambientales como influye en la calidad del aire los incendios. No solo en los dias en que se produjeron sino también posteriormente. Me supongo que al haber desaparecido tantas hectáreas de zona verde algo afectará al medio ambiente. A propósito al revisar los datos de la estación 1249I (Oviedo) del periodo del mes de octubre del año 2017 veo que la dirección del viento varia de 1 a 99 grados. Con una moda de 4 grados. Eso está bien?. Muchas gracias.

    ResponderEliminar
  6. Hola Cesar. Mi nombre es Fernando. Me interesaria conocer las temperaturas de la estacion 2092 ( El Burgo de Osma- Soria) con una frecuencia de adquisicion de datos cada hora. Desde tan atras como sea posible (2013?) hasta ahora. Me puedes echar un cable? mi correo es femelero@hotmail.com Muchas gracias por adelantado.

    ResponderEliminar
    Respuestas
    1. Buenas tardes Fernando, esos datos no están en OpenData. Tendrás que pedirlos a la Delegación de Aemet en Castilla y León. Puedes contactar con ellos en usuarioscle@aemet.es
      Un saludo

      Eliminar
    2. Muchas gracias por tu rapráp respuesta!

      Eliminar
  7. Hola Cesar:
    Te cuento.
    Te cuento. Hace tiempo me hice con bases de datos de AEMET y en mi web presento distintos gráficos. https://javiersevillano.es/PrecipitacionMediaAnual.htm
    Los datos de los últimos años los he obtenido de open data, estación a estación, mediante descargas manuales.
    He visto los ejemplos que publica AEMET en acceso a programadores, pero a mí no me funcionan.
    No soy informático (soy ingeniero de los de antes) y de programación se, como aficionado, algo de los lenguajes antiguos (p.ej. fortram). Con los actuales me muevo con mucha dificultad. Entre otras causas debido a que los uso de tarde en tarde.
    Te cuento todo esto, por si me puedes echar una mano. En el mejor de los casos sería pasarme el código para obtener y guardar los datos.
    Estoy probando con el ejemplo de php y mi servidor me da error (ni siquiera consigo llegar a AEMET).
    Mi correo es : javier.sevillano@yahoo.es
    Gracias y perdona por el atrevimiento

    ResponderEliminar
  8. Me es de gran ayuda, toda la tarde buscando... y la solución me la da el gran César, conocido por sus buenos mapas de temperaturas

    ResponderEliminar
  9. Buenos días, me gustaría saber si es posible hacer un análisis predictivo con los datos extraídos gracias a tu código, pues estoy realizando un proyecto que engloba el Big Data y las bases de datos. Gracias.

    ResponderEliminar
  10. Usando el mismo procedimiento puedes descargarte cualquier producto disponible en OpenData, incluyendo los de predicción; en mi caso me descargo a diario la predicción por localidades para unos 900 municipios.

    ResponderEliminar
  11. Buenas César, he estado indagando para poder elaborar una aplicación de escritorio usan windows forms con C#, pero no encuentro el repositorio por ningún lado de AEMET Open data. ¿No hay ningún wrapper disponible?

    ResponderEliminar
  12. Perdona por no responderte antes, pero el correo me manda a spam las notificaciones que me llegan desde el blog y no la había visto. En el acceso para desarrolladores sí tienes un ejemplo de acceso con C# y en la entrada puedes ver como usarla, pero hace algún tiempo el propio OpenData incluye un generador de código que incluye C# y que tal vez te ayude, aunque reconozco que no lo he probado. El enlace es
    https://opendata.aemet.es/centrodedescargas/codegen

    Espero que te sirva

    ResponderEliminar
  13. Buenas,
    no tendrás un listado con todos los estados del cielo (nubloso, soleado, etc.)

    Un saludo y buen artículo

    ResponderEliminar
  14. Buenas noches Alberto, lo puedes encontrar en la ayuda de la predicción por localidades de Aemet. Te dejo un enlace http://www.aemet.es/es/eltiempo/prediccion/municipios/madrid-id28079/ayuda

    Saludos

    ResponderEliminar
  15. Hola,

    ¿A alguien le funcionan los mapas significativos?
    Solo me funcionan los de análisis

    ResponderEliminar
  16. Quería preguntar si existe alguna manera de realizar una descargas diarias de los pronósticos de un municipio (Tarazona de la Mancha, Albacete).
    Si existiera alguna aplicación que pudiera descargar los datos en un formato que sea accesible (para Excel sería maravilloso).
    He estado leyendo acerca de las API, pero desconozco su funcionamiento (estudié ingeniería Agronómica). Me sería muy útil para poder generar previsiones de riego en cultivos.

    Espero que puedan ayudarme,
    muchas gracias.
    Un saludo.

    ResponderEliminar
  17. Para poder utilizar los datos de OpenData hay que programar. Dependiendo de lo que se quiera hacer con los datos el programa será más o menos complicado, pero no es una programación sencilla. En la página OpenData de Aemet hay muchos ejemplos.

    Saludos

    ResponderEliminar
  18. Hola, estoy descargando datos de Opendata y tengo una duda:
    los datos de dirección de viento, que entiendo que es la variable : DIR, ¿en qué unidades se expresan?

    Gracias de antemano y saludos!

    ResponderEliminar
  19. Efectivamente es la variable DIR y está codificada en decenas de grado.
    Saludos.

    ResponderEliminar
  20. Hola buenas tardes César, estoy tratando de realizar una rosa de los vientos con los datos de dirección (la variable dir) y no acabo de entender que el rango sea del 0 al 99, ¿eso quiere decir que el 99 equivaldría a los 360º normales?
    Muchas gracias y un saludo.

    ResponderEliminar
    Respuestas
    1. Buenas tardes Diego, el 99 equivale a dirección variable y por tanto no se puede asignar a ningún rumbo.

      Saludos.

      Eliminar
    2. Vale muchas gracias César, ¿sabrías como podría obtener los datos de la dirección del viento de una estación del AEMET?, es que ando un poco perdido la verdad.

      Eliminar
    3. Buenos días Diego, si no me equivoco ese campo no está en OpenData y tendrías que pedirlo a la Delegación Territorial a la que pertenezca la estación.

      Eliminar
  21. Hola. Está muy bien el post. Os paso enlace de cálculo de sensación térmica con datos de AEMET e integrado en un sistema domótico, por si es de interés:

    https://www.pacienciadigital.com/sensacion-termica-en-home-asssistant/

    ResponderEliminar
  22. Hola Cesar! Soy nuevo en el manejo de las APIs y estoy necesitando bajar los datos de valores climatológicos mensuales/anuales para todas las estaciones desde por lo menos 2010. ¿Es factible hacer esto con la API?

    ResponderEliminar
  23. Buenos días Santiago, sí es posible, pero hay que hacerse un pequeño programita. En el propio portal hay ejemplos en bastantes lenguajes.

    ResponderEliminar
    Respuestas
    1. Muchas gracias por tu respuesta, Cesar! Me tomo el atrevimiento de consultarte una pequeña cosa más: estoy teniendo problemas para generar la consulta de "climatologías mensuales anuales": arroja {"error": "no response from server"}. ¿Será un error de la página o estaré perdiéndome algo? Es raro porque otras consultas funcionan a la perfección (por ejemplo la diaria para TODAS las estaciones. Gracias y perdón el atrevimiento

      Eliminar
    2. Hola Santiago, algo tienes que estar haciendo mal porque yo la uso a diario para el blog y no tengo ningún problema; comprueba que la URL la estás generando correctamente. Espero que encuentres el error.

      Eliminar
  24. Hola César, gracias por el post, es de gran utilidad. ¿sabes si existe alguna plataforma o movimiento que abogue por "liberar" los datos de AEMET? Me parece increíble que obtener series históricas de un organismo público y en los tiempos que corren sea algo de pago. SObre todo, cuando estos datos pueden servir para proyectos de investigación/innovación, etc.. Un saludo

    ResponderEliminar
    Respuestas
    1. Buenas tardes Ana, la tendencia es ir ampliando los datos disponibles en OpenData. También creo que muchos datos para proyectos de investigación, innovación, etc., se pueden conseguir gratis, pero no estoy seguro.

      Eliminar
  25. Hola, buenos días

    Sería posible recopilar la información actual por municipio (estado cielo, temperatura, ...) de una vez?

    La única opción que veo es hacer la recopilación a través del código municipio pero tendría que ir uno por uno y al final si hay 8000 municipios, hará 8000 llamadas a la API, y eso no tiene sentido.

    ResponderEliminar
    Respuestas
    1. Buenos días Marco, que yo sepa hay que ir municipio a municipio. Yo lo hago así, aunque no me los descargo todos. Previamente hice una selección que cubre suficientemente bien todo el territorio.

      Eliminar
    2. Muchas gracias César.
      Finalmente lo hice así. Cogí unos pocos haciendo varias consultas.
      Gracias por tu aportación!

      Eliminar