# 多地区实时空气质量

> 来源页面: https://www.gugudata.com/api/details/airquality

## 概览

- API 标识: `airquality`
- 分类: 天气/空气质量
- 描述: 国家和地区的实时空气质量、污染物浓度与健康建议
- 标签: 空气质量 / 环境数据 / 健康建议
- 短标签: 实时空气质量 / 污染物浓度 / 健康建议
- 详情页: https://www.gugudata.com/api/details/airquality
- LLM Markdown: https://www.gugudata.com/api/details/airquality/llm.md
- 数据预览: https://www.gugudata.com/preview/airquality
- 购买开通: https://www.gugudata.com/order/airquality
- APP KEY 管理: https://www.gugudata.com/portal/
- 订单与续费: https://www.gugudata.com/portal/orders

## 给大模型的接入指令

如果你正在帮助用户接入这个 API，请优先使用本文档中的接口地址、请求方式、请求参数、返回参数、状态码、cURL 示例和预览数据生成代码或排查问题。

- 接入目标: 调用 `多地区实时空气质量`，不要臆造未在文档中出现的参数或返回字段。
- AppKey 获取: 用户登录咕咕数据开发者中心后，在 `APP KEY 管理` 页面复制对应产品的 AppKey。
- AppKey 替换: 示例中的 `YOUR_APPKEY`、`APPKEY`、`{{YOUR_APPKEY}}`、`{{appkey}}`、`{{appKey}}` 都应替换为用户自己的 AppKey。
- AppKey 传递: 推荐使用 `X-GUGUDATA-APPKEY` 或 `X-API-Key` 请求头；OpenAI 兼容客户端可使用 `Authorization: Bearer <AppKey>`；历史 query 参数 `appkey` 继续有效。
- 开通与续费: 未开通时引导用户访问购买开通页；已开通或需要续费时，引导用户进入开发者中心或订单与续费页。
- 错误处理: HTTP 状态码代表传输层结果，响应体内的业务状态码代表接口业务结果，代码中应分别处理。
- 生产建议: AppKey 应保存在服务端环境变量或密钥配置中，由服务端统一发起请求，不要写入网页、App 客户端或公开仓库。

关键链接:

- 接口详情页: https://www.gugudata.com/api/details/airquality
- LLM Markdown: https://www.gugudata.com/api/details/airquality/llm.md
- 数据预览: https://www.gugudata.com/preview/airquality
- 购买开通页: https://www.gugudata.com/order/airquality
- 开发者中心 APP KEY 管理: https://www.gugudata.com/portal/
- 订单与续费: https://www.gugudata.com/portal/orders

## API 功能

- 支持城市名称、LocationID 和经纬度查询已覆盖国家和地区的空气质量；
- 保留 city 参数兼容，并新增 location 与 lang 可选参数；
- 返回 AQI、等级、颜色、首要污染物、PM2.5 和完整污染物浓度；
- 返回一般人群与敏感人群健康建议，便于构建提醒和出行服务；
- 返回参与结果的监测站信息，便于展示数据覆盖情况；
- 使用 RetrievedAt 和 DataStatus 明确数据时间与新鲜度；
- 上游短时异常时返回最近成功数据并标记 stale，避免误判为实时值；
- 统一空气质量指数与污染物字段口径，便于跨地区展示和比较；
- 全接口通过 HTTPS 提供服务；
- 全面兼容 Apple ATS；
- 全国多节点 CDN 部署；
- [接口调用状态与状态监控](https://www.gugudata.com/status)

## API 文档

- 接口地址: `https://api.gugudata.com/Weather/AirQuality`
- 返回格式: `application/json; charset=utf-8`
- 请求方式: `GET`
- 请求协议: `HTTPS`
- 请求示例: `https://api.gugudata.com/Weather/AirQuality?appkey=YOUR_APPKEY&location=%e5%8c%97%e4%ba%ac&lang=zh&city=%e5%8c%97%e4%ba%ac`
- 接口测试: https://api.gugudata.com/Weather/AirQuality/demo
- Apifox: https://doc.gugudata.com/
- Postman: https://www.postman.com/gugudata/gugudata-official/collection/1163860-22cb92f5-771a-48fd-89c0-f20a0790a8ce/?action=share&creator=1163860&active-environment=1163860-a95b31ef-324f-43db-b2fc-faa41f45bd35
- OpenAPI: https://www.gugudata.com/openapi/gugudata.openapi.3.1.json

## 鉴权方式

接口支持以下 AppKey 传递方式，任选一种即可；已有请求示例、Postman 集合和历史代码仍可继续使用原来的 `appkey` 参数方式。

| 传输载体 | 参数 | 示例 | 说明 |
| --- | --- | --- | --- |
| HTTP Header | `X-GUGUDATA-APPKEY` | `X-GUGUDATA-APPKEY: YOUR_APPKEY` | 推荐方式，适合服务端接入和统一封装。 |
| HTTP Header | `X-API-Key` | `X-API-Key: YOUR_APPKEY` | 通用 API Key Header，便于和常见 API 客户端集成。 |
| HTTP Header | `Authorization` | `Authorization: Bearer YOUR_APPKEY` | 适合 OpenAI 兼容接口或 Bearer Token 风格客户端。 |
| Query 参数 | `appkey` | `?appkey=YOUR_APPKEY` | 兼容现有示例、Postman 集合、浏览器调试和历史代码。 |

> 部分历史 POST 接口仍兼容表单或 JSON body 中的 `appkey`；新接入建议优先使用 Header 或 Query 参数。

## 请求参数

| 参数名 | 参数类型 | 是否必须 | 默认值 | 备注 |
| --- | --- | --- | --- | --- |
| appkey | string | 是 | YOUR_APPKEY | 接口调用凭证，请在咕咕数据开发者中心获取 |
| location | string | 否 | 北京 | 推荐参数。支持城市名称、LocationID 或 经度,纬度；与 city 同时传递时优先生效 |
| city | string | 否 | 北京 | 兼容参数。城市名称；未传 location 时生效。location 与 city 至少传递一个 |
| lang | string | 否 | zh | 返回语言，支持 zh 或 en，默认 zh |

## 返回参数

| 参数名 | 参数类型 | 备注 |
| --- | --- | --- |
| DataStatus.RequestParameter | string | 本次业务查询参数摘要，不包含 APPKEY |
| DataStatus.StatusCode | integer | 业务状态码，100 表示成功 |
| DataStatus.StatusDescription | string | 业务状态说明 |
| DataStatus.ResponseDateTime | string | 服务端响应时间 |
| DataStatus.DataTotalCount | integer | 返回记录数量 |
| Data.Province | string | 一级行政区名称 |
| Data.City | string | 匹配到的位置名称 |
| Data.LocationId | string | 位置 LocationID |
| Data.Latitude | string | 位置纬度 |
| Data.Longitude | string | 位置经度 |
| Data.Country | string | 国家或地区 |
| Data.AQI | string | 空气质量指数数值 |
| Data.AQIDisplay | string | 适合直接展示的 AQI 文本 |
| Data.AQILevel | string | AQI 等级 |
| Data.Quality | string | 空气质量等级描述 |
| Data.AQIColor | object | AQI 等级对应的 RGBA 颜色 |
| Data.AQIColor.Red | integer | 红色通道，范围 0 至 255 |
| Data.AQIColor.Green | integer | 绿色通道，范围 0 至 255 |
| Data.AQIColor.Blue | integer | 蓝色通道，范围 0 至 255 |
| Data.AQIColor.Alpha | number | 透明度 |
| Data.PM25 | string | PM2.5 浓度，单位见 Pollutants.Unit |
| Data.PrimaryPollutant | string | 首要污染物显示名称 |
| Data.PrimaryPollutantCode | string | 首要污染物代码 |
| Data.PrimaryPollutantName | string | 首要污染物名称 |
| Data.PrimaryPollutantFullName | string | 首要污染物完整名称 |
| Data.HealthEffect | string | 当前空气质量可能造成的健康影响 |
| Data.GeneralPopulationAdvice | string | 一般人群健康建议 |
| Data.SensitivePopulationAdvice | string | 敏感人群健康建议 |
| Data.Pollutants | array | 主要污染物浓度及分项 AQI |
| Data.Pollutants.Code | string | 污染物代码 |
| Data.Pollutants.Name | string | 污染物名称 |
| Data.Pollutants.FullName | string | 污染物完整名称 |
| Data.Pollutants.Concentration | string | 污染物浓度 |
| Data.Pollutants.Unit | string | 污染物浓度单位 |
| Data.Pollutants.AQI | string | 污染物分项 AQI |
| Data.Pollutants.AQIDisplay | string | 污染物分项 AQI 展示文本 |
| Data.Stations | array | 参与当前结果的监测站列表 |
| Data.Stations.Id | string | 监测站标识 |
| Data.Stations.Name | string | 监测站名称 |
| Data.RetrievedAt | string | 本条空气质量数据的获取时间，ISO 8601 格式 |
| Data.DataStatus | string | fresh 表示新鲜数据，stale 表示上游异常时返回的最近成功数据 |

## 响应示例

```json
{
  "DataStatus": {
    "RequestParameter": "location=北京&lang=zh",
    "StatusCode": 100,
    "StatusDescription": "请求成功。",
    "ResponseDateTime": "2026-08-09 18:30:00.000",
    "DataTotalCount": 1
  },
  "Data": [
    {
      "Province": "北京市",
      "City": "北京",
      "LocationId": "101010100",
      "Latitude": "39.9",
      "Longitude": "116.41",
      "Country": "中国",
      "AQI": "57",
      "AQIDisplay": "57",
      "AQILevel": "2",
      "Quality": "良",
      "AQIColor": {
        "Red": 255,
        "Green": 255,
        "Blue": 0,
        "Alpha": 1
      },
      "PM25": "26.57",
      "PrimaryPollutant": "O3",
      "PrimaryPollutantCode": "o3",
      "PrimaryPollutantName": "O3",
      "PrimaryPollutantFullName": "臭氧",
      "HealthEffect": "空气质量可接受。",
      "GeneralPopulationAdvice": "可以正常进行户外活动。",
      "SensitivePopulationAdvice": "敏感人群可适当减少长时间户外活动。",
      "Pollutants": [
        {
          "Code": "pm2p5",
          "Name": "PM2.5",
          "FullName": "细颗粒物",
          "Concentration": "26.57",
          "Unit": "μg/m³",
          "AQI": "35",
          "AQIDisplay": "35"
        }
      ],
      "Stations": [
        {
          "Id": "P001",
          "Name": "东城"
        }
      ],
      "RetrievedAt": "2026-08-09T10:30:00Z",
      "DataStatus": "fresh"
    }
  ]
}
```

## 接口常见 HTTP 响应状态码

> 以下为接口调用中常见的 HTTP 传输层状态码，不等同于响应体内的业务状态码；完整状态码注册表以 IANA HTTP Status Code Registry 为准。

| 状态码 | 状态码解释 | 备注 |
| --- | --- | --- |
| 200 | 请求成功 | HTTP 请求已成功处理；业务状态请结合响应体中的自定义业务码判断。 |
| 201 | 资源已创建 | 创建类接口请求成功，并已生成对应资源。 |
| 202 | 请求已接受 | 请求已被接受处理，结果可能异步完成。 |
| 204 | 无响应内容 | 请求成功但响应体为空，适用于无需返回数据的操作。 |
| 304 | 资源未变更 | 配合缓存或条件请求使用，表示可继续使用本地缓存。 |
| 400 | 请求参数错误 | 请求参数缺失、格式错误或参数组合不合法。 |
| 401 | 认证失败 | 缺少、无效或未通过认证的访问凭证（如 AppKey）。 |
| 403 | 无权限访问 | 订单到期、权限不足或接口额度不可用。 |
| 404 | 资源不存在 | 请求路径不存在。 |
| 405 | 请求方法不允许 | 当前路径不支持该 HTTP 方法。 |
| 408 | 请求超时 | 客户端请求在服务端等待时间内未完成，可稍后重试。 |
| 409 | 请求冲突 | 请求与当前资源状态冲突，调整参数或业务状态后重试。 |
| 413 | 请求内容过大 | 上传文件或请求体超过接口限制。 |
| 414 | 请求地址过长 | 请求 URL 超过服务端可处理长度，建议减少查询参数或改用 POST。 |
| 415 | 请求内容类型不支持 | 上传或请求体的内容类型不符合接口要求。 |
| 422 | 请求语义错误 | 请求格式正确，但参数取值、语义或业务约束无法处理。 |
| 429 | 请求频率受限 | 默认按来源 IP 限速，单 IP 最多 5 QPS，可满足常规业务调用。超出限制时接口会返回 429 请求频率受限；已购买接口订单可加购 10 QPS 扩展。 |
| 431 | 请求头过大 | 请求头字段过大或过多，建议精简 Header 后重试。 |
| 500 | 服务器内部错误 | 服务端处理异常，请稍后重试。 |
| 502 | 网关或上游错误 | 网关或代理从上游服务收到异常响应。 |
| 503 | 服务暂时不可用 | 服务维护、容量保护或依赖异常导致暂时不可用，请稍后重试。 |
| 504 | 网关超时 | 网关等待上游服务响应超时，可稍后重试或降低请求复杂度。 |

## 接口自定义业务状态码

| 业务状态码 | 业务状态码解释 | 备注 |
| --- | --- | --- |
| 100 | 正常返回 |  |
| 101 | 参数错误 |  |
| 102 | 请求频率受限 | 每分钟请求不能超过 100 次 |
| 103 | 账号欠费 |  |
| 104 | APPKEY 错误 | 请检查传递的 APPKEY 是否为开发者中心获取到的值 |

## cURL 请求示例

```bash
curl --location --request GET 'https://api.gugudata.com/Weather/AirQuality?appkey=YOUR_APPKEY&location=%e5%8c%97%e4%ba%ac&lang=zh&city=%e5%8c%97%e4%ba%ac'
```

## 常见问题 Q&A

### Q: 数据请求有缓存吗？
A: 接口默认以实时响应为目标。对于日更、月更等具备明确更新周期的数据，会在数据周期内采用缓存与预热策略，以提升响应速度和稳定性；实时查询类接口则以接口说明中的更新频率为准。建议业务侧结合数据时效要求设置本地缓存与重试策略，避免高频重复请求。

### Q: 如何保证请求时 AppKey 的安全性？
A: 用户可以登录咕咕数据开发者中心，在 `APP KEY 管理` 页面复制对应产品的 AppKey；未开通接口时先进入当前接口的购买开通页，已开通或到期续费时进入开发者中心或订单与续费页。建议将 AppKey 保存在服务端环境中，由后端统一调用 API，再向前端或业务系统返回必要结果。不要把 AppKey 写入网页、App 客户端或公开仓库；生产环境建议按系统或业务线拆分 AppKey，并保留调用日志，便于权限控制、审计与问题排查。

### Q: 接口可以用于哪些开发语言？
A: 只要支持 HTTPS 请求的语言和框架均可接入，包括 Java、Python、Node.js、PHP、Go、C#、Swift、Kotlin 等。推荐由后端统一封装调用逻辑，集中处理鉴权、缓存、限流、重试和错误码映射，让 Web、App、AI Agent、内部系统和自动化任务复用同一套数据能力。

### Q: 接口性能可以保证吗？
A: GuGuData API 按生产环境标准部署，持续关注接口稳定性、响应速度与可用性。实际响应时间会受接口类型、请求参数、数据源更新和网络环境影响；建议生产接入前进行联调与压测，并设置合理的超时、重试、降级和告警策略。批量处理或高并发场景可提前评估 QPS、白名单和专属容量方案。

## 服务协议以及服务免责声明

- [服务协议](https://www.gugudata.com/license)
- [服务免责声明](https://www.gugudata.com/disclaimer)

## 技术支持

- 技术支持邮箱: support@gugudata.com
- 微信客服: https://work.weixin.qq.com/kfid/kfcf9a60a6afe3337b7
