技术博客
地区新闻接口实战:用地区新闻搭建本地资讯聚合看板

地区新闻接口实战:用地区新闻搭建本地资讯聚合看板

作者: 万维易源
2026-09-01
地区新闻接口本地资讯聚合看板
# 地区新闻接口实战:用地区新闻搭建本地资讯聚合看板 > 接口/接入点:地区新闻接口(apiCode 170)· 跨 47/48 两接入点|免费 · POST/GET · 返回 JSON · 适用人群:地方门户/舆情/本地生活从业者 · 阅读时间:约 8 分钟 ## 核心要点 - 端到端链路:区域查询(48) 拉全量地区 → 按省循环调新闻(47) → 聚合清洗 → 前端看板展示。 - 用后台错峰 + 缓存预热,避免前台高并发打满免费档位(详见缓存与限流篇)。 - 适合地方门户、舆情监测、本地生活 App 的"本地新闻"模块。 ## Why:一个接口就能撑起"本地新闻"板块 做地方站最常缺的就是"本地内容"。与其自己爬新闻源(法律风险+维护成本),不如用地区新闻接口直接拿结构化数据。本文把"从 0 到看板"的完整链路跑通,你照着改改就能上线。 ## What:架构速览 ``` [定时任务] --(48)区域查询--> 地区映射(缓存数天) --(47)按省查新闻(错峰)--> 清洗 --> [缓存10分钟] <-- [前端看板读取] ``` | 组件 | 职责 | |------|------| | 区域查询(48) | 启动时拉地区映射,长期缓存 | | 新闻查询(47) | 后台按省错峰拉取,写入缓存 | | 缓存层 | 前端只读数,杜绝前台高并发直击接口 | | 前端看板 | 按地区筛选、展示标题/来源/时间/封面 | ## How:后台聚合脚本(Python) ```python import requests, json, time, redis rds = redis.Redis(host="localhost", port=6379, db=0) APPKEY = "YOUR_APPKEY" def region_map(): r = requests.post("https://route.showapi.com/170-48", params={"appKey":APPKEY}, timeout=10) return {c["areaName"]: c["areaId"] for c in r.json()["showapi_res_body"]["cityList"]} def pull_one(area_id, pages=3): items=[] for p in range(1, pages+1): r=requests.post("https://route.showapi.com/170-47", params={"appKey":APPKEY}, data={"areaId":area_id,"page":p}, headers={"content-type":"application/x-www-form-urlencoded"}, timeout=10) body=r.json()["showapi_res_body"] if body.get("ret_code")!="0": break items.extend(body["pagebean"]["contentlist"]) if body["pagebean"]["currentPage"]>=body["pagebean"]["allPages"]: break time.sleep(0.5) # 错峰,避免短时密集 return items def aggregate(): m = region_map() for name, aid in m.items(): news = pull_one(aid, pages=2) rds.setex(f"agg:{aid}", 600, json.dumps(news, ensure_ascii=False)) print("聚合完成:", name, len(news)) time.sleep(1) # 省份之间也错峰 ``` ## 返回示例与解析 聚合后每个地区存入形如 `agg:55818af8085b7bc0c73836c4` 的缓存键,值为该省新闻数组(含 title/link/pubDate/source/areaName/imageurls)。前端按 selected areaId 读取即可。 ## 进阶 / 边界 - **错峰是关键**:省份多(30+),务必在省份间与翻页间加 sleep,配合令牌桶(见免费档位篇),别一次性并发打爆档位。 - **imageurls 多为空**:前端做好无图占位(见 imageurls 篇)。 - **舆情场景**:可按 `source` 统计来源分布、按 `pubDate` 做时间线,但注意数据为 10 分钟级更新,非实时。 ## FAQ **Q:30 多个省全量拉会不会超免费档位?** A:会,如果前台实时并发拉。正确做法是后台错峰 + 缓存预热,前台只读缓存;需要更高配额以官方档位页说明为准。 **Q:能只聚合某几个重点城市吗?** A:可以,从 region_map() 里挑需要的 areaId 即可,不必全量。 **Q:数据时效够做舆情预警吗?** A:接口更新为"最快每 10 分钟",可做周期性监测与趋势,但不适合秒级实时预警。 ## 相关能力与下一步阅读 - [地区新闻接口区域查询:获取全国 34 个地区与 areaId 映射](https://www.showapi.com/guides/region-news-region-query-170) - [地区新闻接口:按地区/标题查新闻的参数使用指南](https://www.showapi.com/guides/region-news-query-by-area-170) - **本系列共 12 篇**:查看[地区新闻接口(apiCode 170)官方指南总目录](https://www.showapi.com/guides/region-news-guides-170)