技术博客
资讯聚合平台方案:多分类热搜聚合与去重

资讯聚合平台方案:多分类热搜聚合与去重

作者: 万维易源
2026-08-31
资讯聚合多分类去重
# 资讯聚合平台方案:多分类热搜聚合与去重 > 接口:网络搜索热词排行(apiCode=313) · 免费服务 · 返回格式 JSON · 适用人群:资讯平台工程师、后端开发 · 阅读时间:约 8 分钟 ## 核心要点 - 多分类聚合 = 并发拉取多个 `tab` 的 `list` → 跨分类按 `name` 去重 → 统一按 `num`/`level` 排序展示。 - 313-1 先取全部主分类,313-2 逐个拉取,避免硬编码分类。 - 免费接口注意总频次,多 `tab` 并发要配缓存与限流(见[缓存策略篇](https://www.showapi.com/guides/hotword-cache-313))。 ## Why:资讯平台为什么需要聚合 单看一个分类的热搜价值有限。资讯平台需要"全站热词总榜"——把游戏、小说、明星等多个分类的热搜合并去重,给用户一个统一的"今天在热什么"入口。这个接口天然支持多分类,正好做聚合底座。 ## What:聚合所需能力 | 步骤 | 接入点 | 说明 | |------|------|------| | 取全部分类 | 313-1 | 拿到所有 `tab` | | 拉各分类热搜 | 313-2 | 并发请求每个 `tab` | | 去重排序 | 本地 | 按 `name` 去重,按 `num`/`level` 排序 | ## How:并发拉取 + 去重 ```python import requests, concurrent.futures APP_KEY = "YOUR_APPKEY" def fetch_tab(tab): resp = requests.post( "https://route.showapi.com/313-2", params={"appKey": APP_KEY}, data={"tab": tab}, headers={"content-type": "application/x-www-form-urlencoded"}, timeout=10, ).json() body = resp.get("showapi_res_body", {}) if str(body.get("ret_code")) != "0": return [] return [{"tab": tab, **i} for i in body.get("list", [])] def aggregate(tabs, workers=5): results = [] with concurrent.futures.ThreadPoolExecutor(max_workers=workers) as ex: for lst in ex.map(fetch_tab, tabs): results.extend(lst) # 跨分类按 name 去重,保留首次出现 seen, deduped = set(), [] for item in results: key = item.get("name") if key in seen: continue seen.add(key) deduped.append(item) # 统一按热度分降序 deduped.sort(key=lambda x: int(x.get("level") or 0), reverse=True) return deduped if __name__ == "__main__": tabs = ["game", "novel", "star"] # 实际用 313-1 动态获取 for i in aggregate(tabs)[:20]: print(i.get("name"), i.get("tab"), "热度", i.get("level")) ``` ## 返回示例与解析 每条记录保留原 `tab` 来源,便于前端标注"来自哪个分类";去重后按 `level` 给总榜排序(注意 `level` 仅在同一分类内有横向可比性,跨分类排序仅作参考)。 ## 进阶 / 边界 - **跨分类排序的局限**:`level` 是各分类内部热度分,跨分类直接比数值仅供参考,严谨做法可按分类内百分位归一化后再排。 - **频次控制**:并发拉多个 `tab` 仍受总频次约束,建议配合缓存(见[缓存策略篇](https://www.showapi.com/guides/hotword-cache-313)),分类树可长缓存。 - `tab` 合法性先用 313-1 核对(见[分类查询篇](https://www.showapi.com/guides/hotword-category-query-313))。 ## FAQ **Q1:不同分类出现同一个热搜词怎么办?** A1:按 `name` 去重,保留首次出现(或合并来源分类列表),避免重复展示。 **Q2:并发数设多少合适?** A2:免费接口建议保守(5 以内),并配合缓存与重试;文档未给 QPS,以平台实际为准。 **Q3:跨分类能严格比热度吗?** A3:`level` 跨分类不可直接比较,建议仅作参考或做分类内归一化。 **Q4:能加地区筛选吗?** A4:可以,对支持的 `tab` 传 `country`,见[地区与子分类筛选篇](https://www.showapi.com/guides/hotword-country-category-313)。 **Q5:返回偶发为空影响聚合吗?** A5:单分类空结果跳过即可,聚合结果仍包含其余分类;建议记录失败分类便于排查。 ## 相关能力 / 下一步阅读 - [网络搜索热词分类查询(313-1):如何先拿到可查的 tab 与子分类](https://www.showapi.com/guides/hotword-category-query-313) - [地区与子分类筛选:country/category 参数正确使用姿势](https://www.showapi.com/guides/hotword-country-category-313) - [搭建实时热搜看板:网络搜索热词排行 + 定时拉取的完整设计](https://www.showapi.com/guides/hotword-dashboard-313) - **本系列共 12 篇**:查看[网络搜索热词排行开发指南总目录](https://www.showapi.com/guides/hotword-guides-313)