urllib не работает с запросом API
Я пытаюсь написать этот код, где я запрашиваю эту информацию с openweathermap.org через API и пытаюсь напечатать температуру и местоположение в настоящее время.
Большая часть кода представляет собой смесь советов, которые я могу найти в Интернете.
Теперь я получаю эту ошибку, и я застрял. Может ли кто-нибудь помочь мне снова на правильном пути?
Вот мой код:
import urllib.request, urllib.parse, urllib.error
import json
while True:
zipcode = input('Enter zipcode: ')
if len(zipcode) < 1: break
url = 'http://api.openweathermap.org/data/2.5/weather?
zip='+zipcode+',nl&appid=db071ece9a338a36e9d7a660ec4f0e37?'
print('Retrieving', url)
uh = urllib.request.urlopen(url)
data = uh.read().decode()
print('Retrieved', len(data), 'characters')
try:
js = json.loads(data)
except:
js = None
temp = js["main"]["temp"]
loc = js["name"]
print("temperatuur:", temp)
print("locatie:", loc)
Так вот URL: http://api.openweathermap.org/data/2.5/weather?zip=3032,nl&appid=db071ece9a338a36e9d7a660ec4f0e37
Ошибка, которую я получаю:
Введите почтовый индекс: 3343 Получение http://api.openweathermap.org/data/2.5/weather?zip=3343,nl&appid=db071ece9a338a36e9d7a660ec4f0e37? Traceback (последний вызов был последним): файл "weatherapi2.py", строка 12, в файле uh = urllib.request.urlopen(url) "C:\Users\ErfanNariman\AppData\Local\Programs\Python\Python36\lib\urllib\request.py", строка 223, в urlopen возвращаем opener.open(url, data, timeout) Файл" C: \ Users \ ErfanNariman \ AppData \ Local \ Programs \ Python \ Python36 \ lib \ urllib \ request.py ", строка 532, в открытом ответе = meth(req, response) Файл "C: \ Users \ ErfanNariman \ AppData \ Local \ Programs \ Python \ Python36 \ lib \ urllib \ request.py", строка 642, в http_response 'http', запрос, ответ, код, msg, hdrs) Файл "C: \ Users \ ErfanNariman \ AppData \ Local \ Programs \ Python \ Python36 \ lib \ urllib \ request.py", строка 570, при ошибке верните self._call_chain(*args) Файл "C: \ Users \ ErfanNariman \ AppData \ Local \ Programs \ Python \ Python36 \ lib \ urllib \ request.py", строка 504, в _call_chain result = func(*args) Файл "C:\Users\ErfanNariman\AppData\Local\Programs\Python\Python36\lib\urllib\request.py", строка 650, в http_error_default повысить HTTPError(req.full_url, code, msg, hdrs, fp) urllib.error.HTTPError: Ошибка HTTP 401: неавторизован
1 ответ
После устранения неполадок я нашел вашу проблему. У вас есть дополнительные '?' в конце вашего URL в вашем питоне.
Удалите это, и ваш запрос работает нормально. Пробовал это с этим кодом и работал
import urllib.request, urllib.parse, urllib.error
import json
while True:
zipcode = input('Enter zipcode: ')
if len(zipcode) < 1: break
url = 'http://api.openweathermap.org/data/2.5/weather?zip='+zipcode+',nl&appid=db071ece9a338a36e9d7a660ec4f0e37'
print('Retrieving', url)
uh = urllib.request.urlopen(url)
data = uh.read().decode()
print('Retrieved', len(data), 'characters')
try:
js = json.loads(data)
except:
js = None
temp = js["main"]["temp"]
loc = js["name"]
print("temperatuur:", temp)
print("locatie:", loc)