Open-Meteo 自托管天气 API 完整指南:免 API Key 的免费预报与历史数据方案
【免费下载链接】open-meteoFree Weather Forecast API for non-commercial use项目地址: https://gitcode.com/GitHub_Trending/op/open-meteo
接天气数据时被"需要 API Key"卡住过吗?Open-Meteo 是一个开源天气 API,免 Key、非商业用途免费,提供 16 天逐小时预报、80 年历史数据、空气质量与海洋数据。如果你是想低成本接入气象数据的开发者或研究者,这篇指南就是为你写的。
项目速览
Open-Meteo 是一个自托管的天气 API 服务器:它从各国气象机构下载原始预报,转成自研的.om二进制时序压缩格式,再对外提供/v1/forecast等查询接口。
- 非商业用途免费,无需 API Key,支持 CORS,无广告、无追踪、无 Cookie
- 最长 16 天逐小时预报;全球模型 11 km 分辨率,区域模型最细到 1.5 km
- 80 年历史天气(ERA5 再分析),另有空气质量、海洋、地理编码、高程等 API
- 数据采用 CC BY 4.0 许可,源码采用 AGPLv3,Swift + Vapor 编写,编译成单个二进制
为什么值得用:4 个具体好处
免 Key 直接调。传统商业天气接口要先注册、申请 Key、看配额。这里一条curl "http://127.0.0.1:8080/v1/forecast?latitude=47.1&longitude=8.4&hourly=temperature_2m"就拿到数据,开发阶段零审批流程。
多模型一次请求。同一条查询里用models参数切换或对比 DWD ICON、NOAA GFS、ECMWF IFS、MeteoFrance 等模型,官方文档给出的响应时间在 10 毫秒以内。
自托管不用搬全量模型。设好REMOTE_DATA_DIRECTORY后,服务直接读 AWS 上的开源气象数据库并在本地做 LRU 缓存(CACHE_SIZE默认 10GB),首次启动无需自己下载 TB 级原始预报。
自托管本身免费。AGPLv3 允许你商用场景自建(需遵守开源条款),配合 docs/sync-command.md 还能把数据库在多台机器间同步。
上手体验:Docker 三步跑起来
我按 docs/getting-started.md 走了一遍,三步:
docker volume create --name open-meteo-data docker run -d --rm --name open-meteo \ -v open-meteo-data:/app/data \ -e REMOTE_DATA_DIRECTORY=https://openmeteo.s3.amazonaws.com/data/ \ -e CACHE_SIZE=8GB \ -p 127.0.0.1:8080:8080 \ ghcr.io/open-meteo/open-meteo curl "http://127.0.0.1:8080/v1/forecast?latitude=47.1&longitude=8.4&models=ecmwf_ifs025&hourly=temperature_2m"实际感受:第一次curl要等几秒(冷缓存,从远端拉数据),之后同坐标、邻近坐标的请求就快了。服务大约每 2 分钟检查一次远端数据更新并预加载变化。仓库里也带了docker-compose.yml,docker compose up -d效果相同。硬件上需要 8GB 起步(建议 16GB)内存、至少 100GB 存储,NVMe SSD 体验最好。
功能展示:3 个真实场景
场景 1:天气 App 要 16 天逐小时预报
痛点:自己拉原始 GRIB 文件要处理网格、投影、二进制解码,工作量巨大。Open-Meteo 的解法:/v1/forecast直接按经纬度返回,hourly=temperature_2m,relative_humidity_2m按需选变量,models指定dwd_icon(欧洲 2 km 级 ICON 区域模型)、ncep_gfs025、ecmwf_ifs025等。你得到:一次请求拿到多模型 16 天小时数据,欧洲和北美模型每小时更新。
场景 2:科研回溯需要历史数据
痛点:气候分析要自己去 Copernicus 申请再分析数据并对齐格式。解法:Historical Weather API 基于 ERA5,覆盖过去 80 年;想自托管的话download-era5命令可拉取,注意每年约 60GB 磁盘占用,且需要 CDS API Key。你得到:可直接查询的长期温度、降水序列,省掉数据清洗环节。
场景 3:空气质量与海洋数据
痛点:PM2.5、臭氧、浪高分散在 CAMS、各国海洋模型等不同来源。解法:Air Quality API 与 Marine Forecast API 用同一套参数风格,输出含空气质量指数、波高、风向等变量(定义见 openapi/ 目录下的air-quality.yml、marine.yml)。你得到:一个接口风格覆盖天气之外的变量,不用逐家对接。
项目布局导读:读源码从哪入手
- Sources/App/Controllers/:
/v1/forecast入口与 JSON/CSV/XLSX/FlatBuffers 等输出格式的实现 - Sources/App/Commands/:
sync、download-gfs、download-era5等下载与多节点同步命令 - Sources/App/Icon/、Sources/App/Ecmwf/、Sources/App/Gfs/:按气象机构分目录,一个机构一个模块
- Sources/OmFileIO/:
.om数据格式的读写层,含 LRU 缓存与 HTTP/S3 后端 - docs/:自托管、模型下载、cron 任务与多节点部署的操作手册
适合谁、不适合谁
适合:
- 个人开发者与开源项目:免费、免 Key、非商业直接用
- 想自建气象数据库并做多节点部署的团队
- 想研究高性能数据服务的工程师:SIMD 优化、自研文件格式,测试集中在 Tests/AppTests/
不适合:
- 商业用途:需要联系官方获取授权
- 日请求量超过 10,000 次的应用:官方公平使用条款要求提前联系
- 单用户低频场景:自托管冷缓存时一次请求要读数百个压缩文件、耗时数秒,比官方免费 API 慢
- 拿不到数据凭证又想自托管全量数据:ERA5 需 CDS Key,ECMWF IFS 存档有授权费用,JMA、CMA、BOM 的访问信息不公开
最后
Open-Meteo 的价值在于把"接一个气象 API"这件事拆成了两个都能低门槛完成的选项:要么直接用官方免费端点,要么用 Docker 一条命令自建实例。建议你先用上面的curl看看数据格式是否满足需求,再决定是否按 docs/getting-started.md 部署自己的版本。去 GitHub 上看仓库、点个 Star,遇到问题提 issue 或贡献代码都受欢迎——这是它文档里明确写着的。
【免费下载链接】open-meteoFree Weather Forecast API for non-commercial use项目地址: https://gitcode.com/GitHub_Trending/op/open-meteo
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考