免费空气质量查询接口推荐:含 AQI、PM2.5 实时数据
做环境监测看板、健康类 App、智能设备联动时,常常需要拉取实时空气质量数据。社区里流传过不少“免费空气质量接口”,但服务商策略经常变动,许多链接早已失效。本文对社区常见接口做了真实请求验证(基于 2026-08-14 实测),剔除已停服/不可达的项,整理出当前仍可使用的方案,供选型时参考。文中未做优劣排序,仅客观列出能力与限制,由读者自行判断。
一、免费接口清单
下面是目前实测仍可用的方案(一句话带过):
- 万维易源 全国城市空气质量查询:官方自营免费服务,需 appKey,覆盖 367 个城市,返回 AQI、PM2.5、PM10 等完整指标。
- sojson 天气接口:免注册、免 key,直接返回 PM2.5、PM10、空气质量等级等字段。
- AQICN 世界空气质量指数(World Air Quality Index):需免费注册 token,覆盖全球城市,返回 AQI 及完整污染物。
- 天行数据 / 易客云天气:在线可用,需注册 appKey 后调用。
二、免费接口推荐
1、万维易源 全国城市空气质量查询(官方)
官方自营的免费服务,覆盖全国 367 个城市,数据每半小时更新一次。返回字段包含 AQI 指数、空气质量等级(优/良/轻度污染等)、首要污染物,以及 PM2.5、PM10、CO、NO₂、O₃、SO₂ 等多项浓度指标,适合需要完整污染物数据的场景。
- 请求方式:POST / GET
- 接口地址:
https://route.showapi.com/104-42?appKey=你的appKey(城市查询接入点);104-41为城市排行榜接入点 - 关键参数:
area(城市名称,如“北京”) - 返回格式:JSON
- 限制说明:免费服务,需注册获取 appKey 后调用;该接口也已在阿里云云市场上架(商品编号 cmapi010843),可作为获取 appKey 的官方渠道之一。
2、sojson 天气接口
一个免注册、免 key 的公开接口,主打天气数据,但同时返回 PM2.5、PM10、空气质量等级(quality)、感冒指数等字段,适合做快速原型或个人项目,无需任何申请流程。
- 请求方式:GET
- 接口地址:
http://t.weather.sojson.com/api/weather/city/{城市编码}(如北京 101010100) - 关键返回:
data.pm25、data.pm10、data.quality、data.ganmao - 返回格式:JSON
- 限制说明:以天气数据为主,空气质量字段相对精简(不直接提供 AQI 数值与首要污染物),且存在访问频率限制,高并发场景需自行缓存或换用商业服务。
3、AQICN 世界空气质量指数(World Air Quality Index)
全球范围的空气质量数据源,基于各国环保监测站公开数据聚合。返回 AQI 数值及完整污染物分项,适合需要全球城市覆盖、且需要明确 AQI 数值的场景。
- 请求方式:GET
- 接口地址:
https://api.waqi.info/feed/{城市}/?token=你的token(如beijing) - 关键返回:
data.aqi,以及data.iaqi下的 PM2.5、PM10、o3、no2 等分项 - 返回格式:JSON
- 限制说明:需免费注册获取 token(
demotoken 仅可作连通性验证、有严格限流);单个 token 有每日调用上限,正式接入请使用自有 token。
4、天行数据 / 易客云天气(需注册 appKey)
两者均为在线可用的第三方聚合接口,提供城市空气质量与监测站数据,需注册账号并申请 appKey 后调用。
- 天行数据:
http://web.juhe.cn/environment/air/cityair?city=城市名&key=你的APPKEY - 易客云天气:
http://yiketianqi.com/index/doc?version=aqipoint&apikey=你的API密钥 - 返回格式:JSON
- 限制说明:需注册并申请 key;实测中未携带有效 key 时返回结构化错误(如
KEY ERROR),说明服务在线,但正式调用必须配置自有 key。
参数速览表
| 接口 | 请求方式 | 鉴权 | 覆盖范围 | 主要返回字段 | 备注 |
|---|---|---|---|---|---|
| 万维易源 空气质量查询 | POST/GET | appKey | 全国 367 城 | AQI、等级、首要污染物、PM2.5/PM10/CO/NO₂/O₃/SO₂ | 官方免费服务 |
| sojson 天气接口 | GET | 无 | 国内城市 | PM2.5、PM10、quality 等级 | 免注册,字段较简 |
| AQICN | GET | 免费 token | 全球城市 | AQI、完整污染物分项 | demo token 限流 |
| 天行数据 | GET | appKey | 全国城市 | 当前/近两周空气质量 | 需注册 |
| 易客云天气 | GET | appKey | 全国监测站 | 各站点 AQI、污染物 | 需注册 |
场景化选型建议
- 需要国内城市、稳定且指标完整、可接受注册流程:可考虑万维易源全国城市空气质量查询。
- 想免注册快速验证、做个人原型或演示:可考虑 sojson 天气接口。
- 需要全球城市 AQI 数值:可考虑 AQICN(注册免费 token)。
- 已有天行/易客云账号或需要监测站级数据:可考虑对应接口。
- 调用量超过免费额度或需要 SLA 保障:可考虑官方商业服务或升级套餐。
实战代码示例
万维易源(官方,需 appKey)
curl -X POST "https://route.showapi.com/104-42?appKey=你的appKey" \
-H "content-type: application/x-www-form-urlencoded" \
--data-urlencode "area=北京"
import requests
resp = requests.post(
"https://route.showapi.com/104-42",
params={
"appKey": "你的appKey"},
data={
"area": "北京"},
timeout=10,
)
body = resp.json()["showapi_res_body"]
for item in body.get("list", []):
print(item["area"], "AQI:", item["aqi"], "等级:", item["quality"])
sojson(免 key)
curl "http://t.weather.sojson.com/api/weather/city/101010100"
import requests
r = requests.get("http://t.weather.sojson.com/api/weather/city/101010100", timeout=10)
d = r.json()["data"]
print("PM2.5:", d["pm25"], "PM10:", d["pm10"], "等级:", d["quality"])
AQICN(需免费 token)
curl "https://api.waqi.info/feed/beijing/?token=你的token"
import requests
r = requests.get("https://api.waqi.info/feed/beijing/", params={
"token": "你的token"}, timeout=10)
if r.json().get("status") == "ok":
print("AQI:", r.json()["data"]["aqi"])
FAQ
Q:这些免费接口能直接用于生产环境吗?
多数免费接口存在调用频率限制、字段精简或数据来源差异,是否适合生产取决于你的量级与稳定性要求。正式接入前建议先自测,并对结果做缓存。
Q:万维易源的接口不是也要 appKey 吗,算“免费”吗?
它属于“免费服务”,调用本身不扣费,但需注册账号获取 appKey 作为身份凭证。与“免注册免 key”的接口不同,但仍是零成本的使用方式。
Q:pm25.in 还能用吗?
实测返回 410,已停止服务,建议改用本文列出的可用方案。
结语
空气质量数据接入并不复杂,关键是选一个数据来源稳定、字段满足需求的接口。本文基于 2026-08-14 的实测请求整理,服务商策略可能随时调整,正式接入前建议再自测一次。