必须先注册获取windy api key并确认目标坐标可用气象模型,再按参数依赖规则构造post请求体,最后解析含iso时间戳和矢量风速分量的响应数据。

你需要在项目中实时接入全球高精度风速、温度、降水等气象数据,但Windy官方API文档写得零散,参数组合规则模糊,直接照着示例发请求常返回400或空响应——这不是你代码写错了,而是没摸清它的参数依赖逻辑和模型匹配规则。
第一步:注册并获取合法API Key
打开 https://www.php.cn/link/b5ae28d3272b19d52a3e7ba4c8f49cd9,用邮箱注册开发者账号。完成邮箱验证后,进入控制台点击“Create new key”,选择“Point Forecast API v2”类型,系统自动生成一串32位字母数字组合的Key。这一步必须完成,【没有有效Key,后续所有请求都会被拒绝】。
注意:免费版限制为每分钟最多10次请求,超出即返回429错误;生产环境建议提前升级付费套餐,否则定时任务可能频繁中断。
确认目标区域可用的气象模型
Windy不提供通用模型,每个经纬度坐标只支持特定模型。比如海南三亚(18.2°N, 109.5°E)可用gfs或cams,但法国巴黎(48.9°N, 2.4°E)则支持iconEU、arome甚至ecmwf——错选模型会导致请求直接失败,且错误提示仅显示“invalid model”,不告诉你该选哪个。
方法一:访问Windy网页版,在地图上放大到目标位置,右下角状态栏会实时显示当前加载的模型名称(如“GFS 0.25°”),这个就是你接口里model参数的合法值。
方法二:调用模型探测接口(需Key):GET https://api.windy.com/api/models/v1?lat=23.1&lon=113.2,返回JSON中models数组列出所有可用模型缩写,挑一个支持你所需参数的即可。
构造POST请求体并发送
第一步:准备基础字段,lat和lon必须为数字类型(不能是字符串),小数点后保留3~5位,超过6位会被截断导致定位偏移。
第二步:parameters数组只能填Windy明确支持的参数名,比如gfs模型支持"wind"但不支持"uv"(紫外线需换cams模型);填错任意一个参数,整个数组被忽略,返回数据里对应字段为空。
第三步:levels参数非必需,但如果你要取850hPa高度层的温度,就必须显式传["850h"],且该level必须存在于availLevels返回列表中——否则windy会静默丢弃level设置,返回地表数据。
示例完整body:
{<br> "lat": 23.118,<br> "lon": 113.254,<br> "model": "gfs",<br> "parameters": ["wind", "temp", "rh"],<br> "key": "JEexHogRy9RENJWr6BFzlhH8NaWDfkk5"<br>}
用curl或requests发送POST到https://api.windy.com/api/point-forecast/v2,响应头Content-Type应为application/json,状态码200才代表成功。
解析返回数据的时间轴结构
Windy不按固定时间间隔返回数据。gfs模型通常每3小时一组(0h、3h、6h…),但ECMWF可能返回0h、6h、12h、24h、36h、48h、72h共7组,且各组内部时间戳格式为ISO 8601字符串(如"2026-07-28T12:00:00Z"),不是Unix时间戳。
关键字段路径:response["data"]["properties"]["timeseries"] 是主数据数组,每项含time和data对象;data里字段名与你请求的parameters完全一致,例如请求["wind"],则data.wind是一个包含u(东向风速)、v(北向风速)的对象。
注意:【wind参数返回的是矢量分量,不是直接的风速和风向;需自行计算magnitude = sqrt(u²+v²),direction = atan2(u,v)】。
大量免费API接口:立即使用
涵盖生活服务API、金融科技API、企业工商API、等相关的API接口服务。免费API接口可安全、合规地连接上下游,为数据API应用能力赋能!











