PyOWM - 天气 API 未按预期工作

问题描述

我正在测试要在机器人上使用的代码,我已经在 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,'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

有人知道是什么问题吗?
这是来自网站的图片,但似乎每日预测不起作用

enter image description here

注意:我已经创建并测试了新密钥,但此错误不断发生

解决方法

forecast_at_place() 仅适用于旧的 API 密钥(或遗留密钥),根据我的知识不适用于较新的密钥,这不是方法问题,只是较新版本的API 似乎不起作用或不支持。

请参考:https://pyowm.readthedocs.io/en/latest/v3/code-recipes.html#onecall

您可以使用 locations_for() 方法。

因此,您应该能够使用 OneCall 方法检索观察到的和每日预测的数据。