Portal    Foro    Buscar    FAQ    Registrarse    Conectarse

[SOLUCIONADO] API AEMET

[SOLUCIONADO] API AEMET
Artículo
Responder citando    Descargar mensaje  
Mensaje [SOLUCIONADO] API AEMET 
 
¿Alguien tiene experiencia con este asunto?

Por lo que deduzco, hay que conectar con:
<php> "https://opendata.aemet.es/opendata/api/valores/climatologicos/inventarioestaciones/todasestaciones/?api_key=jyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJqbW9udGVyb2dAYWVtZXQuZXMiLCJqdGkiOiI3NDRiYmVhMy02NDEyLTQxYWMtYmYzOC01MjhlZWJlM2FhMWEiLCJleHAiOjE0NzUwNTg3ODcsImlzcyI6IkFFTUVUIiwiaWF0IjoxNDc0NjI2Nzg3LCJ1c2VySWQiOiI3NDRiYmVhMy02NDEyLTQxYWMtYmYzOC01MjhlZWJlM2FhMWEiLCJyb2xlIjoiIn0.xh3LstTlsP9h5cxz3TLmYF4uJwhOKzA0B6-vH8lPGGw",
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => "",
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 30,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => "GET",
  CURLOPT_HTTPHEADER => array(
    "cache-control: no-cache"
  ),
));

$response = curl_exec($curl);
$err = curl_error($curl);

curl_close($curl);

if ($err) {
  echo "cURL Error #:" . $err;
} else {
  echo $response;
}


El ejemplo es php de ejemplo de la AEMET.

La consulta adecuada de la API está ya incluida en el código. En el párrafo anterior se solicita el inventario de estaciones pero se podría solicitar la climatología diaria con:
/api/valores/climatologicos/diarios/datos/fechaini/{fechaIniStr}/fechafin/{fechaFinStr}/estacion/{idema}


¿Alguna experiencia? ¿Alguna idea de cómo implementarlo?



 
última edición por Grandamakulo el Jueves, 22 Marzo 2018, 21:53; editado 2 veces 
Grandamakulo - Ver perfil del usuario Enviar mensaje privado  
Grandamakulo [ Martes, 13 Marzo 2018, 19:46 ]
 


[SOLUCIONADO] API AEMET
Comentarios
Responder citando    Descargar mensaje  
Mensaje Re: API AEMET 
 
Grandamakulo:
Citar:
¿Alguien tiene experiencia con este asunto?

No, pero ... ¿has pedido tu key?
https://opendata.aemet.es/centrodedescargas/obtencionAPIKey

Y hay unas especificaciones en :
https://opendata.aemet.es/dist/inde...nes-especificas

Pero dependerá mucho de lo que quieras hacer... (hay un monton de predicciones, observaciones, red de contaminación, etc..)

Citar:
¿Alguna idea de cómo implementarlo?

En la siguiente página hay un monton de ejemplos en varios lenguajes:
https://opendata.aemet.es/centrodedescargas/ejemProgramas?

No deberia de ser dificil, vuott, puso en este enlace
https://foro.gambas-es.org/viewtopic.php?f=1&t=6865&highlight=
un ejemplo de como extraer datos de una web, usando la clase httpclient



 
última edición por jsbsan el Martes, 13 Marzo 2018, 20:02; editado 3 veces 
jsbsan - Ver perfil del usuario Enviar mensaje privado  
jsbsan [ Martes, 13 Marzo 2018, 20:01 ]
Responder citando    Descargar mensaje  
Mensaje Re: API AEMET 
 
Sí, tengo la clave. Sí, he mirado las especificaciones. Sí, he visto los ejemplos     .El problema es la traducción del ejemplo a Gambas3. Voy a probar con lo que me comentas del ejemplo de @Vuott .
¡Muchas gracias!



 
última edición por Grandamakulo el Martes, 13 Marzo 2018, 20:10; editado 1 vez 
Grandamakulo - Ver perfil del usuario Enviar mensaje privado  
Grandamakulo [ Martes, 13 Marzo 2018, 20:08 ]
Responder citando    Descargar mensaje  
Mensaje Re: API AEMET 
 
Un documento de "preguntas frecuentes" que te puede aclarar muchas cosas:
https://opendata.aemet.es/centrodedescargas/docs/FAQs150217.pdf



 
jsbsan - Ver perfil del usuario Enviar mensaje privado  
jsbsan [ Martes, 13 Marzo 2018, 20:28 ]
Responder citando    Descargar mensaje  
Mensaje Re: API AEMET 
 
Gracias por la información @jsbsan; éste no lo había visto.

Vale, he cogido la «curl» del ejemplo (aquí la he puesto un poco bonita, pero hay que quitar los saltos de línea):

curl -X GET
--header 'Accept: application/javascript'
--header 'api_key: eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJjYWxlbmRhcmlvQGFzdHJvZGFpbWllbC5lcyIsImp0aSI6ImFjYjgyZWI1LTViNjgtNDdiZi05MjMzLTUxYjdmYTZjYmYzYSIsImlzcyI6IkFFTUVUIiwiaWF0IjoxNTIwOTY0ODQ1LCJ1c2VySWQiOiJhY2I4MmViNS01YjY4LTQ3YmYtOTIzMy01MWI3ZmE2Y2JmM2EiLCJyb2xlIjoiIn0.yTXK95LZ8Z0jxBx6ddM0lzZUYBBKPtzN56G6ENrPIgA'

'https://opendata.aemet.es/opendata/api/valores/climatologicos/diarios/datos/fechaini/2018-03-01T00%3A00%3A00UTC/fechafin/2018-03-09T00%3A00%3A00UTC/estacion/4121'
 


Y lo he pasado a gambas3:

' gambas module file
Public Const APIKEY As String = "eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJjYWxlbmRhcmlvQGFzdHJvZGFpbWllbC5lcyIsImp0aSI6ImFjYjgyZWI1LTViNjgtNDdiZi05MjMzLTUxYjdmYTZjYmYzYSIsImlzcyI6IkFFTUVUIiwiaWF0IjoxNTIwOTY0ODQ1LCJ1c2VySWQiOiJhY2I4MmViNS01YjY4LTQ3YmYtOTIzMy01MWI3ZmE2Y2JmM2EiLCJyb2xlIjoiIn0.yTXK95LZ8Z0jxBx6ddM0lzZUYBBKPtzN56G6ENrPIgA"

Private myhttp As New HttpClient As "myhttp"

Public Sub Main()
  Dim Cabeceras As New String[2]
  
  'Private myhttp As New HttpClient As "myhttp"
  myhttp.URL = "https://opendata.aemet.es/opendata/api/valores/climatologicos/diarios/datos/fechaini/2018-03-01T00%3A00%3A00UTC/fechafin/2018-03-09T00%3A00%3A00UTC/estacion/4121"
  Cabeceras[0] = "Accept: application/javascript"
  Cabeceras[1] = "api_key: " & APIKEY
  myhttp.Get(Cabeceras, "/tmp/Pru.txt")
End


No da error, pero el archivo de salida está vacío. ¿Alguna sugerencia?



 
última edición por Grandamakulo el Miercoles, 14 Marzo 2018, 08:44; editado 2 veces 
Grandamakulo - Ver perfil del usuario Enviar mensaje privado  
Grandamakulo [ Martes, 13 Marzo 2018, 21:37 ]
Responder citando    Descargar mensaje  
Mensaje Re: API AEMET 
 
Ni idea amigo , esperate a ver si algun usuario de los que saben de programación te lo mira.
Veo que es tema de php , algo que nunca toque.

Saludos.



 
portaro - Ver perfil del usuario Enviar mensaje privado  
portaro [ Miercoles, 14 Marzo 2018, 00:15 ]
Responder citando    Descargar mensaje  
Mensaje Re: API AEMET 
 
Creo que el problema es el formato de las cabeceras, que en cada ejemplo tiene uno distinto. La documentación de gambas no indica cuál debe ser este formanto, ni tan siquiera pone un ejemplo. Me temo que sí, que hay que esperar a que alguien que conozca el formato adecuado nos lo indique.




 
Grandamakulo - Ver perfil del usuario Enviar mensaje privado  
Grandamakulo [ Miercoles, 14 Marzo 2018, 08:30 ]
Responder citando    Descargar mensaje  
Mensaje Re: API AEMET 
 
Grandamakulo:

He estado probando el ejemplo que viene del lenguaje "Shell", usando el comando curl.

El problema es que la página web tiene el certificado de seguridad (https) caducado (o algo le pasa), que hace que curl de el siguiente error:

Citar:
curl: (60) SSL certificate problem: unable to get local issuer certificate
More details here: http://curl.haxx.se/docs/sslcerts.html

curl performs SSL certificate verification by default, using a "bundle"
 of Certificate Authority (CA) public keys (CA certs). If the default
 bundle file isn't adequate, you can specify an alternate file
 using the --cacert option.
If this HTTPS server uses a certificate signed by a CA represented in
 the bundle, the certificate verification probably failed due to a
 problem with the certificate (it might be expired, or the name might
 not match the domain name in the URL).
If you'd like to turn off curl's verification of the certificate, use
 the -k (or --insecure) option.




Entonces lo que hay que hacer es añadir el parametro "--insecure" al final de la linea de comando:
curl --request GET --url 'https://opendata.aemet.es/opendataapi/valores/climatologicos/inventarioestaciones/todasestaciones/?api_key=AquiPonTuKEY' --header 'cache-control: no-cache' --insecure


Esto te va a devolver una salida parecida a esto:
{
  "descripcion" : "exito",
  "estado" : 200,
  "datos" : "https://opendata.aemet.es/opendata/sh/f26e7dbd",
  "metadatos" : "https://opendata.aemet.es/opendata/sh/0556af7a"
}


Los datos que necesitas, los tienes que descargar de https://opendata.aemet.es/opendata/sh/f26e7dbd
 (que podrás usar curl y el parametro --insecure otra vez osea:
curl --url 'https://opendata.aemet.es/opendata/sh/f26e7dbd' --insecure >datos.txt

), donde el archivo datos.txt tiene los datos que se han generado.

Nota:
La direccion que te dan de los datos ("https://opendata.aemet.es/opendata/sh/f26e7dbd"), caduca a los pocos minutos,  sino lo haces acontinuación, te dará una salida como esta:
Citar:
{
  "descripcion" : "datos expirados",
  "estado" : 404
}


Si todo va "bien", la salida que obtienes del ejemplo es algo parecido a esto:
Citar:

[ {
  "latitud" : "431825N",
  "provincia" : "A CORUїA",
  "altitud" : "98",
  "indicativo" : "1387E",
  "nombre" : "A CORUїA AEROPUERTO",
  "indsinop" : "08002",
  "longitud" : "082219W"
}, {
  "latitud" : "432157N",
  "provincia" : "A CORUїA",
  "altitud" : "58",
  "indicativo" : "1387",
  "nombre" : "A CORUїA",
  "indsinop" : "08001",
  "longitud" : "082517W"
}, {
  "latitud" : "430938N",
  "provincia" : "A CORUїA",
  "altitud" : "50",
  "indicativo" : "1393",
  "nombre" : "CABO VILAN",
  "indsinop" : "08006",
  "longitud" : "091239W"
....
....




 
jsbsan - Ver perfil del usuario Enviar mensaje privado  
jsbsan [ Miercoles, 14 Marzo 2018, 09:17 ]
Responder citando    Descargar mensaje  
Mensaje Re: API AEMET 
 
Lo del formato de salida y la segunda consulta más o menos lo tenía claro. Ahora lo que me toca es explorar  «--insecure», a ver cómo narices lo pongo en la consulta con la clase httpclient, o bien hago una consulta curl directamente con Exec.
¡Muchas gracias!



 
Grandamakulo - Ver perfil del usuario Enviar mensaje privado  
Grandamakulo [ Miercoles, 14 Marzo 2018, 09:27 ]
Responder citando    Descargar mensaje  
Mensaje Re: API AEMET 
 
Vislumbro un Jarvis del clima tal vez??
Le podriamos poner Gambux

Gambux, ¿Que temperatura hace en Madrid?

>>>Enseguida señor

[luego aca todo el rollo de este post y zas !!]

>>>Hace 35º ideal para tomarse una caña!

En el caso de Vuott hay que poner birra.

Saludos.



 
última edición por tincho el Miercoles, 14 Marzo 2018, 13:50; editado 1 vez 
tincho - Ver perfil del usuario Enviar mensaje privado  
tincho [ Miercoles, 14 Marzo 2018, 13:49 ]
Mostrar mensajes anteriores:    
 
Publicar nuevo tema  Responder al tema  Página 1 de 2
Ir a la página 1, 2  Siguiente
 

Usuarios navegando en este tema: 0 registrados, 0 ocultos y 1 invitado
Usuarios registrados conectados: Ninguno


 



 

cron