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)
Другие вопросы по тегам