PyOWM - 天气 API 未按预期工作
PyOWM - Weather API not working as expected
我正在测试在机器人上使用的代码,我在 OpenWeatherMap 上创建了一个帐户并获得了一个 API 密钥
据我了解,OWM 上的免费帐户可以获取每日天气预报
我试过这个代码
from pyowm import OWM
from pyowm.utils import config
from pyowm.utils import timestamps
owm = OWM('c548bc34f606696689b7c67ce8cbdbc7')
mgr = owm.weather_manager()
observation = mgr.weather_at_place('Leiria, PT')
w = observation.weather
print(w.detailed_status)
print(w.wind())
print(w.humidity)
print(w.temperature('celsius'))
print(w.rain)
print(w.heat_index)
print(w.clouds)
forecast = mgr.forecast_at_place('Leiria, PT', 'daily')
answer = forecast.will_be_clear_at(timestamps.tomorrow())
print(answer)
输出是
clear sky
{'speed': 4.12, 'deg': 80}
43
{'temp': 22.77, 'temp_max': 23.33, 'temp_min': 22.0, 'feels_like': 19.81, 'temp_kf': None}
{}
None
0
这是意料之中的,我得到了我当时写的地方的值,但是对于我要求 forecast_at_place()
的部分,我得到了这个
Traceback (most recent call last):
File "c:\Users\AndreClerigo\Desktop\Git\weather_twitterbot\tempCodeRunnerFile.py", line 19, in <module>
forecast = mgr.forecast_at_place('Leiria, PT', 'daily')
File "C:\Users\AndreClerigo\AppData\Local\Programs\Python\Python39\lib\site-packages\pyowm\weatherapi25\weather_manager.py", line 291, in forecast_at_place
_, json_data = self.http_client.get_json(uri, params=params)
File "C:\Users\AndreClerigo\AppData\Local\Programs\Python\Python39\lib\site-packages\pyowm\commons\http_client.py", line 140, in get_json
HttpClient.check_status_code(resp.status_code, resp.text)
File "C:\Users\AndreClerigo\AppData\Local\Programs\Python\Python39\lib\site-packages\pyowm\commons\http_client.py", line 283, in check_status_code
raise exceptions.UnauthorizedError('Invalid API Key provided')
pyowm.commons.exceptions.UnauthorizedError: Invalid API Key provided
有人知道问题出在哪里吗?
这是网站上的图片,但似乎每日预报不起作用
注意:我已经创建并测试了新密钥,但此错误一直在发生
forecast_at_place() 仅适用于旧的 API 密钥(或遗留密钥),据我所知不适用于较新的密钥,这不是方法问题,只是 API 的较新版本似乎不起作用或不支持。
请参考:https://pyowm.readthedocs.io/en/latest/v3/code-recipes.html#onecall.
你可以使用locations_for()方法。
因此,您应该能够使用 OneCall 方法检索观测数据和每日预测数据。
我正在测试在机器人上使用的代码,我在 OpenWeatherMap 上创建了一个帐户并获得了一个 API 密钥
据我了解,OWM 上的免费帐户可以获取每日天气预报
我试过这个代码
from pyowm import OWM
from pyowm.utils import config
from pyowm.utils import timestamps
owm = OWM('c548bc34f606696689b7c67ce8cbdbc7')
mgr = owm.weather_manager()
observation = mgr.weather_at_place('Leiria, PT')
w = observation.weather
print(w.detailed_status)
print(w.wind())
print(w.humidity)
print(w.temperature('celsius'))
print(w.rain)
print(w.heat_index)
print(w.clouds)
forecast = mgr.forecast_at_place('Leiria, PT', 'daily')
answer = forecast.will_be_clear_at(timestamps.tomorrow())
print(answer)
输出是
clear sky
{'speed': 4.12, 'deg': 80}
43
{'temp': 22.77, 'temp_max': 23.33, 'temp_min': 22.0, 'feels_like': 19.81, 'temp_kf': None}
{}
None
0
这是意料之中的,我得到了我当时写的地方的值,但是对于我要求 forecast_at_place()
的部分,我得到了这个
Traceback (most recent call last):
File "c:\Users\AndreClerigo\Desktop\Git\weather_twitterbot\tempCodeRunnerFile.py", line 19, in <module>
forecast = mgr.forecast_at_place('Leiria, PT', 'daily')
File "C:\Users\AndreClerigo\AppData\Local\Programs\Python\Python39\lib\site-packages\pyowm\weatherapi25\weather_manager.py", line 291, in forecast_at_place
_, json_data = self.http_client.get_json(uri, params=params)
File "C:\Users\AndreClerigo\AppData\Local\Programs\Python\Python39\lib\site-packages\pyowm\commons\http_client.py", line 140, in get_json
HttpClient.check_status_code(resp.status_code, resp.text)
File "C:\Users\AndreClerigo\AppData\Local\Programs\Python\Python39\lib\site-packages\pyowm\commons\http_client.py", line 283, in check_status_code
raise exceptions.UnauthorizedError('Invalid API Key provided')
pyowm.commons.exceptions.UnauthorizedError: Invalid API Key provided
有人知道问题出在哪里吗?
这是网站上的图片,但似乎每日预报不起作用
注意:我已经创建并测试了新密钥,但此错误一直在发生
forecast_at_place() 仅适用于旧的 API 密钥(或遗留密钥),据我所知不适用于较新的密钥,这不是方法问题,只是 API 的较新版本似乎不起作用或不支持。
请参考:https://pyowm.readthedocs.io/en/latest/v3/code-recipes.html#onecall.
你可以使用locations_for()方法。
因此,您应该能够使用 OneCall 方法检索观测数据和每日预测数据。