urllib无法使用api请求

时间:2017-12-26 12:32:24

标签: python api urllib openweathermap

我正在尝试编写此代码,我从openweathermap.org请求此信息thourgh 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)

所以网址是: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行,in       呃= urllib.request.urlopen(url)     文件“C:\ Users \ ErfanNariman \ AppData \ Local \ Programs \ Python \ Python36 \ lib \ urllib \ request.py”,第223行,在urlopen中       return opener.open(url,data,timeout)     文件“C:\ Users \ ErfanNariman \ AppData \ Local \ Programs \ Python \ Python36 \ lib \ urllib \ request.py”,第532行,打开       response = meth(req,response)     在http_response中的文件“C:\ Users \ ErfanNariman \ AppData \ Local \ Programs \ Python \ Python36 \ lib \ urllib \ request.py”,第642行       'http',请求,响应,代码,消息,hdrs)     文件“C:\ Users \ ErfanNariman \ AppData \ Local \ Programs \ Python \ Python36 \ lib \ urllib \ request.py”,第570行,出错       return self._call_chain(* args)     文件“C:\ Users \ ErfanNariman \ AppData \ Local \ Programs \ Python \ Python36 \ lib \ urllib \ request.py”,第504行,在_call_chain中       result = func(* args)     在http_error_default中输入文件“C:\ Users \ ErfanNariman \ AppData \ Local \ Programs \ Python \ Python36 \ lib \ urllib \ request.py”,第650行       引发HTTPError(req.full_url,code,msg,hdrs,fp)   urllib.error.HTTPError:HTTP错误401:未经授权

1 个答案:

答案 0 :(得分:1)

经过一些故障排除后,我发现了您的问题。你有一个额外的'?'在你的python的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)