墨迹天气 API 最小可运行示例:实况、预报与生活指数一次搞定

📅 2026/7/28 8:06:47 👁️ 阅读次数 📝 编程学习
墨迹天气 API 最小可运行示例:实况、预报与生活指数一次搞定

适用场景与接口定位

墨迹天气 API 面向需要实时或历史天气数据的应用场景,例如智能家居面板、户外活动提醒、农业辅助决策(非专业级)、个人天气助手等。它一次调用即可返回实况、未来 7 天逐日预报、24 小时逐时趋势、AQI、9 项生活指数、气象预警及农历信息,极大减少客户端对接口的并发请求次数。

接口能力边界

能力项说明
城市覆盖全国 3 万+ 城市及区县
查询模式城市名模糊(city)、城市 ID 直查(id)、城市搜索(op=search)、历史天气(op=history)
实况数据温度、体感温度、天气现象、湿度、气压、紫外线、风向风力等
预报数据未来 7 天逐日预报(含 AQI)、24 小时逐时预报
生活指数穿衣、限行、防晒、运动等 9 项指数
历史天气支持单日或整月查询(范围:当前月到过去几个月,建议 40 天内)
QPS 限制5 请求/秒
缓存策略实况 5 分钟;当月历史 30 分钟;历史月 24 小时
数据说明由墨迹天气提供,仅供参考,不可用于农业、保险、航运、防灾等专业决策

请求参数与鉴权

接口地址:https://v1.apizero.cn/api/moji-weather
请求方法:GET

Query 参数详解

参数必填类型说明示例
city否(与 id 二选一)string城市中文名,支持模糊匹配(匹配第一个结果)大化
id否(与 city 二选一)number城市 internal_id,通过 op=search 获取,直查更快1205
opstring查询模式:空=实况,search=搜索城市,history=历史天气history
keywordstring当 op=search 时必填,支持中文、拼音、拼音首字母大化
limitnumber当 op=search 时生效,返回条数 1-50,默认 205
daystring当 op=history 时必填(单日查询),格式 YYYY-MM-DD 或 MM-DD(配合 month)2026-05-12
monthstring当 op=history 时可选(整月查询),格式 YYYYMM202604

Header 鉴权

需要在 HTTP Header 中携带 API Key:
X-API-Key: <your_api_key>

💡 若未提供 API Key,服务端可能会返回 401 或限制访问。实际使用时请在 apizero.cn 准备获取。

最小可运行示例:Curl 命令

以下三个示例覆盖最主要的使用场景,你可以直接复制到终端运行(替换$APIZERO_API_KEY为你的真实 Key)。

1. 按城市名查实况

curl -sS -X GET \ -H "X-API-Key: $APIZERO_API_KEY" \ "https://v1.apizero.cn/api/moji-weather?city=杭州"

返回当前杭州的实况天气、AQI、逐时预报、未来 7 天、生活指数等所有数据。

2. 先搜索城市 ID,再直查(更高效)

# 第一步:搜索“大化”拿到 id curl -sS -X GET \ -H "X-API-Key: $APIZERO_API_KEY" \ "https://v1.apizero.cn/api/moji-weather?op=search&keyword=大化&limit=3" # 第二步:用 id=1205 直查(跳过模糊匹配,响应更快) curl -sS -X GET \ -H "X-API-Key: $APIZERO_API_KEY" \ "https://v1.apizero.cn/api/moji-weather?id=1205"

3. 查询历史天气(单日)

curl -sS -X GET \ -H "X-API-Key: $APIZERO_API_KEY" \ "https://v1.apizero.cn/api/moji-weather?op=history&city=北京&day=2026-05-12"

注意:历史数据范围受缓存策略影响。当月数据可查询到昨天,历史月份可查询完整月。建议查询 40 天以内的日期,更早月份可能无数据。

响应结构与字段解读

成功响应为 JSON 格式,外层code为 0 表示成功,data包含所有天气信息。以下拆解核心字段:

{ "code": 0, "msg": "成功", "data": { "_cached": false, "city": { "id": 1205, "name": "大化瑶族自治县", "parent": "广西壮族自治区", "pinyin": "dahuayaozuzizhixian", "timezone": 8 }, "condition": { "condition": "多云", "temperature": 32, "real_feel": 36, "humidity": 62, "pressure": 999, "wind_dir": "南风", "wind_level": 3, "sun_rise": 1778706000000, "sun_set": 1778757660000, "lunar_date": "丙午年三月廿八", "tips": "防暑||中午外出请注意防暑降温。", "uvi": "中等" }, "aqi": { "value": 29, "description": "优", "level": 1, "updatetime": 1778756400000 }, "forecast_day": [ { "predict_date": 1778601630000, "condition_day": "多云", "condition_night": "多云", "temp_day": 32, "temp_night": 21, "wind_dir_day": "南风", "wind_level_day": 3, "aqi_value": 29, "aqi_desc": "优" } ], "forecast_hour": [ { "predict_hour": 1778752800000, "temperature": 32, "condition": "多云", "humidity": 62, "wind_dir": "南风", "wind_level": "3", "aqi_value": 29 } ], "index": [ { "name": "限行", "status": "不限行" }, { "name": "穿衣", "status": "炎热" }, { "name": "紫外线", "status": "中等" } // ... 共 9 项 ], "summary": "大化瑶族自治县,多云,32℃,南风3级,空气优。" } }

字段要点说明

  • condition中的temperature为当前温度(℃),real_feel为体感温度。
  • 时间戳均为 Unix 毫秒(UTC+8),如sun_rise: 1778706000000对应 2026‑05‑12 06:00:00 CST。
  • forecast_day数组长度固定为 7(未来 7 天),forecast_hour为 24 个条目。
  • aqiupdatetime是 AQI 的更新时间戳,不为实时数据。
  • index数组具体项目与数量可能随城市和季节变化,建议代码中做动态渲染。
  • 当查询op=history时,返回结构略有不同,data下会多出history字段,包含datecondition等历史数据。实际响应结构以官方文档为准。

常见错误与排查

错误表现可能原因排查方案
HTTP 401Header 中未传或传错X-API-Key检查 Key 是否正确,是否已过期
HTTP 400必填参数缺失或格式错误(如day不是有效日期)对照 Query 参数表检查必填项和格式
code ≠ 0 且 msg 含“城市不可识别”城市名不在数据库中(或拼音不完全匹配)先用op=search找到准确的城市名和 id
历史查询返回空数据日期太早超出记录范围,或查询未来日期仅查询过去 40 天内的有效日期
QPS 超限每秒请求超过 5 次添加本地限流或重试策略,减少并发
返回_cached: true走服务端缓存,数据可能滞后根据业务容忍度决定是否强制刷新(当前不支持主动清除缓存)

工程化注意事项

  1. 优先使用 city_id 直查:城市搜索返回的id是稳定的数值标识,用id参数查询可避开模糊匹配的耗时,并减少重复计算。建议在本地建立城市ID映射表。
  2. 合理使用缓存:实况数据缓存 5 分钟,历史月数据缓存 24 小时。如果业务需要更实时,可缩短轮询间隔,但不宜低于 5 分钟。
  3. 异常重试策略:对于网络波动或临时限流,建议指数退避重试(如 1s、2s、4s),最多 3 次。避免重试时冲爆 QPS。
  4. 数据准确性说明:接口数据仅供一般参考,不应直接用于专业决策。如果需要用于农业灌溉、保险理赔、航运调度等场景,请务必与官方气象局数据交叉验证。
  5. timezone 字段city.timezone为 UTC 偏移小时数(中国为 8),若用户终端与北京时间不同,需做时区转换。
  6. 农历和 tips 处理condition.tips为字符串,用||分隔标题与内容,建议解析为结构化显示。
  7. JSON 解析时注意字段类型wind_level在 forecast_hour 中是字符串"3",在其他位置可能是数字3,需统一处理。

参考文档

  • 官方文档:https://apizero.cn/aidocs/moji-weather
  • 原始 Markdown:https://apizero.cn/aidocs/moji-weather/raw.md
  • 接口调试地址:https://v1.apizero.cn/api/moji-weather(需携带 API Key)