如何使用请求连接到天气 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 并为每个请求添加它。
- 注册您的应用程序并选择定价计划https://openweathermap.org/price
- 同时传递
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
我正在尝试通过连接到天气来学习请求和练习 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 并为每个请求添加它。
- 注册您的应用程序并选择定价计划https://openweathermap.org/price
- 同时传递
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