地区新闻接口区域查询:获取全国 34 个地区与 areaId 映射
# 地区新闻接口区域查询:获取全国 34 个地区与 areaId 映射
> 接口/接入点:地区新闻接口(apiCode 170)· 区域查询(170-48)|免费 · POST/GET · 返回 JSON · 适用人群:前端/后端开发者 · 阅读时间:约 5 分钟
## 核心要点
- 接入点 48「区域查询」无业务参数,调用即返回全国地区列表 `cityList`(示例含 34 个,含北京/上海/香港/澳门/台湾等)。
- 每条含 `areaId`(稳定 ID)与 `areaName`(地区名),可直接当省份下拉框数据源。
- 数据「不变动,无特殊情况不会删减」,非常适合一次性缓存后长期使用。
## Why:为什么要先调区域查询
接入点 47 支持用 `areaId` 精确查新闻,但 `areaId` 从哪来?就来自区域查询。先拉一次全量地区,缓存成「地区名 → areaId」映射,后续前端下拉、后端精确查询都靠它。这是「区域查询 → 拿 ID → 查新闻」标准链路的第一步。
## What:接口速览
| 项 | 值 |
|------|------|
| 接口地址 | `https://route.showapi.com/170-48?appKey={your_appKey}` |
| 请求方式 | POST / GET |
| 业务参数 | 无 |
| 返回关键字段 | `cityList[]`(`areaId`、`areaName`)、`ret_code`;示例另含 `totalNum`(参数表未列,但真实返回存在) |
| 更新频率 | 不变动,无特殊情况不会删减 |
## How:拉取并缓存地区映射
**Python:拉取并落成本地映射**
```python
import requests, json
r = requests.post("https://route.showapi.com/170-48",
params={"appKey":"YOUR_APPKEY"},
headers={"content-type":"application/x-www-form-urlencoded"}, timeout=10)
body = r.json()["showapi_res_body"]
if body.get("ret_code") != "0":
raise RuntimeError("区域查询失败")
name_to_id = {c["areaName"]: c["areaId"] for c in body["cityList"]}
# 缓存到文件,下次直接读,不必重复调用
with open("area_map.json","w",encoding="utf-8") as f:
json.dump(name_to_id, f, ensure_ascii=False, indent=2)
print("共", len(name_to_id), "个地区")
```
**cURL**
```bash
curl -X POST "https://route.showapi.com/170-48?appKey=YOUR_APPKEY" \
-H "content-type: application/x-www-form-urlencoded"
```
**Node.js(fetch)**
```js
const r = await fetch("https://route.showapi.com/170-48?appKey=YOUR_APPKEY",{
method:"POST", headers:{"content-type":"application/x-www-form-urlencoded"}
});
const d = await r.json();
const map = Object.fromEntries(d.showapi_res_body.cityList.map(c=>[c.areaName,c.areaId]));
console.log("共", d.showapi_res_body.cityList.length, "个地区");
```
## 返回示例与解析
```json
{
"showapi_res_code": 0,
"showapi_res_error": "",
"showapi_res_id": "ce135f6739294c63be0c021b76b6fbff",
"showapi_res_body": {
"cityList": [
{"areaId":"55818af5085b7bc0c73836b4","areaName":"北京"},
{"areaId":"55818af5085b7bc0c73836b5","areaName":"上海"},
{"areaId":"55818af7085b7bc0c73836cb","areaName":"香港"},
{"areaId":"55818af7085b7bc0c73836cc","areaName":"澳门"},
{"areaId":"55818af7085b7bc0c73836ce","areaName":"台湾"}
],
"ret_code": 0,
"totalNum": 34
}
}
```
- `cityList`:地区数组,`areaName` 是展示名,`areaId` 是传给接入点 47 的稳定 ID。
- `totalNum`:示例返回 34,代表地区总数(参数表未列此字段,但真实返回中存在,可作为地区计数参考)。
## 进阶 / 边界
- **建议启动时拉一次 + 长期缓存**:因为数据基本不变,没必要每次请求都调。
- `areaId` 是稳定标识,用它查新闻比用 `areaName` 更可靠(避免地名别名/错别字导致过滤失效)。
## FAQ
**Q:区域查询需要传地区参数吗?**
A:不需要,接入点 48 无任何业务参数,调用即返回全国地区列表。
**Q:totalNum 在文档参数表里没看到?**
A:是的,参数表未列 `totalNum`,但官方返回示例中包含(值为 34)。本文按真实返回如实标注,可当作地区总数参考。
**Q:返回的 areaId 会变化吗?**
A:文档说明该数据「不变动,无特殊情况不会删减」,可作为稳定映射长期使用,但仍建议保留定期刷新机制以防极端变更。
## 相关能力与下一步阅读
- [地区新闻接口:areaId 与 areaName 怎么选,先用区域查询拿 ID 再查新闻](https://www.showapi.com/guides/region-news-areaid-areaname-170)
- [地区新闻接口:按地区/标题查新闻的参数使用指南](https://www.showapi.com/guides/region-news-query-by-area-170)
- **本系列共 12 篇**:查看[地区新闻接口(apiCode 170)官方指南总目录](https://www.showapi.com/guides/region-news-guides-170)