如何使用请求连接到天气 API?

How to connect to weather API using requests?

我正在尝试通过连接到天气来学习请求和练习 API。但出于某种原因我无法让它工作?很明显,天气 API 以某种方式需要参数,我似乎无法弄清楚它是如何转化为请求的。

这是我的代码:

r = requests.get('http://api.openweathermap.org/data/2.5/weather', q={'Anderson'})

这是 API 页面的 link: https://openweathermap.org/current

我看到天气页面需要 q = city 的参数,但我得到的错误是:

TypeError: request() got an unexpected keyword argument 'q'

这里还有我指的请求页面:http://docs.python-requests.org/en/master/

感谢您的帮助!

尝试将您的调用更改为后面的调用(通过将 api 键添加到 params):

r = requests.get('http://api.openweathermap.org/data/2.5/weather', params={'q': 'Anderson', 'APPID': YOUR_API_KEY})

请阅读 requests 用户手册,至少 quickstart guide。 您将要使用的 RESTful API 需要带有 q="City Name" 参数的 GET 请求。此外,您必须拥有 appid 并为每个请求添加它。

  1. 注册您的应用程序并选择定价计划https://openweathermap.org/price
  2. 同时传递 q="City Name"APPID=xxx 参数

对应的请求如下:

api_url = 'http://api.openweathermap.org/data/2.5/weather'
appid = ...    
r = requests.get(url=api_url, params=dict(q='Anderson', APPID=appid))

您需要一个 appid 开放天气,个人使用免费 (https://openweathermap.org/appid#get)

>>> import requests
>>> r = requests.get('http://samples.openweathermap.org/data/2.5/weather?q=London,uk&appid=b1b15e88fa797225412429c1c50c122a1')
>>> loc_weather = r.content.strip()
>>> loc_weather
'{"coord":{"lon":-0.13,"lat":51.51},"weather":[{"id":300,"main":"Drizzle","description":"light intensity drizzle","icon":"09d"}],"base":"stations","main":{"temp":280.32,"pressure":1012,"humidity":81,"temp_min":279.15,"temp_max":281.15},"visibility":10000,"wind":{"speed":4.1,"deg":80},"clouds":{"all":90},"dt":1485789600,"sys":{"type":1,"id":5091,"message":0.0103,"country":"GB","sunrise":1485762037,"sunset":1485794875},"id":2643743,"name":"London","cod":200}'

这适用于 weatherbit。

url:

url = "https://api.weatherbit.io/v2.0/history/daily"

创建负载:

payload = {'key':'12345fcfa0hjde13a7896fbdae1ghjkjh',
          'city_id': '1261481',  # This is New Delhi
          'start_date': '2021-03-13',
          'end_date': '2021-03-14'}

使用GET调用(网站说明支持GET调用):

data = requests.get(url, params=payload)
assert data.status_code == 200
assert 'error' not in data.json().keys()

您的数据:

data.json() # Or text or content

我的系统规格:Python 3.8,请求 2.25.1