我对 Python 编程还很陌生。 我正在尝试找出 PyOWM api,但我已经摸索过了。 最大的问题是尝试使用 ONE_CALL 查找所有类名和值。 我真的很困惑从打开的天气地图返回的 json 字符串中的天气警报。 阅读 pyown 文档,除了创建您自己的警报触发程序之外,我没有看到任何其他参考。
使用 pyowm 在调用 one_call(lat,lon) 后,它会从服务器返回响应,您可以浏览并获取特定项目,例如温度和风,即
print(one_call.current.temperature.get('temp'))
我已经弄清楚如何获取每小时和每日的天气预报。
目前我们处于天气警报状态,它显示在返回的 json 中,但我不知道如何让 pyowm 获得该警报。 PDF 的 one_call 部分所公开的内容非常缺乏。 至少对我来说是这样。 就像我说的,我是 Python 新手,距离我进行真正的编程已经 15 年了。 曾经用过 VB6 和一些 C 和 C++,但仅此而已。
感谢您的帮助。
由于 pyOWM 是更复杂 API 的包装器,因此可能他们尚未实现 Open Weather API 的警报部分。 我尝试浏览他们的文档,甚至他们的代码库,但没有找到我能找到的更改的引用。
我建议使用包装器(因为对于与警报无关的任何事情来说它要简单得多)并单独请求警报(如果可以在您的用例中完成)。 因此,在检查天气后,您可以执行以下操作:
import requests
# this is what returns your weather data, with the given parameters.
# note that we're excluding everything except alerts so that you only receive those
API_ENDPOINT = "https://api.openweathermap.org/data/2.5/onecall?lat={lat}&lon={lon}&exclude={part}&appid={API key}".format(your_lat, your_lon, 'current,minutely,hourly,daily', your_api_key)
# we call the endpoint to get alert info only
alert_data = requests.get(API_ENDPOINT)
# now let's check the HTTP status to make sure everything went right:
if alert_data.status_code == 200:
print(alert_data['alerts']
# inside this variable there are all alerts
else:
print('some %s error occurred' % alert_data.status_code)
根据 OWM 规范,alert_data 变量内的警报将具有 this 格式,因此它是一个字典列表:
"alerts": [
{
"sender_name": "NWS Tulsa",
"event": "Heat Advisory",
"start": 1597341600,
"end": 1597366800,
"description": "...HEAT ADVISORY REMAINS IN EFFECT FROM 1 PM THIS AFTERNOON TO\n8 PM CDT THIS EVENING...\n* WHAT...Heat index values of 105 to 109 degrees expected.\n* WHERE...Creek, Okfuskee, Okmulgee, McIntosh, Pittsburg,\nLatimer, Pushmataha, and Choctaw Counties.\n* WHEN...From 1 PM to 8 PM CDT Thursday.\n* IMPACTS...The combination of hot temperatures and high\nhumidity will combine to create a dangerous situation in which\nheat illnesses are possible."
},
...
]