我在pyown中遇到以下问题:
import pyowm
owm = pyowm.OWM('API_number')
obs = owm.weather_at_place('Sao Paulo')
w = obs.get_weather()
rain_dict = w.get_rain()
rain = [rain_dict.get(k) for k in ['3h']]
print rain
当我检查下雨的值时,它返回[Nope],当我从rain_dict检查纯数据时,它返回{},而法线是{'3h':'some value'}。
Open Weather或PyOwm有问题吗?
答案 0 :(得分:0)
我认为这不再是您的问题,但是对于其他可能遇到相同问题的人,这就是我的发现。如果没有下雨,则返回的字典将为{},反之为{'1h':'0.0','3h':'0.0}。
解决此问题的简单方法是检查字典插槽(例如'1h'),如果为true,则按如下所示将该插槽的值分配给您的变量
if '1h' in rain_dict:
rain = rain_dict['1h']
else:
rain = 0.0
print(rain)
在获取降雨值的过程中,我遇到了一些问题。首先,当我打开雨量字典时,我只会得到“ 1h”降雨量,而没有“ 3h”总数。其次,“ 1h”降雨量的间隔有些奇怪。我还没有看到可靠的数据。例如,当我知道最后一小时下雨时,我将拉出该值。有时它显示累积的降雨,而其他时候则没有。最初,我以为这些值仅用于小时(即从6:00 pm到6:59 pm),而不是过去60分钟(即在6:24 pm进行轮询)的降雨量是从5:24 pm到6:下午24点)。我将对此进行更多研究,以便在此问题上获得更好的解决方案,并在确定后再提供更新。附带一提,我确实检查了OPENWEATHER 2.5 API,但没有找到关于rain对象真正返回值的任何描述。
答案 1 :(得分:0)
好的,所以前几天我做了一个实验,当时我知道要下雨了。而且我发现我收到的数据存在差异。我使用以下两种方法提取降雨量数据:
weather = mgr.weather_at_coords(location['lat'], location['lon']).weather
new_rainfall = weather.rain
另一个选择是:
current = mgr.one_call(location['lat'], location['lon']).current
new_rainfall = current.rain
尽管这两种方法有些相似,但它们的数据并不相同。但更重要的是,对我而言,它似乎并未真正显示出准确的数据,因为一次,每小时的降雨值返回了{},表示没有下雨。然后五分钟后,我收到的值为0.42毫米,但是五分钟后,我仅收到{}个响应(请参见下面的示例)。
2020-09-13 11:05:00, {}
2020-09-13 11:10:00, {'1h': 0.42}
2020-09-13 11:15:00, {}
2020-09-13 11:20:00, {}
2020-09-13 11:25:00, {}
2020-09-13 11:30:00, {}
2020-09-13 11:35:00, {}
2020-09-13 11:40:00, {}
我已向开放天气地图API的人员提交了支持请求,我正在等待答复。同时,我相信我已经使用one_call_history找到了更准确的方法来查询最后一小时的降雨量:
now = int(time())
then = now - 3600
history = mgr.one_call_history(location['lat'], location['lon'], then).current
new_rainfall = history.rain
如果确实从OWM收到任何有用的信息,我将进行进一步的更新,但是目前看来,使用前两种方法报告的瞬时降雨率* 1小时。
敬请期待...