Buenas gente. Estoy haciendo un pequeño script para obtener la temperatura en España de cada dia durante el año pasado. Estoy usando la web de AEMET que trae una API bastante buena pero no consigo ejecutar ni siquiera el ejemplo que ponen.
Link del ejemplo (https://opendata.aemet.es/centrodedescargas/ejemProgramas)
Link de la web de la API de AEMET (http://www.aemet.es/es/datos_abiertos/AEMET_OpenData)
El ejemplo de uso que estoy intentando ejecutar es el siguiente:
import requests
url = "https://opendata.aemet.es/opendata/api/valores/climatologicos/inventarioestaciones/todasestaciones/"
querystring = {"api_key":"xxxxxxxxxxxxxxxxxxxxxxx"}
headers = {
'cache-control': "no-cache"
}
response = requests.request("GET", url, headers=headers, params=querystring)
print(response.text)
Bueno, el error que me da dice tal que así:
C:\Users\NikNitro\Desktop>python test.py
Traceback (most recent call last):
File "test.py", line 29, in <module>
response = requests.request("GET", url, headers=headers, params=querystring)
File "C:\Python27\lib\site-packages\requests\api.py", line 58, in request
return session.request(method=method, url=url, **kwargs)
File "C:\Python27\lib\site-packages\requests\sessions.py", line 502, in request
resp = self.send(prep, **send_kwargs)
File "C:\Python27\lib\site-packages\requests\sessions.py", line 612, in send
r = adapter.send(request, **kwargs)
File "C:\Python27\lib\site-packages\requests\adapters.py", line 514, in send
raise SSLError(e, request=request)
requests.exceptions.SSLError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:661)
Estoy usando Windows 10.
En cuanto a soluciones he visto el poner verify=False, pero no me deja acceder así porque es necesario ssl.
A True me da el mismo error y, según he visto en la red, debería poner una ruta a un certificado.
En windows no he encontrado la carpeta donde están, solo el administrador así que he descargado uno de GoDaddy, he puesto la ruta y... el mismo error.
Ya no sé qué más probar. Qué me recomendáis?
Gracias;)
CitarEn cuanto a soluciones he visto el poner verify=False, pero no me deja acceder así porque es necesario ssl.
es raro, porque esta opción no descarta el certificado, solo ignora las advertencias de su validez y sigue usandolo...
probando verify=True, funciona bien, aunque da una alerta de inseguridad... puedes hacer esto que es lo mismo y te ahorras la alerta
import urllib, urllib2, ssl
url = "https://opendata.aemet.es/opendata/api/valores/climatologicos/inventarioestaciones/todasestaciones/"
querystring = {"api_key":"xxxxxxxxxxxxxxxxxxxxxxx"}
data = urllib.urlencode(querystring)
context = ssl._create_unverified_context()
try:
req = urllib2.urlopen(url+"?"+data, context=context)
response = urllib2.urlopen(req)
print response.read()
except urllib2.HTTPError, e:
print e.code, e.reason
D'accord, lo conseguí. Muchas gracias Engel Lex :)
Como aporte decir que de primeras da error en la línea 11 porque (según he entendido) req es ya una url abierta.
El cambio sería unicamente no hacer la línea 11 e imprimir req.read().
Gracias de nuevo.
Saludos;)
ups! jjejeje tienes razón se me pasó XD lo hice brevemente de copia de otros codigos y lo armé aśi sin querer