欢迎光临
我们一直在努力

腾讯天气接口最小可运行示例:POST 请求与字段逐项核对

适用场景

需要在服务端或脚本中获取中文地区天气数据时,最常见的诉求是:给定「省 + 市(可选区县)」,一次性拿到实时天气、空气质量、未来预报、生活指数与限行信息。腾讯天气接口以中文地名作为入参,省去了经纬度换算与地理编码的中间步骤,适合天气看板、出行提醒、值班日报等场景的快速接入。

本文围绕「最小可运行示例」展开:先用一条 curl 确认链路通,再用 Python 封装成函数,最后逐项核对返回字段。接口地址与方法以事实卡为准:

项目值
接口名称 腾讯天气
请求方法 POST
请求地址 https://v1.apizero.cn/api/tencent-weather
分类 生活服务
QPS 3 req/s
鉴权 Authorization: Bearer <API_KEY>

接口能力边界

先明确这个接口能做什么、不能做什么,可以避免接入后反复改设计。

  • 入参是中文名:province、city 为必填,county 可选,用于提升定位精度与限行准确度。
  • 返回覆盖多个数据块:observe(实时)、air(空气质量)、daily_forecast(未来多天预报)、hourly_forecast(逐时预报)、life_index(生活指数)、sunrise_sunset(日出日落)、limit(机动车限行)、alarm(预警)。
  • 数据来源为腾讯天气,字段含义与取值范围以官方文档为准,本文不承诺具体的数据刷新频率或覆盖范围。
  • 该接口按 QPS 限流,调用方需要自行做节流与重试控制。

参数与鉴权

Query 参数

参数必填类型说明示例
province 是 string 省 / 直辖市(中文名) 广东
city 是 string 市(中文名) 深圳
county 否 string 区 / 县(中文名),可提升定位精度与限行准确度 南山

请求体

请求体是一个 JSON 对象,字段与 Query 参数一致,province 与 city 必填,county 可选。注意请求方法为 POST,且 Content-Type 需要设置为 application/json。

鉴权

请求头使用 Bearer Token 形式携带密钥,密钥通过环境变量注入,避免硬编码进仓库:

export APIZERO_API_KEY="你的密钥"

最小可运行示例

curl 版本

以下示例可直接复制执行,其中地名按实际需要替换:

curl -sS \\
-X POST \\
-H "Authorization: Bearer $APIZERO_API_KEY" \\
-H "Content-Type: application/json" \\
-d '{"province": "广东", "city": "深圳", "county": "南山"}' \\
"https://v1.apizero.cn/api/tencent-weather"

判断是否成功,先看 HTTP 状态码,再看响应体中的 code 是否为 0,两者都满足再解析 data。

Python 版本

把请求封装为函数,便于后续在业务代码中复用:

import json
import os
import urllib.request

API_URL = "https://v1.apizero.cn/api/tencent-weather"

def query_tencent_weather(province: str, city: str, county: str | None = None) -> dict:
payload = {"province": province, "city": city}
if county:
payload["county"] = county

req = urllib.request.Request(
API_URL,
data=json.dumps(payload).encode("utf-8"),
headers={
"Authorization": f"Bearer {os.environ['APIZERO_API_KEY']}",
"Content-Type": "application/json",
},
method="POST",
)
with urllib.request.urlopen(req, timeout=10) as resp:
return json.loads(resp.read().decode("utf-8"))

if __name__ == "__main__":
result = query_tencent_weather("广东", "深圳", "南山")
print(result.get("code"), result.get("msg"))
print(result["data"]["observe"]["temperature"])

这段代码只依赖标准库,方便在没有第三方包的机器上验证连通性;正式项目中可换成任意 HTTP 客户端,请求结构与字段不变。

返回值解读

响应顶层包含 code、msg、request_id、tips,业务数据都在 data 下。以文档示例为例,逐块说明:

{
"code": 0,
"msg": "成功",
"request_id": "abc123",
"data": {
"observe": {"temperature": 30, "weather": "多云", "humidity": 77},
"air": {"aqi": 13, "pm25": 4, "pm10": 12, "quality": "优"},
"daily_forecast": [{"date": "2026-07-01", "temperature": {"max": 33, "min": 26}}],
"hourly_forecast": [{"time": "07-01 10:00", "temperature": 30, "weather": "多云"}],
"life_index": [{"key": "clothes", "name": "穿衣", "level": "炎热"}],
"limit": {"date": "2026-07-01", "tail_number": "3和8"},
"sunrise_sunset": [{"date": "2026-07-01", "sunrise": "05:43", "sunset": "19:12"}],
"alarm": [],
"location": {"province": "广东", "city": "深圳", "county": "南山"}
}
}

各数据块的用途如下:

  • observe:实时观测,包含温度、天气、湿度、风向风力与更新时间,适合做「当前状态」展示。
  • air:空气质量,aqi 为数值,quality 为中文等级,pm25、pm10 为颗粒物浓度。
  • daily_forecast / hourly_forecast:分别对应按天与按小时的预报数组,数组长度与字段以文档为准。
  • life_index:生活指数数组,通过 key 区分类型,如穿衣(clothes),level 为等级描述。
  • limit:机动车限行信息,包含日期与限行尾号;提供 county 时准确度更高。
  • sunrise_sunset:日出日落时间,按日期给出。
  • alarm:天气预警数组,无预警时为空数组,解析时应按空数组处理而非当作缺失。
  • location:回显本次查询的省市区,可用于确认中文名匹配是否正确。

常见错误与排查

现象可能原因排查方式
HTTP 401 请求头缺少 Bearer Token 或密钥无效 检查 Authorization 头与环境变量是否生效
HTTP 404 / 405 方法或路径写错 确认使用 POST 与完整地址
code 非 0 参数缺失或地名无法匹配 核对 province、city 是否为中文名,先不带 county 重试
返回 429 或限流提示 超过 QPS 限制 调用侧加并发控制与退避重试
限行信息为空 未传 county 或该地区无限行数据 补传区县后重试,并以文档说明为准

地名匹配是排查重点:中文名需与官方数据源一致,遇到同名市或直辖市区县时,补充 county 能减少歧义。

工程化注意事项

  • 节流:接口 QPS 为 3 req/s,多实例部署时建议在网关或队列层统一限流,而不是每个进程各自计数。
  • 超时与重试:设置连接与读取超时;仅对超时、5xx 做有限次退避重试,4xx 参数错误不要重试。
  • 鉴权管理:密钥放环境变量或配置中心,日志中避免打印完整请求头。
  • 缓存:天气数据变化不频繁,可按业务容忍度做短时缓存,降低调用频率,同时避免长时间缓存导致展示过期。
  • 解析健壮性:数组字段(预警、预报、生活指数)可能为空,解析前判空;data 下各块按需读取,不要假设字段恒定存在。
  • 可观测性:记录 request_id,便于问题定位时与接口侧对齐。
  • 参考文档

    • 文档页:https://apizero.cn/aidocs/tencent-weather
    • 原始文档:https://apizero.cn/aidocs/tencent-weather/raw.md
    赞(0)
    未经允许不得转载:171主机测评 » 腾讯天气接口最小可运行示例:POST 请求与字段逐项核对
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址