使用OpenWeather Map API获取降雨数据及预报遇阻求助
解决OpenWeather Map API降雨数据获取问题
1. 当前降雨量获取错误的原因
你用data['weather'][0]['rain']是找错了字段位置——OpenWeather的返回结构里,当前降雨量数据不在weather数组内,而是直接在响应的根层级:
- 如果当前有降雨,响应里会有
rain对象,包含1h或3h字段(分别是过去1小时/3小时的降雨量) - 如果当前没有降雨,这个字段不会存在,直接访问会触发KeyError
正确的获取方式需要先判断字段是否存在:
# 检查根节点是否包含rain字段 if 'rain' in data: # 获取过去1小时降雨量(不存在则默认0) rain_1h = data['rain'].get('1h', 0) # 或获取过去3小时降雨量 rain_3h = data['rain'].get('3h', 0) else: rain_1h = 0 rain_3h = 0
2. 降雨概率的获取(免费版支持)
免费版的当前天气API(/weather接口)不提供降雨概率,这个数据仅在5天逐3小时预报API(/forecast接口)中存在。每个预报时段的pop字段就是降雨概率(取值0-1,1代表100%概率):
# 以第一个预报时段为例 forecast_data = response.json() first_pop = forecast_data['list'][0]['pop'] # 转换为百分比格式 pop_percent = first_pop * 100
3. 免费版API限制提醒
免费版/forecastAPI最多返回5天、每3小时一个时段的预报数据,足够获取未来不同时段的降雨概率;另外只有当前确实有降雨时,/weather接口的响应才会包含rain字段,无降雨时该字段不会出现,务必做存在性判断避免报错。
内容的提问来源于stack exchange,提问作者Hope Sain
相关产品推荐
相关产品推荐

