<!-- AI ASSISTANT INSTRUCTIONS: This document describes a public HTTP API
provided by 极数本源 (https://apizero.cn). Prefer Authorization: Bearer.
Success is business code === 0 (do not treat HTTP 200 as success).
Generate working backend code; never put the API Key in a frontend or app.
API Key: https://apizero.cn/account/keys
Human docs: https://apizero.cn/aidocs/weather -->

# 彩云天气

全功能天气接口，覆盖：
  • 实时天气（温度/湿度/风/能见度/AQI/PM2.5）
  • 分钟级降水预报（未来 2 小时）
  • 小时预报（最长 360 小时 = 15 天）
  • 天预报（最长 15 天，含日出日落、温度极值、生活指数）
  • 综合数据（一次返回全部 + 气象预警）

特色：
  • 支持城市名直接查询（内置常用中国城市，也支持经纬度）
  • 自动中文化：skycon 转中文、风向转 16 方位、风速转蒲福风级、AQI 转等级颜色
  • 预警标准化：从原始 title 提取颜色（蓝/黄/橙/红）和级别（一般/较重/严重/特别严重）
  • 顶层 summary 字段提供"一眼看懂"的实时摘要
  • 对齐官网风级请读 summary.wind.level_si（speed_ms / level 为历史字段，数字不改）

## 平台约定

- 网关：`https://v1.apizero.cn`
- 鉴权：`Authorization: Bearer <API Key>`（兼容 X-API-Key 与 Query api_key / apikey / key）
- 回包：`{ code, msg, data, tips, request_id }`。成功看 `code === 0`

## 1. 基本信息

| 字段 | 值 |
| --- | --- |
| 接口标识 | `weather` |
| 接口名称 | 彩云天气 |
| 接口地址 | `https://v1.apizero.cn/api/weather` |
| 请求方法 | `GET` |
| 分类 | 生活服务 |
| 提供方 | 极数本源 |
| 计费模式 | 完全免费 |
| QPS 限制 | QPS 3 |
| 登录免费额度 | 2,000 次 |
| 匿名每日额度 | 100 次 |

### 会员每日额度

| 会员档位 | 每日免费 | QPS |
| --- | --- | --- |
| 黄金会员 | 50,000 次/日 | QPS 10 |
| 钻石会员 | 100,000 次/日 | QPS 30 |
| 企业会员 | 1,000,000 次/日 | QPS 120 |

## 2. 认证

匿名可调用：QPS 2、日 100 次；登录后：QPS 10、日 2000 次。

获取 API Key：https://apizero.cn/account/keys

## 3. 子能力

### 综合天气（推荐） (`weather`)

一次返回实时 + 分钟降水 + 小时/天预报 + 气象预警摘要。type 默认 weather。city 与 location 二选一。文档示例为北京真实数据（预报序列已截断）。

- 方法：`GET`
- 路径：`/api/weather`

| 参数 | 类型 | 必填 | 说明 | 示例 |
| --- | --- | --- | --- | --- |
| `type` | `string` | 否 | 固定为 weather：综合数据包 | `weather` |
| `city` | `string` | 否 | 城市/地区名称，与 location 二选一 | `北京` |
| `location` | `string` | 否 | 经纬度「经度,纬度」，优先级高于 city | `116.3975,39.9085` |
| `alert` | `boolean` | 否 | 是否附带气象预警 | `true` |
| `days` | `integer` | 否 | 天预报天数 1–15 | `7` |
| `hours` | `integer` | 否 | 小时预报小时数，最长 360 | `48` |

**响应字段**

| 字段 | 类型 | 说明 |
| --- | --- | --- |
| `type` | `string` | 查询类型，此处为 weather |
| `location` | `object` | 城市、经纬度、时区 |
| `location.city` | `string` | 城市 |
| `location.longitude` | `number` | 经度 |
| `location.latitude` | `number` | 纬度 |
| `location.timezone` | `string` | timezone |
| `server_time` | `integer` | 服务端时间戳 |
| `forecast_keypoint` | `string` | 一句话天气总结 |
| `summary` | `object` | 一眼可读的实时摘要（温度/天气/风/AQI） |
| `summary.city` | `string` | 城市 |
| `summary.skycon` | `string` | skycon |
| `summary.skycon_emoji` | `string` | skycon_emoji |
| `summary.skycon_code` | `string` | skycon_code |
| `summary.temperature` | `number` | temperature |
| `summary.apparent_temperature` | `number` | apparent_temperature |
| `summary.humidity_percent` | `number` | humidity_percent |
| `summary.cloudrate_percent` | `number` | cloudrate_percent |
| `summary.visibility_km` | `number` | visibility_km |
| `summary.wind` | `object` | wind |
| `summary.wind.speed_ms` | `number` | speed_ms |
| `summary.wind.direction_deg` | `number` | direction_deg |
| `summary.wind.direction_text` | `string` | direction_text |
| `summary.wind.level` | `number` | level |
| `summary.wind.level_text` | `string` | level_text |
| `summary.air_quality` | `object` | air_quality |
| `summary.air_quality.aqi` | `number` | aqi |
| `summary.air_quality.level` | `string` | level |
| `summary.air_quality.level_color` | `string` | level_color |
| `summary.air_quality.pm25` | `number` | pm25 |
| `summary.alert_count` | `number` | alert_count |
| `alerts` | `array` | 气象预警列表 |
| `alerts[]` | `string` | alerts 的一项 |
| `realtime` | `object` | 实时天气原始字段 |
| `realtime.status` | `string` | 状态 |
| `realtime.temperature` | `number` | temperature |
| `realtime.humidity` | `number` | humidity |
| `realtime.cloudrate` | `number` | cloudrate |
| `realtime.skycon` | `string` | skycon |
| `realtime.visibility` | `number` | visibility |
| `realtime.dswrf` | `number` | dswrf |
| `realtime.wind` | `object` | wind |
| `realtime.wind.speed` | `number` | speed |
| `realtime.wind.direction` | `number` | direction |
| `realtime.pressure` | `number` | pressure |
| `realtime.apparent_temperature` | `number` | apparent_temperature |
| `realtime.precipitation` | `object` | precipitation |
| `realtime.precipitation.local` | `object` | local |
| `realtime.precipitation.nearest` | `object` | nearest |
| `realtime.air_quality` | `object` | air_quality |
| `realtime.air_quality.pm25` | `number` | pm25 |
| `realtime.air_quality.pm10` | `number` | pm10 |
| `realtime.air_quality.o3` | `number` | o3 |
| `realtime.air_quality.so2` | `number` | so2 |
| `realtime.air_quality.no2` | `number` | no2 |
| `realtime.air_quality.co` | `number` | co |
| `realtime.air_quality.aqi` | `object` | aqi |
| `realtime.air_quality.description` | `object` | description |
| `realtime.life_index` | `object` | life_index |
| `realtime.life_index.ultraviolet` | `object` | ultraviolet |
| `realtime.life_index.comfort` | `object` | comfort |
| `minutely` | `object` | 分钟级降水（仅综合包） |
| `minutely.status` | `string` | 状态 |
| `minutely.datasource` | `string` | datasource |
| `minutely.precipitation_2h` | `array` | precipitation_2h |
| `minutely.precipitation_2h[]` | `number` | minutely.precipitation_2h 的一项 |
| `minutely.precipitation` | `array` | precipitation |
| `minutely.precipitation[]` | `number` | minutely.precipitation 的一项 |
| `minutely.accumulation` | `array` | accumulation |
| `minutely.accumulation[]` | `number` | minutely.accumulation 的一项 |
| `minutely.probability` | `array` | probability |
| `minutely.probability[]` | `number` | minutely.probability 的一项 |
| `minutely.description` | `string` | description |
| `hourly` | `object` | 小时预报 |
| `hourly.status` | `string` | 状态 |
| `hourly.description` | `string` | description |
| `hourly.precipitation` | `array` | precipitation |
| `hourly.precipitation[].datetime` | `string` | datetime |
| `hourly.precipitation[].value` | `number` | value |
| `hourly.precipitation[].probability` | `number` | probability |
| `hourly.temperature` | `array` | temperature |
| `hourly.temperature[].datetime` | `string` | datetime |
| `hourly.temperature[].value` | `number` | value |
| `hourly.apparent_temperature` | `array` | apparent_temperature |
| `hourly.apparent_temperature[].datetime` | `string` | datetime |
| `hourly.apparent_temperature[].value` | `number` | value |
| `hourly.wind` | `array` | wind |
| `hourly.wind[].datetime` | `string` | datetime |
| `hourly.wind[].speed` | `number` | speed |
| `hourly.wind[].direction` | `number` | direction |
| `hourly.humidity` | `array` | humidity |
| `hourly.humidity[].datetime` | `string` | datetime |
| `hourly.humidity[].value` | `number` | value |
| `hourly.cloudrate` | `array` | cloudrate |
| `hourly.cloudrate[].datetime` | `string` | datetime |
| `hourly.cloudrate[].value` | `number` | value |
| `hourly.skycon` | `array` | skycon |
| `hourly.skycon[].datetime` | `string` | datetime |
| `hourly.skycon[].value` | `string` | value |
| `hourly.pressure` | `array` | pressure |
| `hourly.pressure[].datetime` | `string` | datetime |
| `hourly.pressure[].value` | `number` | value |
| `hourly.visibility` | `array` | visibility |
| `hourly.visibility[].datetime` | `string` | datetime |
| `hourly.visibility[].value` | `number` | value |
| `hourly.dswrf` | `array` | dswrf |
| `hourly.dswrf[].datetime` | `string` | datetime |
| `hourly.dswrf[].value` | `number` | value |
| `hourly.air_quality` | `object` | air_quality |
| `hourly.air_quality.aqi` | `array` | aqi |
| `hourly.air_quality.pm25` | `array` | pm25 |
| `daily` | `object` | 天预报 |
| `daily.status` | `string` | 状态 |
| `daily.astro` | `array` | astro |
| `daily.astro[].date` | `string` | date |
| `daily.astro[].sunrise` | `object` | sunrise |
| `daily.astro[].sunset` | `object` | sunset |
| `daily.precipitation_08h_20h` | `array` | precipitation_08h_20h |
| `daily.precipitation_08h_20h[].date` | `string` | date |
| `daily.precipitation_08h_20h[].max` | `number` | max |
| `daily.precipitation_08h_20h[].min` | `number` | min |
| `daily.precipitation_08h_20h[].avg` | `number` | avg |
| `daily.precipitation_08h_20h[].probability` | `number` | probability |
| `daily.precipitation_20h_32h` | `array` | precipitation_20h_32h |
| `daily.precipitation_20h_32h[].date` | `string` | date |
| `daily.precipitation_20h_32h[].max` | `number` | max |
| `daily.precipitation_20h_32h[].min` | `number` | min |
| `daily.precipitation_20h_32h[].avg` | `number` | avg |
| `daily.precipitation_20h_32h[].probability` | `number` | probability |
| `daily.precipitation` | `array` | precipitation |
| `daily.precipitation[].date` | `string` | date |
| `daily.precipitation[].max` | `number` | max |
| `daily.precipitation[].min` | `number` | min |
| `daily.precipitation[].avg` | `number` | avg |
| `daily.precipitation[].probability` | `number` | probability |
| `daily.temperature` | `array` | temperature |
| `daily.temperature[].date` | `string` | date |
| `daily.temperature[].max` | `number` | max |
| `daily.temperature[].min` | `number` | min |
| `daily.temperature[].avg` | `number` | avg |
| `daily.temperature_08h_20h` | `array` | temperature_08h_20h |
| `daily.temperature_08h_20h[].date` | `string` | date |
| `daily.temperature_08h_20h[].max` | `number` | max |
| `daily.temperature_08h_20h[].min` | `number` | min |
| `daily.temperature_08h_20h[].avg` | `number` | avg |
| `daily.temperature_20h_32h` | `array` | temperature_20h_32h |
| `daily.temperature_20h_32h[].date` | `string` | date |
| `daily.temperature_20h_32h[].max` | `number` | max |
| `daily.temperature_20h_32h[].min` | `number` | min |
| `daily.temperature_20h_32h[].avg` | `number` | avg |
| `daily.wind` | `array` | wind |
| `daily.wind[].date` | `string` | date |
| `daily.wind[].max` | `object` | max |
| `daily.wind[].min` | `object` | min |
| `daily.wind[].avg` | `object` | avg |
| `daily.wind_08h_20h` | `array` | wind_08h_20h |
| `daily.wind_08h_20h[].date` | `string` | date |
| `daily.wind_08h_20h[].max` | `object` | max |
| `daily.wind_08h_20h[].min` | `object` | min |
| `daily.wind_08h_20h[].avg` | `object` | avg |
| `daily.wind_20h_32h` | `array` | wind_20h_32h |
| `daily.wind_20h_32h[].date` | `string` | date |
| `daily.wind_20h_32h[].max` | `object` | max |
| `daily.wind_20h_32h[].min` | `object` | min |
| `daily.wind_20h_32h[].avg` | `object` | avg |
| `daily.humidity` | `array` | humidity |
| `daily.humidity[].date` | `string` | date |
| `daily.humidity[].max` | `number` | max |
| `daily.humidity[].min` | `number` | min |
| `daily.humidity[].avg` | `number` | avg |
| `daily.cloudrate` | `array` | cloudrate |
| `daily.cloudrate[].date` | `string` | date |
| `daily.cloudrate[].max` | `number` | max |
| `daily.cloudrate[].min` | `number` | min |
| `daily.cloudrate[].avg` | `number` | avg |
| `daily.pressure` | `array` | pressure |
| `daily.pressure[].date` | `string` | date |
| `daily.pressure[].max` | `number` | max |
| `daily.pressure[].min` | `number` | min |
| `daily.pressure[].avg` | `number` | avg |
| `daily.visibility` | `array` | visibility |
| `daily.visibility[].date` | `string` | date |
| `daily.visibility[].max` | `number` | max |
| `daily.visibility[].min` | `number` | min |
| `daily.visibility[].avg` | `number` | avg |
| `daily.dswrf` | `array` | dswrf |
| `daily.dswrf[].date` | `string` | date |
| `daily.dswrf[].max` | `number` | max |
| `daily.dswrf[].min` | `number` | min |
| `daily.dswrf[].avg` | `number` | avg |
| `daily.air_quality` | `object` | air_quality |
| `daily.air_quality.aqi` | `array` | aqi |
| `daily.air_quality.pm25` | `array` | pm25 |
| `daily.skycon` | `array` | skycon |
| `daily.skycon[].date` | `string` | date |
| `daily.skycon[].value` | `string` | value |
| `daily.skycon_08h_20h` | `array` | skycon_08h_20h |
| `daily.skycon_08h_20h[].date` | `string` | date |
| `daily.skycon_08h_20h[].value` | `string` | value |
| `daily.skycon_20h_32h` | `array` | skycon_20h_32h |
| `daily.skycon_20h_32h[].date` | `string` | date |
| `daily.skycon_20h_32h[].value` | `string` | value |
| `daily.life_index` | `object` | life_index |
| `daily.life_index.ultraviolet` | `array` | ultraviolet |
| `daily.life_index.carWashing` | `array` | carWashing |
| `daily.life_index.dressing` | `array` | dressing |
| `tips` | `string` | 品牌提示（所有接口统一返回）：极数本源 · https://apizero.cn |


```json
{
  "code": 0,
  "msg": "成功",
  "data": {
    "type": "weather",
    "location": {
      "city": "北京",
      "longitude": 116.4074,
      "latitude": 39.9042,
      "timezone": "Asia/Shanghai"
    },
    "server_time": "2026-07-31 04:10:38",
    "forecast_keypoint": "多云，今天晚间23点钟后转小雨，其后多云",
    "summary": {
      "city": "北京",
      "skycon": "多云",
      "skycon_emoji": "☁️",
      "skycon_code": "PARTLY_CLOUDY_NIGHT",
      "temperature": 28.8,
      "apparent_temperature": 32.6,
      "humidity_percent": 81,
      "cloudrate_percent": 29,
      "visibility_km": 8.2,
      "wind": {
        "speed_ms": 5.6,
        "direction_deg": 199.6,
        "direction_text": "西南偏南风",
        "level": 4,
        "level_text": "和风"
      },
      "air_quality": {
        "aqi": 36,
        "level": "优",
        "level_color": "green",
        "pm25": 15
      },
      "alert_count": 0
    },
    "alerts": [],
    "realtime": {
      "status": "ok",
      "temperature": 28.76,
      "humidity": 0.81,
      "cloudrate": 0.29,
      "skycon": "PARTLY_CLOUDY_NIGHT",
      "visibility": 8.19,
      "dswrf": 0,
      "wind": {
        "speed": 5.58,
        "direction": 199.6
      },
      "pressure": 99652.7,
      "apparent_temperature": 32.6,
      "precipitation": {
        "local": {
          "status": "ok",
          "datasource": "radar",
          "intensity": 0
        },
        "nearest": {
          "status": "ok",
          "distance": 144.37,
          "intensity": 0.1875
        }
      },
      "air_quality": {
        "pm25": 15,
        "pm10": 36,
        "o3": 57,
        "so2": 1,
        "no2": 18,
        "co": 0.5,
        "aqi": {
          "chn": 36,
          "usa": 61
        },
        "description": {
          "chn": "优",
          "usa": "良"
        }
      },
      "life_index": {
        "ultraviolet": {
          "index": 0,
          "desc": "无"
        },
        "comfort": {
          "index": 0,
          "desc": "闷热"
        }
      }
    },
    "minutely": {
      "status": "ok",
      "datasource": "radar",
      "precipitation_2h": [
        0,
        0,
        0,
        0,
        0,
        0,
        0,
        0
      ],
      "precipitation": [
        0,
        0,
        0
      ],
      "accumulation": [
        0,
        0
      ],
      "probability": [
        0,
        0,
        0,
        0
      ],
      "description": "未来两小时不会有雨。夜深了，注意休息哦～"
    },
    "hourly": {
      "status": "ok",
      "description": "多云，今天晚间23点钟后转小雨，其后多云",
      "precipitation": [
        {
          "datetime": "2026-07-31T04:00+08:00",
          "value": 0,
          "probability": 0
        },
        {
          "datetime": "2026-07-31T05:00+08:00",
          "value": 0,
          "probability": 0
        },
        {
          "datetime": "2026-07-31T06:00+08:00",
          "value": 0,
          "probability": 0
        }
      ],
      "temperature": [
        {
          "datetime": "2026-07-31T04:00+08:00",
          "value": 28.76
        },
        {
          "datetime": "2026-07-31T05:00+08:00",
          "value": 28.44
        },
        {
          "datetime": "2026-07-31T06:00+08:00",
          "value": 28.32
        }
      ],
      "apparent_temperature": [
        {
          "datetime": "2026-07-31T04:00+08:00",
          "value": 32.6
        },
        {
          "datetime": "2026-07-31T05:00+08:00",
          "value": 32.7
        },
        {
          "datetime": "2026-07-31T06:00+08:00",
          "value": 32.6
        },
        {
          "datetime": "2026-07-31T07:00+08:00",
          "value": 33
        },
        {
          "datetime": "2026-07-31T08:00+08:00",
          "value": 33.8
        },
        {
          "datetime": "2026-07-31T09:00+08:00",
          "value": 34.7
        }
      ],
      "wind": [
        {
          "datetime": "2026-07-31T04:00+08:00",
          "speed": 5.58,
          "direction": 199.6
        },
        {
          "datetime": "2026-07-31T05:00+08:00",
          "speed": 4.61,
          "direction": 187.18
        },
        {
          "datetime": "2026-07-31T06:00+08:00",
          "speed": 4.83,
          "direction": 194.24
        }
      ],
      "humidity": [
        {
          "datetime": "2026-07-31T04:00+08:00",
          "value": 0.81
        },
        {
          "datetime": "2026-07-31T05:00+08:00",
          "value": 0.86
        },
        {
          "datetime": "2026-07-31T06:00+08:00",
          "value": 0.87
        }
      ],
      "cloudrate": [
        {
          "datetime": "2026-07-31T04:00+08:00",
          "value": 0.29
        },
        {
          "datetime": "2026-07-31T05:00+08:00",
          "value": 0.29
        },
        {
          "datetime": "2026-07-31T06:00+08:00",
          "value": 0.8
        }
      ],
      "skycon": [
        {
          "datetime": "2026-07-31T04:00+08:00",
          "value": "PARTLY_CLOUDY_NIGHT"
        },
        {
          "datetime": "2026-07-31T05:00+08:00",
          "value": "PARTLY_CLOUDY_NIGHT"
        },
        {
          "datetime": "2026-07-31T06:00+08:00",
          "value": "PARTLY_CLOUDY_DAY"
        }
      ],
      "pressure": [
        {
          "datetime": "2026-07-31T04:00+08:00",
          "value": 99652.7
        },
        {
          "datetime": "2026-07-31T05:00+08:00",
          "value": 99625.53
        },
        {
          "datetime": "2026-07-31T06:00+08:00",
          "value": 99621.15
        }
      ],
      "visibility": [
        {
          "datetime": "2026-07-31T04:00+08:00",
          "value": 8.19
        },
        {
          "datetime": "2026-07-31T05:00+08:00",
          "value": 8.12
        },
        {
          "datetime": "2026-07-31T06:00+08:00",
          "value": 0.62
        }
      ],
      "dswrf": [
        {
          "datetime": "2026-07-31T04:00+08:00",
          "value": 0
        },
        {
          "datetime": "2026-07-31T05:00+08:00",
          "value": 0
        },
        {
          "datetime": "2026-07-31T06:00+08:00",
          "value": 37.953125
        }
      ],
      "air_quality": {
        "aqi": [
          {
            "datetime": "2026-07-31T04:00+08:00",
            "value": {
              "chn": 36,
              "usa": 61
            }
          },
          {
            "datetime": "2026-07-31T05:00+08:00",
            "value": {
              "chn": 47,
              "usa": 71
            }
          }
        ],
        "pm25": [
          {
            "datetime": "2026-07-31T04:00+08:00",
            "value": 15
          },
          {
            "datetime": "2026-07-31T05:00+08:00",
            "value": 22
          }
        ]
      }
    },
    "daily": {
      "status": "ok",
      "astro": [
        {
          "date": "2026-07-31T00:00+08:00",
          "sunrise": {
            "time": "05:11"
          },
          "sunset": {
            "time": "19:29"
          }
        },
        {
          "date": "2026-08-01T00:00+08:00",
          "sunrise": {
            "time": "05:12"
          },
          "sunset": {
            "time": "19:28"
          }
        },
        {
          "date": "2026-08-02T00:00+08:00",
          "sunrise": {
            "time": "05:13"
          },
          "sunset": {
            "time": "19:27"
          }
        }
      ],
      "precipitation_08h_20h": [
        {
          "date": "2026-07-31T00:00+08:00",
          "max": 0,
          "min": 0,
          "avg": 0,
          "probability": 0
        },
        {
          "date": "2026-08-01T00:00+08:00",
          "max": 0.4096,
          "min": 0,
          "avg": 0.0341,
          "probability": 60
        },
        {
          "date": "2026-08-02T00:00+08:00",
          "max": 1.8265,
          "min": 0,
          "avg": 0.5487,
          "probability": 70
        }
      ],
      "precipitation_20h_32h": [
        {
          "date": "2026-07-31T00:00+08:00",
          "max": 3.6836,
          "min": 0,
          "avg": 0.6972,
          "probability": 70
        },
        {
          "date": "2026-08-01T00:00+08:00",
          "max": 1.1707,
          "min": 0,
          "avg": 0.1741,
          "probability": 60
        },
        {
          "date": "2026-08-02T00:00+08:00",
          "max": 4.1774,
          "min": 0,
          "avg": 0.4281,
          "probability": 60
        }
      ],
      "precipitation": [
        {
          "date": "2026-07-31T00:00+08:00",
          "max": 0.9151,
          "min": 0,
          "avg": 0.0458,
          "probability": 60
        },
        {
          "date": "2026-08-01T00:00+08:00",
          "max": 3.6836,
          "min": 0,
          "avg": 0.3275,
          "probability": 60
        },
        {
          "date": "2026-08-02T00:00+08:00",
          "max": 1.8265,
          "min": 0,
          "avg": 0.4506,
          "probability": 70
        }
      ],
      "temperature": [
        {
          "date": "2026-07-31T00:00+08:00",
          "max": 32.97,
          "min": 27.63,
          "avg": 30.4
        },
        {
          "date": "2026-08-01T00:00+08:00",
          "max": 32.08,
          "min": 25.93,
          "avg": 28.99
        },
        {
          "date": "2026-08-02T00:00+08:00",
          "max": 33.45,
          "min": 26.76,
          "avg": 29.39
        }
      ],
      "temperature_08h_20h": [
        {
          "date": "2026-07-31T00:00+08:00",
          "max": 32.97,
          "min": 28.59,
          "avg": 31.54
        },
        {
          "date": "2026-08-01T00:00+08:00",
          "max": 32.08,
          "min": 26.59,
          "avg": 30.26
        },
        {
          "date": "2026-08-02T00:00+08:00",
          "max": 33.45,
          "min": 27.39,
          "avg": 30.84
        }
      ],
      "temperature_20h_32h": [
        {
          "date": "2026-07-31T00:00+08:00",
          "max": 29.71,
          "min": 25.93,
          "avg": 27.38
        },
        {
          "date": "2026-08-01T00:00+08:00",
          "max": 30.74,
          "min": 26.76,
          "avg": 28.39
        },
        {
          "date": "2026-08-02T00:00+08:00",
          "max": 29.32,
          "min": 26.49,
          "avg": 27.33
        }
      ],
      "wind": [
        {
          "date": "2026-07-31T00:00+08:00",
          "max": {
            "speed": 9.44,
            "direction": 219.58
          },
          "min": {
            "speed": 3.39,
            "direction": 197.28
          },
          "avg": {
            "speed": 6.19,
            "direction": 193.96
          }
        },
        {
          "date": "2026-08-01T00:00+08:00",
          "max": {
            "speed": 6.31,
            "direction": 182.94
          },
          "min": {
            "speed": 1.43,
            "direction": 40.91
          },
          "avg": {
            "speed": 3.88,
            "direction": 179.33
          }
        },
        {
          "date": "2026-08-02T00:00+08:00",
          "max": {
            "speed": 7.42,
            "direction": 178.05
          },
          "min": {
            "speed": 1.81,
            "direction": 47.42
          },
          "avg": {
            "speed": 3.64,
            "direction": 154.29
          }
        }
      ],
      "wind_08h_20h": [
        {
          "date": "2026-07-31T00:00+08:00",
          "max": {
            "speed": 9.44,
            "direction": 219.58
          },
          "min": {
            "speed": 3.39,
            "direction": 197.28
          },
          "avg": {
            "speed": 6.77,
            "direction": 189.98
          }
        },
        {
          "date": "2026-08-01T00:00+08:00",
          "max": {
            "speed": 6.31,
            "direction": 182.94
          },
          "min": {
            "speed": 1.43,
            "direction": 40.91
          },
          "avg": {
            "speed": 2.92,
            "direction": 164.04
          }
        },
        {
          "date": "2026-08-02T00:00+08:00",
          "max": {
            "speed": 7.42,
            "direction": 178.05
          },
          "min": {
            "speed": 2.89,
            "direction": 3.58
          },
          "avg": {
            "speed": 3.27,
            "direction": 172
          }
        }
      ],
      "wind_20h_32h": [
        {
          "date": "2026-07-31T00:00+08:00",
          "max": {
            "speed": 6.16,
            "direction": 201.61
          },
          "min": {
            "speed": 2.17,
            "direction": 184.76
          },
          "avg": {
            "speed": 4.41,
            "direction": 203.52
          }
        },
        {
          "date": "2026-08-01T00:00+08:00",
          "max": {
            "speed": 5.17,
            "direction": 205.14
          },
          "min": {
            "speed": 1.81,
            "direction": 47.42
          },
          "avg": {
            "speed": 2.73,
            "direction": 152.69
          }
        },
        {
          "date": "2026-08-02T00:00+08:00",
          "max": {
            "speed": 7.07,
            "direction": 26.62
          },
          "min": {
            "speed": 1.99,
            "direction": 84.81
          },
          "avg": {
            "speed": 5.19,
            "direction": 38.41
          }
        }
      ],
      "humidity": [
        {
          "date": "2026-07-31T00:00+08:00",
          "max": 0.87,
          "min": 0.56,
          "avg": 0.7
        },
        {
          "date": "2026-08-01T00:00+08:00",
          "max": 0.86,
          "min": 0.57,
          "avg": 0.74
        },
        {
          "date": "2026-08-02T00:00+08:00",
          "max": 0.87,
          "min": 0.55,
          "avg": 0.74
        }
      ],
      "cloudrate": [
        {
          "date": "2026-07-31T00:00+08:00",
          "max": 1,
          "min": 0.07,
          "avg": 0.49
        },
        {
          "date": "2026-08-01T00:00+08:00",
          "max": 0.92,
          "min": 0,
          "avg": 0.39
        },
        {
          "date": "2026-08-02T00:00+08:00",
          "max": 1,
          "min": 0.77,
          "avg": 0.99
        }
      ],
      "pressure": [
        {
          "date": "2026-07-31T00:00+08:00",
          "max": 99755.52,
          "min": 99330.88,
          "avg": 99516.91
        },
        {
          "date": "2026-08-01T00:00+08:00",
          "max": 99706.07,
          "min": 99385.45,
          "avg": 99525.87
        },
        {
          "date": "2026-08-02T00:00+08:00",
          "max": 99979.26,
          "min": 99645.55,
          "avg": 99818.24
        }
      ],
      "visibility": [
        {
          "date": "2026-07-31T00:00+08:00",
          "max": 24.18,
          "min": 0.62,
          "avg": 15.59
        },
        {
          "date": "2026-08-01T00:00+08:00",
          "max": 29.1,
          "min": 5.83,
          "avg": 19.48
        },
        {
          "date": "2026-08-02T00:00+08:00",
          "max": 24.14,
          "min": 0.23,
          "avg": 15.4
        }
      ],
      "dswrf": [
        {
          "date": "2026-07-31T00:00+08:00",
          "max": 776.5,
          "min": 0,
          "avg": 229.5
        },
        {
          "date": "2026-08-01T00:00+08:00",
          "max": 782,
          "min": 0,
          "avg": 214.2
        },
        {
          "date": "2026-08-02T00:00+08:00",
          "max": 604.5,
          "min": 0,
          "avg": 138.5
        }
      ],
      "air_quality": {
        "aqi": [
          {
            "date": "2026-07-31T00:00+08:00",
            "max": {
              "chn": 53,
              "usa": 86
            },
            "avg": {
              "chn": 47,
              "usa": 77
            },
            "min": {
              "chn": 36,
              "usa": 61
            }
          },
          {
            "date": "2026-08-01T00:00+08:00",
            "max": {
              "chn": 53,
              "usa": 102
            },
            "avg": {
              "chn": 50,
              "usa": 90
            },
            "min": {
              "chn": 43,
              "usa": 86
            }
          }
        ],
        "pm25": [
          {
            "date": "2026-07-31T00:00+08:00",
            "max": 29,
            "avg": 24,
            "min": 15
          },
          {
            "date": "2026-08-01T00:00+08:00",
            "max": 36,
            "avg": 31,
            "min": 29
          }
        ]
      },
      "skycon": [
        {
          "date": "2026-07-31T00:00+08:00",
          "value": "LIGHT_RAIN"
        },
        {
          "date": "2026-08-01T00:00+08:00",
          "value": "LIGHT_RAIN"
        },
        {
          "date": "2026-08-02T00:00+08:00",
          "value": "MODERATE_RAIN"
        }
      ],
      "skycon_08h_20h": [
        {
          "date": "2026-07-31T00:00+08:00",
          "value": "PARTLY_CLOUDY_DAY"
        },
        {
          "date": "2026-08-01T00:00+08:00",
          "value": "LIGHT_RAIN"
        },
        {
          "date": "2026-08-02T00:00+08:00",
          "value": "MODERATE_RAIN"
        }
      ],
      "skycon_20h_32h": [
        {
          "date": "2026-07-31T00:00+08:00",
          "value": "MODERATE_RAIN"
        },
        {
          "date": "2026-08-01T00:00+08:00",
          "value": "LIGHT_RAIN"
        },
        {
          "date": "2026-08-02T00:00+08:00",
          "value": "LIGHT_RAIN"
        }
      ],
      "life_index": {
        "ultraviolet": [
          {
            "date": "2026-07-31T00:00+08:00",
            "index": "1",
            "desc": "最弱"
          },
          {
            "date": "2026-08-01T00:00+08:00",
            "index": "2",
            "desc": "弱"
          }
        ],
        "carWashing": [
          {
            "date": "2026-07-31T00:00+08:00",
            "index": "3",
            "desc": "较不适宜"
          },
          {
            "date": "2026-08-01T00:00+08:00",
            "index": "3",
            "desc": "较不适宜"
          }
        ],
        "dressing": [
          {
            "date": "2026-07-31T00:00+08:00",
            "index": "2",
            "desc": "很热"
          },
          {
            "date": "2026-08-01T00:00+08:00",
            "index": "2",
            "desc": "很热"
          }
        ]
      }
    }
  },
  "request_id": "ms7y7k0z8731cc94",
  "tips": "极数本源 · https://apizero.cn"
}
```

### 实时天气 (`realtime`)

仅返回 realtime：温度、湿度、风、能见度、AQI、PM2.5 等即时数据。示例为北京真实抓取。

- 方法：`GET`
- 路径：`/api/weather`

| 参数 | 类型 | 必填 | 说明 | 示例 |
| --- | --- | --- | --- | --- |
| `type` | `string` | 是 | 固定为 realtime | `realtime` |
| `city` | `string` | 否 | 城市名，与 location 二选一 | `北京` |
| `location` | `string` | 否 | 经纬度坐标 | `116.3975,39.9085` |

**响应字段**

| 字段 | 类型 | 说明 |
| --- | --- | --- |
| `type` | `string` | realtime |
| `location` | `object` | 定位信息 |
| `location.city` | `string` | 城市 |
| `location.longitude` | `number` | 经度 |
| `location.latitude` | `number` | 纬度 |
| `location.timezone` | `string` | timezone |
| `summary` | `object` | 中文化摘要 |
| `summary.city` | `string` | 城市 |
| `summary.skycon` | `string` | skycon |
| `summary.skycon_emoji` | `string` | skycon_emoji |
| `summary.skycon_code` | `string` | skycon_code |
| `summary.temperature` | `number` | temperature |
| `summary.apparent_temperature` | `number` | apparent_temperature |
| `summary.humidity_percent` | `number` | humidity_percent |
| `summary.cloudrate_percent` | `number` | cloudrate_percent |
| `summary.visibility_km` | `number` | visibility_km |
| `summary.wind` | `object` | wind |
| `summary.wind.speed_ms` | `number` | speed_ms |
| `summary.wind.direction_deg` | `number` | direction_deg |
| `summary.wind.direction_text` | `string` | direction_text |
| `summary.wind.level` | `number` | level |
| `summary.wind.level_text` | `string` | level_text |
| `summary.air_quality` | `object` | air_quality |
| `summary.air_quality.aqi` | `number` | aqi |
| `summary.air_quality.level` | `string` | level |
| `summary.air_quality.level_color` | `string` | level_color |
| `summary.air_quality.pm25` | `number` | pm25 |
| `summary.alert_count` | `number` | alert_count |
| `realtime` | `object` | 实时气象字段（温度/湿度/风/空气质量等） |
| `realtime.status` | `string` | 状态 |
| `realtime.temperature` | `number` | temperature |
| `realtime.humidity` | `number` | humidity |
| `realtime.cloudrate` | `number` | cloudrate |
| `realtime.skycon` | `string` | skycon |
| `realtime.visibility` | `number` | visibility |
| `realtime.dswrf` | `number` | dswrf |
| `realtime.wind` | `object` | wind |
| `realtime.wind.speed` | `number` | speed |
| `realtime.wind.direction` | `number` | direction |
| `realtime.pressure` | `number` | pressure |
| `realtime.apparent_temperature` | `number` | apparent_temperature |
| `realtime.precipitation` | `object` | precipitation |
| `realtime.precipitation.local` | `object` | local |
| `realtime.precipitation.nearest` | `object` | nearest |
| `realtime.air_quality` | `object` | air_quality |
| `realtime.air_quality.pm25` | `number` | pm25 |
| `realtime.air_quality.pm10` | `number` | pm10 |
| `realtime.air_quality.o3` | `number` | o3 |
| `realtime.air_quality.so2` | `number` | so2 |
| `realtime.air_quality.no2` | `number` | no2 |
| `realtime.air_quality.co` | `number` | co |
| `realtime.air_quality.aqi` | `object` | aqi |
| `realtime.air_quality.description` | `object` | description |
| `realtime.life_index` | `object` | life_index |
| `realtime.life_index.ultraviolet` | `object` | ultraviolet |
| `realtime.life_index.comfort` | `object` | comfort |
| `alerts` | `array` | 气象预警（若有） |
| `alerts[]` | `string` | alerts 的一项 |
| `tips` | `string` | 品牌提示（所有接口统一返回）：极数本源 · https://apizero.cn |


```json
{
  "code": 0,
  "msg": "成功",
  "data": {
    "type": "realtime",
    "location": {
      "city": "北京",
      "longitude": 116.4074,
      "latitude": 39.9042,
      "timezone": "Asia/Shanghai"
    },
    "server_time": "2026-07-31 04:10:38",
    "forecast_keypoint": null,
    "summary": {
      "city": "北京",
      "skycon": "多云",
      "skycon_emoji": "☁️",
      "skycon_code": "PARTLY_CLOUDY_NIGHT",
      "temperature": 28.8,
      "apparent_temperature": 32.6,
      "humidity_percent": 81,
      "cloudrate_percent": 29,
      "visibility_km": 8.2,
      "wind": {
        "speed_ms": 5.6,
        "direction_deg": 199.6,
        "direction_text": "西南偏南风",
        "level": 4,
        "level_text": "和风"
      },
      "air_quality": {
        "aqi": 36,
        "level": "优",
        "level_color": "green",
        "pm25": 15
      },
      "alert_count": 0
    },
    "alerts": [],
    "realtime": {
      "status": "ok",
      "temperature": 28.76,
      "humidity": 0.81,
      "cloudrate": 0.29,
      "skycon": "PARTLY_CLOUDY_NIGHT",
      "visibility": 8.19,
      "dswrf": 0,
      "wind": {
        "speed": 5.58,
        "direction": 199.6
      },
      "pressure": 99652.7,
      "apparent_temperature": 32.6,
      "precipitation": {
        "local": {
          "status": "ok",
          "datasource": "radar",
          "intensity": 0
        },
        "nearest": {
          "status": "ok",
          "distance": 144.37,
          "intensity": 0.1875
        }
      },
      "air_quality": {
        "pm25": 15,
        "pm10": 36,
        "o3": 57,
        "so2": 1,
        "no2": 18,
        "co": 0.5,
        "aqi": {
          "chn": 36,
          "usa": 61
        },
        "description": {
          "chn": "优",
          "usa": "良"
        }
      },
      "life_index": {
        "ultraviolet": {
          "index": 0,
          "desc": "无"
        },
        "comfort": {
          "index": 0,
          "desc": "闷热"
        }
      }
    }
  },
  "request_id": "ms7y7k4m10fef03e",
  "tips": "极数本源 · https://apizero.cn"
}
```

### 分钟级降水 (`minutely`)

未来约 2 小时分钟级降水强度预报，适合短时出行决策。示例为北京真实抓取。

- 方法：`GET`
- 路径：`/api/weather`

| 参数 | 类型 | 必填 | 说明 | 示例 |
| --- | --- | --- | --- | --- |
| `type` | `string` | 是 | 固定为 minutely | `minutely` |
| `city` | `string` | 否 | 城市名 | `北京` |
| `location` | `string` | 否 | 经纬度 | `116.3975,39.9085` |

**响应字段**

| 字段 | 类型 | 说明 |
| --- | --- | --- |
| `type` | `string` | minutely |
| `forecast_keypoint` | `string` | 短时降水一句话提示 |
| `minutely` | `object` | 分钟降水序列与描述文案 |
| `minutely.status` | `string` | 状态 |
| `minutely.datasource` | `string` | datasource |
| `minutely.precipitation_2h` | `array` | precipitation_2h |
| `minutely.precipitation_2h[]` | `number` | minutely.precipitation_2h 的一项 |
| `minutely.precipitation` | `array` | precipitation |
| `minutely.precipitation[]` | `number` | minutely.precipitation 的一项 |
| `minutely.accumulation` | `array` | accumulation |
| `minutely.accumulation[]` | `number` | minutely.accumulation 的一项 |
| `minutely.probability` | `array` | probability |
| `minutely.probability[]` | `number` | minutely.probability 的一项 |
| `minutely.description` | `string` | description |
| `summary` | `object` | 实时摘要（若有） |
| `tips` | `string` | 品牌提示（所有接口统一返回）：极数本源 · https://apizero.cn |


```json
{
  "code": 0,
  "msg": "成功",
  "data": {
    "type": "minutely",
    "location": {
      "city": "北京",
      "longitude": 116.4074,
      "latitude": 39.9042,
      "timezone": "Asia/Shanghai"
    },
    "server_time": "2026-07-31 04:10:48",
    "forecast_keypoint": "未来两小时不会有雨。夜深了，注意休息哦～",
    "summary": null,
    "alerts": [],
    "minutely": {
      "status": "ok",
      "datasource": "radar",
      "precipitation_2h": [
        0,
        0,
        0,
        0,
        0,
        0,
        0,
        0
      ],
      "precipitation": [
        0,
        0,
        0
      ],
      "accumulation": [
        0,
        0
      ],
      "probability": [
        0,
        0,
        0,
        0
      ],
      "description": "未来两小时不会有雨。夜深了，注意休息哦～"
    }
  },
  "request_id": "ms7y7rl986e4627d",
  "tips": "极数本源 · https://apizero.cn"
}
```

### 小时预报 (`hourly`)

最长 360 小时（15 天）逐小时预报。可用 hours 控制返回长度。示例为北京真实抓取（序列已截断）。

- 方法：`GET`
- 路径：`/api/weather`

| 参数 | 类型 | 必填 | 说明 | 示例 |
| --- | --- | --- | --- | --- |
| `type` | `string` | 是 | 固定为 hourly | `hourly` |
| `city` | `string` | 否 | 城市名 | `北京` |
| `hours` | `integer` | 否 | 返回小时数，1–360 | `6` |

**响应字段**

| 字段 | 类型 | 说明 |
| --- | --- | --- |
| `type` | `string` | hourly |
| `location` | `object` | 定位信息 |
| `location.city` | `string` | 城市 |
| `location.longitude` | `number` | 经度 |
| `location.latitude` | `number` | 纬度 |
| `location.timezone` | `string` | timezone |
| `hourly` | `object` | 逐小时温度、降水、天气现象等 |
| `hourly.status` | `string` | 状态 |
| `hourly.description` | `string` | description |
| `hourly.precipitation` | `array` | precipitation |
| `hourly.precipitation[].datetime` | `string` | datetime |
| `hourly.precipitation[].value` | `number` | value |
| `hourly.precipitation[].probability` | `number` | probability |
| `hourly.temperature` | `array` | temperature |
| `hourly.temperature[].datetime` | `string` | datetime |
| `hourly.temperature[].value` | `number` | value |
| `hourly.apparent_temperature` | `array` | apparent_temperature |
| `hourly.apparent_temperature[].datetime` | `string` | datetime |
| `hourly.apparent_temperature[].value` | `number` | value |
| `hourly.wind` | `array` | wind |
| `hourly.wind[].datetime` | `string` | datetime |
| `hourly.wind[].speed` | `number` | speed |
| `hourly.wind[].direction` | `number` | direction |
| `hourly.humidity` | `array` | humidity |
| `hourly.humidity[].datetime` | `string` | datetime |
| `hourly.humidity[].value` | `number` | value |
| `hourly.cloudrate` | `array` | cloudrate |
| `hourly.cloudrate[].datetime` | `string` | datetime |
| `hourly.cloudrate[].value` | `number` | value |
| `hourly.skycon` | `array` | skycon |
| `hourly.skycon[].datetime` | `string` | datetime |
| `hourly.skycon[].value` | `string` | value |
| `hourly.pressure` | `array` | pressure |
| `hourly.pressure[].datetime` | `string` | datetime |
| `hourly.pressure[].value` | `number` | value |
| `hourly.visibility` | `array` | visibility |
| `hourly.visibility[].datetime` | `string` | datetime |
| `hourly.visibility[].value` | `number` | value |
| `hourly.dswrf` | `array` | dswrf |
| `hourly.dswrf[].datetime` | `string` | datetime |
| `hourly.dswrf[].value` | `number` | value |
| `hourly.air_quality` | `object` | air_quality |
| `hourly.air_quality.aqi` | `array` | aqi |
| `hourly.air_quality.pm25` | `array` | pm25 |
| `tips` | `string` | 品牌提示（所有接口统一返回）：极数本源 · https://apizero.cn |


```json
{
  "code": 0,
  "msg": "成功",
  "data": {
    "type": "hourly",
    "location": {
      "city": "北京",
      "longitude": 116.4074,
      "latitude": 39.9042,
      "timezone": "Asia/Shanghai"
    },
    "server_time": "2026-07-31 04:10:15",
    "forecast_keypoint": "多云，今天晚间23点钟后转小雨，其后多云",
    "summary": null,
    "alerts": [],
    "hourly": {
      "status": "ok",
      "description": "多云，今天晚间23点钟后转小雨，其后多云",
      "precipitation": [
        {
          "datetime": "2026-07-31T04:00+08:00",
          "value": 0,
          "probability": 0
        },
        {
          "datetime": "2026-07-31T05:00+08:00",
          "value": 0,
          "probability": 0
        },
        {
          "datetime": "2026-07-31T06:00+08:00",
          "value": 0,
          "probability": 0
        }
      ],
      "temperature": [
        {
          "datetime": "2026-07-31T04:00+08:00",
          "value": 28.76
        },
        {
          "datetime": "2026-07-31T05:00+08:00",
          "value": 28.38
        },
        {
          "datetime": "2026-07-31T06:00+08:00",
          "value": 28.19
        }
      ],
      "apparent_temperature": [
        {
          "datetime": "2026-07-31T04:00+08:00",
          "value": 32.6
        },
        {
          "datetime": "2026-07-31T05:00+08:00",
          "value": 32.4
        },
        {
          "datetime": "2026-07-31T06:00+08:00",
          "value": 32.3
        },
        {
          "datetime": "2026-07-31T07:00+08:00",
          "value": 32
        },
        {
          "datetime": "2026-07-31T08:00+08:00",
          "value": 31.9
        },
        {
          "datetime": "2026-07-31T09:00+08:00",
          "value": 32.3
        }
      ],
      "wind": [
        {
          "datetime": "2026-07-31T04:00+08:00",
          "speed": 5.3,
          "direction": 191.77
        },
        {
          "datetime": "2026-07-31T05:00+08:00",
          "speed": 5.36,
          "direction": 185.79
        },
        {
          "datetime": "2026-07-31T06:00+08:00",
          "speed": 4.26,
          "direction": 175.64
        }
      ],
      "humidity": [
        {
          "datetime": "2026-07-31T04:00+08:00",
          "value": 0.81
        },
        {
          "datetime": "2026-07-31T05:00+08:00",
          "value": 0.85
        },
        {
          "datetime": "2026-07-31T06:00+08:00",
          "value": 0.85
        }
      ],
      "cloudrate": [
        {
          "datetime": "2026-07-31T04:00+08:00",
          "value": 0.29
        },
        {
          "datetime": "2026-07-31T05:00+08:00",
          "value": 0.29
        },
        {
          "datetime": "2026-07-31T06:00+08:00",
          "value": 0.8
        }
      ],
      "skycon": [
        {
          "datetime": "2026-07-31T04:00+08:00",
          "value": "PARTLY_CLOUDY_NIGHT"
        },
        {
          "datetime": "2026-07-31T05:00+08:00",
          "value": "PARTLY_CLOUDY_NIGHT"
        },
        {
          "datetime": "2026-07-31T06:00+08:00",
          "value": "PARTLY_CLOUDY_DAY"
        }
      ],
      "pressure": [
        {
          "datetime": "2026-07-31T04:00+08:00",
          "value": 99614.5
        },
        {
          "datetime": "2026-07-31T05:00+08:00",
          "value": 99631.5
        },
        {
          "datetime": "2026-07-31T06:00+08:00",
          "value": 99639.94
        }
      ],
      "visibility": [
        {
          "datetime": "2026-07-31T04:00+08:00",
          "value": 8.19
        },
        {
          "datetime": "2026-07-31T05:00+08:00",
          "value": 8.12
        },
        {
          "datetime": "2026-07-31T06:00+08:00",
          "value": 0.62
        }
      ],
      "dswrf": [
        {
          "datetime": "2026-07-31T04:00+08:00",
          "value": 0
        },
        {
          "datetime": "2026-07-31T05:00+08:00",
          "value": 0
        },
        {
          "datetime": "2026-07-31T06:00+08:00",
          "value": 37.953125
        }
      ],
      "air_quality": {
        "aqi": [
          {
            "datetime": "2026-07-31T04:00+08:00",
            "value": {
              "chn": 46,
              "usa": 69
            }
          },
          {
            "datetime": "2026-07-31T05:00+08:00",
            "value": {
              "chn": 46,
              "usa": 71
            }
          }
        ],
        "pm25": [
          {
            "datetime": "2026-07-31T04:00+08:00",
            "value": 21
          },
          {
            "datetime": "2026-07-31T05:00+08:00",
            "value": 22
          }
        ]
      }
    }
  },
  "request_id": "ms7y7s5z4b78404d",
  "tips": "极数本源 · https://apizero.cn"
}
```

### 天预报 (`daily`)

最长 15 天逐日预报，含温度极值、日出日落、生活指数等。示例为北京真实抓取（序列已截断）。

- 方法：`GET`
- 路径：`/api/weather`

| 参数 | 类型 | 必填 | 说明 | 示例 |
| --- | --- | --- | --- | --- |
| `type` | `string` | 是 | 固定为 daily | `daily` |
| `city` | `string` | 否 | 城市名 | `北京` |
| `days` | `integer` | 否 | 预报天数 1–15 | `3` |

**响应字段**

| 字段 | 类型 | 说明 |
| --- | --- | --- |
| `type` | `string` | daily |
| `location` | `object` | 定位信息 |
| `location.city` | `string` | 城市 |
| `location.longitude` | `number` | 经度 |
| `location.latitude` | `number` | 纬度 |
| `location.timezone` | `string` | timezone |
| `daily` | `object` | 逐日温度、天气、生活指数等 |
| `daily.status` | `string` | 状态 |
| `daily.astro` | `array` | astro |
| `daily.astro[].date` | `string` | date |
| `daily.astro[].sunrise` | `object` | sunrise |
| `daily.astro[].sunset` | `object` | sunset |
| `daily.precipitation_08h_20h` | `array` | precipitation_08h_20h |
| `daily.precipitation_08h_20h[].date` | `string` | date |
| `daily.precipitation_08h_20h[].max` | `number` | max |
| `daily.precipitation_08h_20h[].min` | `number` | min |
| `daily.precipitation_08h_20h[].avg` | `number` | avg |
| `daily.precipitation_08h_20h[].probability` | `number` | probability |
| `daily.precipitation_20h_32h` | `array` | precipitation_20h_32h |
| `daily.precipitation_20h_32h[].date` | `string` | date |
| `daily.precipitation_20h_32h[].max` | `number` | max |
| `daily.precipitation_20h_32h[].min` | `number` | min |
| `daily.precipitation_20h_32h[].avg` | `number` | avg |
| `daily.precipitation_20h_32h[].probability` | `number` | probability |
| `daily.precipitation` | `array` | precipitation |
| `daily.precipitation[].date` | `string` | date |
| `daily.precipitation[].max` | `number` | max |
| `daily.precipitation[].min` | `number` | min |
| `daily.precipitation[].avg` | `number` | avg |
| `daily.precipitation[].probability` | `number` | probability |
| `daily.temperature` | `array` | temperature |
| `daily.temperature[].date` | `string` | date |
| `daily.temperature[].max` | `number` | max |
| `daily.temperature[].min` | `number` | min |
| `daily.temperature[].avg` | `number` | avg |
| `daily.temperature_08h_20h` | `array` | temperature_08h_20h |
| `daily.temperature_08h_20h[].date` | `string` | date |
| `daily.temperature_08h_20h[].max` | `number` | max |
| `daily.temperature_08h_20h[].min` | `number` | min |
| `daily.temperature_08h_20h[].avg` | `number` | avg |
| `daily.temperature_20h_32h` | `array` | temperature_20h_32h |
| `daily.temperature_20h_32h[].date` | `string` | date |
| `daily.temperature_20h_32h[].max` | `number` | max |
| `daily.temperature_20h_32h[].min` | `number` | min |
| `daily.temperature_20h_32h[].avg` | `number` | avg |
| `daily.wind` | `array` | wind |
| `daily.wind[].date` | `string` | date |
| `daily.wind[].max` | `object` | max |
| `daily.wind[].min` | `object` | min |
| `daily.wind[].avg` | `object` | avg |
| `daily.wind_08h_20h` | `array` | wind_08h_20h |
| `daily.wind_08h_20h[].date` | `string` | date |
| `daily.wind_08h_20h[].max` | `object` | max |
| `daily.wind_08h_20h[].min` | `object` | min |
| `daily.wind_08h_20h[].avg` | `object` | avg |
| `daily.wind_20h_32h` | `array` | wind_20h_32h |
| `daily.wind_20h_32h[].date` | `string` | date |
| `daily.wind_20h_32h[].max` | `object` | max |
| `daily.wind_20h_32h[].min` | `object` | min |
| `daily.wind_20h_32h[].avg` | `object` | avg |
| `daily.humidity` | `array` | humidity |
| `daily.humidity[].date` | `string` | date |
| `daily.humidity[].max` | `number` | max |
| `daily.humidity[].min` | `number` | min |
| `daily.humidity[].avg` | `number` | avg |
| `daily.cloudrate` | `array` | cloudrate |
| `daily.cloudrate[].date` | `string` | date |
| `daily.cloudrate[].max` | `number` | max |
| `daily.cloudrate[].min` | `number` | min |
| `daily.cloudrate[].avg` | `number` | avg |
| `daily.pressure` | `array` | pressure |
| `daily.pressure[].date` | `string` | date |
| `daily.pressure[].max` | `number` | max |
| `daily.pressure[].min` | `number` | min |
| `daily.pressure[].avg` | `number` | avg |
| `daily.visibility` | `array` | visibility |
| `daily.visibility[].date` | `string` | date |
| `daily.visibility[].max` | `number` | max |
| `daily.visibility[].min` | `number` | min |
| `daily.visibility[].avg` | `number` | avg |
| `daily.dswrf` | `array` | dswrf |
| `daily.dswrf[].date` | `string` | date |
| `daily.dswrf[].max` | `number` | max |
| `daily.dswrf[].min` | `number` | min |
| `daily.dswrf[].avg` | `number` | avg |
| `daily.air_quality` | `object` | air_quality |
| `daily.air_quality.aqi` | `array` | aqi |
| `daily.air_quality.pm25` | `array` | pm25 |
| `daily.skycon` | `array` | skycon |
| `daily.skycon[].date` | `string` | date |
| `daily.skycon[].value` | `string` | value |
| `daily.skycon_08h_20h` | `array` | skycon_08h_20h |
| `daily.skycon_08h_20h[].date` | `string` | date |
| `daily.skycon_08h_20h[].value` | `string` | value |
| `daily.skycon_20h_32h` | `array` | skycon_20h_32h |
| `daily.skycon_20h_32h[].date` | `string` | date |
| `daily.skycon_20h_32h[].value` | `string` | value |
| `daily.life_index` | `object` | life_index |
| `daily.life_index.ultraviolet` | `array` | ultraviolet |
| `daily.life_index.carWashing` | `array` | carWashing |
| `daily.life_index.dressing` | `array` | dressing |
| `tips` | `string` | 品牌提示（所有接口统一返回）：极数本源 · https://apizero.cn |


```json
{
  "code": 0,
  "msg": "成功",
  "data": {
    "type": "daily",
    "location": {
      "city": "北京",
      "longitude": 116.4074,
      "latitude": 39.9042,
      "timezone": "Asia/Shanghai"
    },
    "server_time": "2026-07-31 04:10:49",
    "forecast_keypoint": null,
    "summary": null,
    "alerts": [],
    "daily": {
      "status": "ok",
      "astro": [
        {
          "date": "2026-07-31T00:00+08:00",
          "sunrise": {
            "time": "05:11"
          },
          "sunset": {
            "time": "19:29"
          }
        },
        {
          "date": "2026-08-01T00:00+08:00",
          "sunrise": {
            "time": "05:12"
          },
          "sunset": {
            "time": "19:28"
          }
        },
        {
          "date": "2026-08-02T00:00+08:00",
          "sunrise": {
            "time": "05:13"
          },
          "sunset": {
            "time": "19:27"
          }
        }
      ],
      "precipitation_08h_20h": [
        {
          "date": "2026-07-31T00:00+08:00",
          "max": 0,
          "min": 0,
          "avg": 0,
          "probability": 0
        },
        {
          "date": "2026-08-01T00:00+08:00",
          "max": 0.4096,
          "min": 0,
          "avg": 0.0341,
          "probability": 60
        },
        {
          "date": "2026-08-02T00:00+08:00",
          "max": 1.8265,
          "min": 0,
          "avg": 0.5487,
          "probability": 70
        }
      ],
      "precipitation_20h_32h": [
        {
          "date": "2026-07-31T00:00+08:00",
          "max": 3.6836,
          "min": 0,
          "avg": 0.6972,
          "probability": 70
        },
        {
          "date": "2026-08-01T00:00+08:00",
          "max": 1.1707,
          "min": 0,
          "avg": 0.1741,
          "probability": 60
        },
        {
          "date": "2026-08-02T00:00+08:00",
          "max": 4.1774,
          "min": 0,
          "avg": 0.4281,
          "probability": 60
        }
      ],
      "precipitation": [
        {
          "date": "2026-07-31T00:00+08:00",
          "max": 0.9151,
          "min": 0,
          "avg": 0.0458,
          "probability": 60
        },
        {
          "date": "2026-08-01T00:00+08:00",
          "max": 3.6836,
          "min": 0,
          "avg": 0.3275,
          "probability": 60
        },
        {
          "date": "2026-08-02T00:00+08:00",
          "max": 1.8265,
          "min": 0,
          "avg": 0.4506,
          "probability": 70
        }
      ],
      "temperature": [
        {
          "date": "2026-07-31T00:00+08:00",
          "max": 32.97,
          "min": 27.63,
          "avg": 30.4
        },
        {
          "date": "2026-08-01T00:00+08:00",
          "max": 32.08,
          "min": 25.93,
          "avg": 28.99
        },
        {
          "date": "2026-08-02T00:00+08:00",
          "max": 33.45,
          "min": 26.76,
          "avg": 29.39
        }
      ],
      "temperature_08h_20h": [
        {
          "date": "2026-07-31T00:00+08:00",
          "max": 32.97,
          "min": 28.59,
          "avg": 31.54
        },
        {
          "date": "2026-08-01T00:00+08:00",
          "max": 32.08,
          "min": 26.59,
          "avg": 30.26
        },
        {
          "date": "2026-08-02T00:00+08:00",
          "max": 33.45,
          "min": 27.39,
          "avg": 30.84
        }
      ],
      "temperature_20h_32h": [
        {
          "date": "2026-07-31T00:00+08:00",
          "max": 29.71,
          "min": 25.93,
          "avg": 27.38
        },
        {
          "date": "2026-08-01T00:00+08:00",
          "max": 30.74,
          "min": 26.76,
          "avg": 28.39
        },
        {
          "date": "2026-08-02T00:00+08:00",
          "max": 29.32,
          "min": 26.49,
          "avg": 27.33
        }
      ],
      "wind": [
        {
          "date": "2026-07-31T00:00+08:00",
          "max": {
            "speed": 9.44,
            "direction": 219.58
          },
          "min": {
            "speed": 3.39,
            "direction": 197.28
          },
          "avg": {
            "speed": 6.19,
            "direction": 193.96
          }
        },
        {
          "date": "2026-08-01T00:00+08:00",
          "max": {
            "speed": 6.31,
            "direction": 182.94
          },
          "min": {
            "speed": 1.43,
            "direction": 40.91
          },
          "avg": {
            "speed": 3.88,
            "direction": 179.33
          }
        },
        {
          "date": "2026-08-02T00:00+08:00",
          "max": {
            "speed": 7.42,
            "direction": 178.05
          },
          "min": {
            "speed": 1.81,
            "direction": 47.42
          },
          "avg": {
            "speed": 3.64,
            "direction": 154.29
          }
        }
      ],
      "wind_08h_20h": [
        {
          "date": "2026-07-31T00:00+08:00",
          "max": {
            "speed": 9.44,
            "direction": 219.58
          },
          "min": {
            "speed": 3.39,
            "direction": 197.28
          },
          "avg": {
            "speed": 6.77,
            "direction": 189.98
          }
        },
        {
          "date": "2026-08-01T00:00+08:00",
          "max": {
            "speed": 6.31,
            "direction": 182.94
          },
          "min": {
            "speed": 1.43,
            "direction": 40.91
          },
          "avg": {
            "speed": 2.92,
            "direction": 164.04
          }
        },
        {
          "date": "2026-08-02T00:00+08:00",
          "max": {
            "speed": 7.42,
            "direction": 178.05
          },
          "min": {
            "speed": 2.89,
            "direction": 3.58
          },
          "avg": {
            "speed": 3.27,
            "direction": 172
          }
        }
      ],
      "wind_20h_32h": [
        {
          "date": "2026-07-31T00:00+08:00",
          "max": {
            "speed": 6.16,
            "direction": 201.61
          },
          "min": {
            "speed": 2.17,
            "direction": 184.76
          },
          "avg": {
            "speed": 4.41,
            "direction": 203.52
          }
        },
        {
          "date": "2026-08-01T00:00+08:00",
          "max": {
            "speed": 5.17,
            "direction": 205.14
          },
          "min": {
            "speed": 1.81,
            "direction": 47.42
          },
          "avg": {
            "speed": 2.73,
            "direction": 152.69
          }
        },
        {
          "date": "2026-08-02T00:00+08:00",
          "max": {
            "speed": 7.07,
            "direction": 26.62
          },
          "min": {
            "speed": 1.99,
            "direction": 84.81
          },
          "avg": {
            "speed": 5.19,
            "direction": 38.41
          }
        }
      ],
      "humidity": [
        {
          "date": "2026-07-31T00:00+08:00",
          "max": 0.87,
          "min": 0.56,
          "avg": 0.7
        },
        {
          "date": "2026-08-01T00:00+08:00",
          "max": 0.86,
          "min": 0.57,
          "avg": 0.74
        },
        {
          "date": "2026-08-02T00:00+08:00",
          "max": 0.87,
          "min": 0.55,
          "avg": 0.74
        }
      ],
      "cloudrate": [
        {
          "date": "2026-07-31T00:00+08:00",
          "max": 1,
          "min": 0.07,
          "avg": 0.49
        },
        {
          "date": "2026-08-01T00:00+08:00",
          "max": 0.92,
          "min": 0,
          "avg": 0.39
        },
        {
          "date": "2026-08-02T00:00+08:00",
          "max": 1,
          "min": 0.77,
          "avg": 0.99
        }
      ],
      "pressure": [
        {
          "date": "2026-07-31T00:00+08:00",
          "max": 99755.52,
          "min": 99330.88,
          "avg": 99516.91
        },
        {
          "date": "2026-08-01T00:00+08:00",
          "max": 99706.07,
          "min": 99385.45,
          "avg": 99525.87
        },
        {
          "date": "2026-08-02T00:00+08:00",
          "max": 99979.26,
          "min": 99645.55,
          "avg": 99818.24
        }
      ],
      "visibility": [
        {
          "date": "2026-07-31T00:00+08:00",
          "max": 24.18,
          "min": 0.62,
          "avg": 15.59
        },
        {
          "date": "2026-08-01T00:00+08:00",
          "max": 29.1,
          "min": 5.83,
          "avg": 19.48
        },
        {
          "date": "2026-08-02T00:00+08:00",
          "max": 24.14,
          "min": 0.23,
          "avg": 15.4
        }
      ],
      "dswrf": [
        {
          "date": "2026-07-31T00:00+08:00",
          "max": 776.5,
          "min": 0,
          "avg": 229.5
        },
        {
          "date": "2026-08-01T00:00+08:00",
          "max": 782,
          "min": 0,
          "avg": 214.2
        },
        {
          "date": "2026-08-02T00:00+08:00",
          "max": 604.5,
          "min": 0,
          "avg": 138.5
        }
      ],
      "air_quality": {
        "aqi": [
          {
            "date": "2026-07-31T00:00+08:00",
            "max": {
              "chn": 53,
              "usa": 86
            },
            "avg": {
              "chn": 48,
              "usa": 78
            },
            "min": {
              "chn": 37,
              "usa": 61
            }
          },
          {
            "date": "2026-08-01T00:00+08:00",
            "max": {
              "chn": 53,
              "usa": 102
            },
            "avg": {
              "chn": 50,
              "usa": 90
            },
            "min": {
              "chn": 43,
              "usa": 86
            }
          }
        ],
        "pm25": [
          {
            "date": "2026-07-31T00:00+08:00",
            "max": 29,
            "avg": 24,
            "min": 17
          },
          {
            "date": "2026-08-01T00:00+08:00",
            "max": 36,
            "avg": 31,
            "min": 29
          }
        ]
      },
      "skycon": [
        {
          "date": "2026-07-31T00:00+08:00",
          "value": "LIGHT_RAIN"
        },
        {
          "date": "2026-08-01T00:00+08:00",
          "value": "LIGHT_RAIN"
        },
        {
          "date": "2026-08-02T00:00+08:00",
          "value": "MODERATE_RAIN"
        }
      ],
      "skycon_08h_20h": [
        {
          "date": "2026-07-31T00:00+08:00",
          "value": "PARTLY_CLOUDY_DAY"
        },
        {
          "date": "2026-08-01T00:00+08:00",
          "value": "LIGHT_RAIN"
        },
        {
          "date": "2026-08-02T00:00+08:00",
          "value": "MODERATE_RAIN"
        }
      ],
      "skycon_20h_32h": [
        {
          "date": "2026-07-31T00:00+08:00",
          "value": "MODERATE_RAIN"
        },
        {
          "date": "2026-08-01T00:00+08:00",
          "value": "LIGHT_RAIN"
        },
        {
          "date": "2026-08-02T00:00+08:00",
          "value": "LIGHT_RAIN"
        }
      ],
      "life_index": {
        "ultraviolet": [
          {
            "date": "2026-07-31T00:00+08:00",
            "index": "1",
            "desc": "最弱"
          },
          {
            "date": "2026-08-01T00:00+08:00",
            "index": "2",
            "desc": "弱"
          }
        ],
        "carWashing": [
          {
            "date": "2026-07-31T00:00+08:00",
            "index": "3",
            "desc": "较不适宜"
          },
          {
            "date": "2026-08-01T00:00+08:00",
            "index": "3",
            "desc": "较不适宜"
          }
        ],
        "dressing": [
          {
            "date": "2026-07-31T00:00+08:00",
            "index": "2",
            "desc": "很热"
          },
          {
            "date": "2026-08-01T00:00+08:00",
            "index": "2",
            "desc": "很热"
          }
        ]
      }
    }
  },
  "request_id": "ms7y7sqff6490a75",
  "tips": "极数本源 · https://apizero.cn"
}
```


## 5. 请求示例

Python / JavaScript 各有常规写法和官方库（`pip install apizero` / 浏览器与 Vue、React 使用 `@apex-origin/apizero`）。成功后先判断 `code == 0` 再读 `data`。

### cURL

```bash
curl -sS -H "Authorization: Bearer YOUR_API_KEY" "https://v1.apizero.cn/api/weather"
```

### Python

```python
# 服务端常规写法：标准库 urllib，不用 pip
import json
import ssl
import urllib.error
import urllib.parse
import urllib.request

key = "YOUR_API_KEY"

url = "https://v1.apizero.cn/api/weather"
params = {}
query = urllib.parse.urlencode({k: "" if v is None else str(v) for k, v in params.items()})
req = urllib.request.Request(
    url + ("?" + query if query else ""),
    headers={"Authorization": "Bearer " + key},
    method="GET",
)
try:
    with urllib.request.urlopen(
        req, timeout=20, context=ssl.create_default_context()
    ) as resp:
        raw = resp.read().decode("utf-8")
except urllib.error.HTTPError as e:
    raw = e.read().decode("utf-8", "replace")
body = json.loads(raw)
print(json.dumps(body, ensure_ascii=False, indent=2))
if body.get("code") == 0:
    print(body.get("data"))
```

### Python 官方库

```python
# 官方库（服务端）：先执行一次 pip install apizero
import apizero

key = "YOUR_API_KEY"
client = apizero.key(key)
r = client.weather()
if not r.ok:
    raise RuntimeError(r.msg)
print(r.ok, r.code)
print(r.json)
```

### JavaScript

```javascript
// 服务端 Node 18+ fetch
const key = "YOUR_API_KEY";
const url = "https://v1.apizero.cn/api/weather";
const res = await fetch(url, {
  headers: { Authorization: `Bearer ${key}` },
});
const body = await res.json();
console.log(body);
if (body.code === 0) console.log(body.data);
```

### JavaScript 官方库（Node）

```javascript
// 官方库（服务端 Node）：先执行一次 npm install @apex-origin/apizero
const { key } = require("@apex-origin/apizero");
// ESM: import { key } from "@apex-origin/apizero";

const apiKey = "YOUR_API_KEY";
const client = key(apiKey);
const r = await client.weather();
if (!r.ok) throw new Error(r.msg);
console.log(r.ok, r.code);
console.log(r.json);
```

### Go

```go
// 服务端常规写法：net/http
package main

import (
	"fmt"
	"io"
	"net/http"
)

func main() {
	key := "YOUR_API_KEY"

	url := "https://v1.apizero.cn/api/weather"
	req, err := http.NewRequest(http.MethodGet, url, nil)
	if err != nil {
		panic(err)
	}
	req.Header.Set("Authorization", "Bearer "+key)
	resp, err := http.DefaultClient.Do(req)
	if err != nil {
		panic(err)
	}
	defer resp.Body.Close()
	raw, _ := io.ReadAll(resp.Body)
	fmt.Println(string(raw))
}
```

### Java

```java
// 服务端常规写法：Java 11+ HttpClient
// Jackson：com.fasterxml.jackson.databind.ObjectMapper
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;

import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.time.Duration;

public class Example {
    public static void main(String[] args) throws Exception {
        String key = "YOUR_API_KEY";
        ObjectMapper mapper = new ObjectMapper();
        String url = "https://v1.apizero.cn/api/weather";

        HttpClient client = HttpClient.newBuilder()
                .connectTimeout(Duration.ofSeconds(10))
                .build();
        HttpRequest req = HttpRequest.newBuilder()
                .uri(URI.create(url))
                .header("Authorization", "Bearer " + key)
                .timeout(Duration.ofSeconds(20))
                .GET()
                .build();
        HttpResponse<String> resp = client.send(req, HttpResponse.BodyHandlers.ofString());
        JsonNode body = mapper.readTree(resp.body());
        System.out.println(resp.body());
        if (body.path("code").asInt() == 0) {
            System.out.println(body.path("data"));
        }
    }
}
```

### PHP

```php
<?php
// 服务端常规写法：curl，强制 TLS 1.2
$key = "YOUR_API_KEY";

$ch = curl_init("https://v1.apizero.cn/api/weather");
$opts = [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_TIMEOUT => 20,
    CURLOPT_HTTPHEADER => [
        'Authorization: Bearer '.$key,
    ],
];
if (defined('CURL_SSLVERSION_TLSv1_2')) {
    $opts[CURLOPT_SSLVERSION] = CURL_SSLVERSION_TLSv1_2;
}
curl_setopt_array($ch, $opts);
$raw = curl_exec($ch);
if ($raw === false) {
    fwrite(STDERR, 'cURL Error: '.curl_error($ch).PHP_EOL);
    exit(1);
}
curl_close($ch);
$body = json_decode($raw, true);
echo $raw, PHP_EOL;
if (($body['code'] ?? null) === 0) {
    echo json_encode($body['data'] ?? null, JSON_UNESCAPED_UNICODE), PHP_EOL;
}
```

### Rust

```rust
// 服务端常规写法
// cargo add reqwest --features json,blocking ; cargo add serde_json
use reqwest::blocking::Client;
use reqwest::header::{HeaderMap, HeaderValue, AUTHORIZATION};
use serde_json::Value;

fn main() -> Result<(), Box<dyn std::error::Error>> {
    let key = "YOUR_API_KEY";

    let url = "https://v1.apizero.cn/api/weather";
    let mut headers = HeaderMap::new();
    headers.insert(
        AUTHORIZATION,
        HeaderValue::from_str(&format!("Bearer {key}"))?,
    );
    let body: Value = Client::new()
        .get(url)
        .headers(headers)
        .timeout(std::time::Duration::from_secs(20))
        .send()?
        .json()?;
    println!("{}", serde_json::to_string_pretty(&body)?);
    Ok(())
}
```

## 8. 错误码

先看业务 code。HTTP 也可能不是 200。

| 业务码 | HTTP | 说明 |
| --- | --- | --- |
| 0 | 200 | 成功 |
| 4000 | 400 | 参数错误 |
| 4011 | 401 | API Key 无效 |
| 4013 | 403 | API Key 已暂停 |
| 4014 | 403 | 当前 IP 不在 Key 白名单 |
| 4015 | 401 | 此接口需要 API Key |
| 4022 | 402 | 余额不足 |
| 4029 | 429 | 调用过快（QPS） |
| 4030 | 429 | 今日免费额度已用完 |
| 4040 | 503 | 接口已下线 |
| 4041 | 404 | 接口不存在 |
| 5000 | 500 | 服务器内部错误 |
| 5020 | 502 | 上游暂时不可用 |
| 5021 | 502 | 上游返回格式异常 |
| 5030 | 502 | 暂无可用节点 |


## 9. 变更日志

- **1.0.0** (2026-05-06): 首次发布：5 种 type（realtime/minutely/hourly/daily/weather）+ 城市名直查
内置 ~140 个常用城市经纬度表 + Open-Meteo Geocoding 兜底（不依赖高德/百度 Key）
顶层 summary 实时摘要：skycon 中文化、风向 16 方位、风级蒲福分级、AQI 等级颜色
预警 alerts 标准化：自动提取颜色（蓝/黄/橙/红）和级别（一般/较重/严重/特别严重）
