
Trending Hub
- 253 installs
- 316 repo stars
- Updated August 4, 2026
- redfox-data/redfox-community
Use trending-hub for development tasks
About
trending-hub: A skill for development. This provides functionality for development workflows.
- trending-hub
Trending Hub by the numbers
- 253 all-time installs (skills.sh)
- +15 installs in the week ending Aug 4, 2026 (Skillselion tracking)
- Ranked #1,500 of 4,347 Backend & APIs skills by installs in the Skillselion catalog
- Data as of Aug 5, 2026 (Skillselion catalog sync)
npx skills add https://github.com/redfox-data/redfox-community --skill trending-hubAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 253 |
|---|---|
| repo stars | ★ 316 |
| Last updated | August 4, 2026 |
| Repository | redfox-data/redfox-community ↗ |
What it does
Use trending-hub for development tasks
Files
全网热点追踪
1. 简介
一句话定位:全网热点聚合追踪工具,实时抓取抖音、微博、B站、快手、知乎、头条、百度等7大平台热搜数据,一站式查看全网热点。
核心价值:解决内容创作者、市场运营者在热点追踪中的三大痛点:
- 热点分散难整合:无需逐个平台查看,一次聚合7大平台热榜
- 跨平台对比困难:自动识别同一事件在不同平台的讨论差异和热度表现
- 趋势判断模糊:基于热度值、上榜时长、平台覆盖等维度智能预测热点走势
适用对象:内容创作者、市场运营人员、媒体编辑、品牌策划、热点追踪爱好者。
不支持:该技能不支持查询特定热词详情,仅提供全网热点榜聚合查询。
2. 功能特性
核心功能
| 功能模块 | 能力描述 | 核心价值 |
|---|---|---|
| 🔍 全网热榜聚合 | 实时抓取7大平台热搜数据 | 一键获取全网热点,告别逐平台查看 |
| 🔗 跨平台事件识别 | 智能识别同一事件在不同平台的表述 | 自动归并相似话题,避免重复统计 |
| 📊 热度趋势预测 | 基于热度值、时长、平台覆盖预测走势 | 提前判断热点生命周期,把握创作窗口 |
| 📈 TOP10榜单提供 | 按综合热度排序输出TOP10热点 | 快速定位高价值选题 |
| 💬 跨平台讨论分析 | 展示不同平台的讨论焦点和差异 | 深度洞察舆论生态,精准定位受众 |
| ⏰ 订阅推送服务 | 定时推送最新热榜/昨日热榜 | 持续追踪热点动态,不错过关键机会 |
特色亮点
- 小时级更新:数据每小时更新,保持实时性
- 智能关键词泛化:输入"体育"自动扩展为10个相关关键词
- 按平台分类输出:百度、知乎、微博、抖音、B站、快手、头条依次展示
- 完整榜单查看:每个平台最多支持查看完整50条数据
- 动态智能输出:无数据平台自动跳过,数据不足自动调整展示数量
3. 一键安装
鉴权
获取 API Key
请前往 红狐hub 获取API KEY
配置 API Key
方案1: 以OpenClaw为例,将REDFOX_API_KEY添加到~/.openclaw/openclaw.json中,部分内容如下:
{ "env": { "REDFOX_API_KEY": "ak_xxxx..." } }方案2: 终端配置:
export REDFOX_API_KEY="ak_xxxx..."依赖安装
pip install python-dateutil环境变量配置
| 变量名 | 说明 | 必填 |
|---|---|---|
REDFOX_API_KEY | 红狐 API Key | 是 |
4. 使用指南
基础使用
查询最新热榜(默认)
python scripts/fetch_hotspot.py --source "全平台热点事件"数据为小时级更新,自动查询前一个完整小时。例如:当前时间为 2026-04-16 17:42:00,则查询 2026-04-16 16:00:00 到 2026-04-16 17:00:00 的数据。
查询历史热榜
# 查询昨日热榜(假设今天是2026-04-16)
python scripts/fetch_hotspot.py --source "全平台热点事件" --start-date "2026-04-15 00:00:00" --end-date "2026-04-16 00:00:00"日期范围规则:
- 时间格式为
YYYY-MM-DD HH:MM:SS,也可简写为YYYY-MM-DD(自动补全为 00:00:00) - 日期范围是
[start_date, end_date)左闭右开区间 - 例如:
--start-date "2026-04-01 00:00:00" --end-date "2026-04-02 00:00:00"查询的是4月1日当天的数据 - 最长查询范围:30天
高级使用
筛选特定平台
python scripts/fetch_hotspot.py --source "全平台热点事件" --platforms "wb,dy,bz"平台代码映射:
| 平台代码 | 平台名称 | 接口枚举值 |
|---|---|---|
| bd | 百度 | 7 |
| zh | 知乎 | 9 |
| wb | 微博 | 5 |
| dy | 抖音 | 2 |
| bz | B站 | 8 |
| ks | 快手 | 1 |
| tt | 头条 | 10 |
关键词搜索与泛化
# 关键词筛选
python scripts/fetch_hotspot.py --source "全平台热点事件" --keywords "体育,足球"
# 关键词泛化扩展
python scripts/fetch_hotspot.py --source "全平台热点事件" --keywords "体育" --expand-keywords关键词泛化策略:
- 大词(如"体育"、"娱乐"、"科技"):自动扩展为10个泛化词
- 例:"体育" -> ["体育", "足球", "篮球", "运动", "健身", "奥运", "世界杯", "NBA", "CBA", "乒乓球"]
- 精确词(如"苏超"、"某明星名字"):直接传入原词,不进行扩展
- 支持泛化的大类:体育、娱乐、科技、财经、社会、游戏、汽车、美食、旅游、时尚等
查看完整榜单
当用户回复「查看{平台名}完整榜单」时:
python scripts/fetch_hotspot.py --source "全平台热点事件" --platforms wb --output markdown智能体时间判断逻辑
根据用户意图自动选择查询方式(假设今天日期为T):
| 用户意图 | 查询方式 | 脚本参数 |
|---|---|---|
| "今日热点" / "今日热榜" | 查询今日0:00到当前整点 | --start-date "T 00:00:00" --end-date "T {当前小时}:00:00" |
| "最新热榜" / "热点榜" | 查询前一个完整小时 | 无需指定时间参数 |
| "昨日热榜" / "昨天热榜" | 查询昨日0:00到24:00 | --start-date "T-1 00:00:00" --end-date "T 00:00:00" |
| "本周热榜" / "这周热榜" | 查询本周一0:00到当前整点 | --start-date "{本周一日期} 00:00:00" --end-date "T {当前小时}:00:00" |
本周一时间计算规则:
- 计算公式:本周一 = 今天日期 - (今天星期几 - 1) 天
- 示例:今天是2026-05-09(周六),本周一 = 2026-05-04
对比查询场景:当用户需要对比多天数据时,需分别查询多天的热榜:
# 对比昨天和今天的热榜(假设今天是2026-04-16)
python scripts/fetch_hotspot.py --source "全平台热点事件" --start-date "2026-04-15 00:00:00" --end-date "2026-04-16 00:00:00" # 昨日
python scripts/fetch_hotspot.py --source "全平台热点事件" --start-date "2026-04-16 00:00:00" --end-date "2026-04-17 00:00:00" # 今日实时输出格式说明
compact模式(默认):输出极简结构化数据(元信息+平台TOP3概览),末尾附带完整数据文件路径 dataFile: {path}。智能体应使用compact模式获取数据,从 dataFile 路径读取完整JSON数据。只允许调用1次接口。
输出格式模板:按平台分类输出,每个平台展示TOP10热点。智能输出规则:
- 如果某平台没有热点数据,则不展示该平台
- 如果某平台数据少于10条,则展示实际数量
- 数据>10条时显示"该平台还有{N}条数据未展示"
- 平台顺序:百度 → 知乎 → 微博 → 抖音 → B站 → 快手 → 头条
输出格式模板详见 references/output-templates.md。
热度值处理
- 如果热度值已包含单位(如"万"、"亿"),直接使用原始值
- 如果热度值为纯数字,转换为"数字+万"格式(
hotCount // 10000整数除法) - 示例:百度热度
7904508→790万 - 热度值格式必须为"数字+万",禁止包含其他字符
订阅推送服务
- 每日推送:每天定时推送最新热榜(如早8点、晚8点)
- 每周推送:每周定时推送热门汇总(如周一早上)
- 推送格式:精简版TOP10表格 + 小总结(各平台TOP3 + 全网热点小总结)
命令速查表
| 场景 | 命令 |
|---|---|
| 最新热榜 | python scripts/fetch_hotspot.py --source "全平台热点事件" |
| 今日热榜 | python scripts/fetch_hotspot.py --source "全平台热点事件" --start-date "T 00:00:00" --end-date "T HH:00:00" |
| 昨日热榜 | python scripts/fetch_hotspot.py --source "全平台热点事件" --start-date "T-1 00:00:00" --end-date "T 00:00:00" |
| 指定平台 | python scripts/fetch_hotspot.py --platforms "wb,dy" |
| 关键词筛选 | python scripts/fetch_hotspot.py --keywords "体育,足球" |
| 关键词泛化 | python scripts/fetch_hotspot.py --keywords "体育" --expand-keywords |
数据结构说明
{
"status": "success",
"stat_time": "2026-05-08 07:35:15",
"total_count": 330,
"hotspots": [
{
"title": "热点标题",
"url": "https://...",
"hotCount": 7904508,
"index": 1,
"gmtCreate": "2026-05-08 06:00:14",
"platCode": "bd",
"platName": "百度"
}
],
"query_range": {
"type": "realtime",
"start_date": "2026-05-08 06:00:00",
"end_date": "2026-05-08 07:00:00"
}
}| 字段 | 说明 |
|---|---|
| hotspots | 热点列表,包含所有平台的热点数据 |
| title | 热点标题(已处理空格) |
| url | 热点链接(空格已转为%20) |
| hotCount | 热度值(纯数字,已移除"万热度"等字符) |
| index | 平台内排名 |
| gmtCreate | 创建时间 |
| platCode | 平台代码:bd/bz/dy/ks/tt/wb/zh |
| platName | 平台名称:百度/B站/抖音/快手/头条/微博/知乎 |
5. 使用场景
场景一:内容创作者追热点
角色:自媒体创作者 需求:每天早晨快速了解全网热点,确定当日选题方向 使用方式:输入"今日热点",获取7大平台实时热榜TOP10 预期收益:5分钟内掌握全网热点动态,精准定位高价值选题
场景二:市场运营竞品分析
角色:品牌市场运营 需求:对比同一事件在不同平台的讨论差异,了解舆论生态 使用方式:查询指定关键词热点,观察跨平台讨论焦点 预期收益:深度洞察不同平台用户讨论差异,制定差异化运营策略
场景三:PR危机监测
角色:公关经理 需求:实时监测特定品牌或事件在多平台的热度变化 使用方式:通过关键词筛选 + 订阅推送,持续追踪相关热点 预期收益:第一时间发现舆情信号,抢占危机应对窗口
场景四:热点趋势研究
角色:数据分析师 需求:对比多天热点数据,分析热点演变趋势 使用方式:使用对比查询分别查询多天数据,分析热度变化 预期收益:基于数据判断热点生命周期,输出趋势分析报告
6. 项目架构
目录结构
trending-hub/
├── SKILL.md # 技能描述文件
├── scripts/
│ └── fetch_hotspot.py # 热点数据获取脚本
└── references/
└── output-templates.md # 输出格式模板参考技术栈
| 组件 | 技术 | 说明 |
|---|---|---|
| 脚本语言 | Python 3 | 使用标准库 urllib.request |
| 外部依赖 | python-dateutil | 日期处理 |
| 数据接口 | Redfox API | 多平台热点数据聚合 |
| 输出格式 | JSON / Markdown | 结构化和可视化输出 |
核心模块说明
| 模块 | 功能 |
|---|---|
fetch_hotspot.py | 从API获取多平台热点数据,支持平台筛选、关键词搜索、时间范围查询、关键词泛化 |
output-templates.md | 定义对话输出格式模板,规范各平台TOP10表格和小结格式 |
资源索引
- 脚本: 见 scripts/fetch_hotspot.py(用途与参数:从API获取热点数据,支持平台筛选)
- 参考: 见 references/output-templates.md(何时读取:对话输出时参考格式模板)
7. 常见问答
安装相关
Q: 脚本运行报错 "ModuleNotFoundError: No module named 'dateutil'" A: 请安装依赖:pip install python-dateutil
Q: 提示 "REDFOX_API_KEY not found" A: 请确保已配置环境变量 REDFOX_API_KEY,可参考上方鉴权章节配置。
使用相关
Q: 为什么查询"今日热点"显示的不是今天的数据? A: 数据为小时级更新,最新热榜查询的是前一个完整小时的数据。如需查询今日数据,使用 --start-date 和 --end-date 参数指定今天0:00到当前整点。
Q: 支持查询多久之前的数据? A: 最长查询范围为30天。
Q: 如何查看某个平台的完整50条榜单? A: 回复「查看{平台名}完整榜单」即可,系统会使用 --platforms 参数筛选该平台并输出完整50条数据。
Q: 热点标题无法点击? A: 标题以 Markdown 超链接格式 [标题](url) 输出,无URL的热点仅显示文本。
故障排除
Q: API返回空数据? A: 可能原因:1) 网络连接问题;2) API Key 无效或过期;3) 查询时间范围超出限制。请检查网络和API Key配置。
Q: 输出被截断? A: 默认使用compact模式避免截断。如仍被截断,从compact输出末尾的 dataFile 路径读取完整JSON数据。
Q: 关键字搜索没有结果? A: 尝试使用 --expand-keywords 参数对关键词进行泛化扩展,扩大搜索范围。
Cross-Platform Trending Tracker / trending-hub
Introduction
Aggregates hot searches from Douyin, Weibo, Bilibili, Kuaishou, Zhihu, Toutiao, and Baidu in one place — no more hopping between platforms.
Core Value
One-click access to hot search data across 7 major platforms, updated hourly. Each platform is shown separately with up to 50 entries per platform. Filter by keyword or platform — skip the pain of checking each app one by one.
Who It's For
- 🔍 Competitor monitoring — View hot searches on specific platforms and track competitor dynamics
- 🎯 Topic research — Filter related hot searches by keyword to match content direction quickly
- 📊 Data analysis — Get raw hot search data across platforms for deeper analysis
- 📰 Public opinion tracking — Monitor how specific events perform in hot search across platforms
Core Capabilities
- All-platform hot search display: 7 platforms shown independently, up to 50 entries each
- Multi-platform combined queries: Query one or multiple specified platforms
- Keyword filtering: Filter hot searches related to your keywords
- Multiple time ranges: Real-time, today, yesterday, this week, and more
- Full ranking view: View all 50 hot searches per platform
- Subscription push: Scheduled pushes for latest or yesterday's rankings
---
API Key Acquisition & Security
- This skill requires the environment variable:
REDFOX_API_KEY. REDFOX_API_KEYis provided by RedFoxHub (https://redfox.hk).- Register at RedFoxHub to obtain your
REDFOX_API_KEY. - Configure
REDFOX_API_KEYas a device environment variable before using this skill. - Before providing your key, confirm its source, available scope, validity period, and whether reset/revocation is supported.
- Do not hard-code or expose the key in plaintext in code, prompts, logs, or output files.
---
Usage Guide
Quick phrase reference
| Intent | Example phrase | What you get |
|---|---|---|
| All-platform hot search | "Hot ranking", "trending list", "all-platform hot search" | TOP 10 hot searches per platform across 7 sites |
| Keyword filter | "Show me sports-related hot searches" | Only hot searches containing the keyword |
| Single platform only | "Weibo hot search", "Douyin trends", "Bilibili hot search" | Hot searches for the specified platform only |
| Multi-platform query | "Weibo and Douyin hot search", "Douyin, Bilibili, Zhihu" | Hot searches from multiple platforms at once |
| Historical hot search | "Yesterday's hot ranking", "yesterday's trends" | Hot search data for the specified date |
| Full ranking | "Show Weibo full ranking" | All 50 hot searches for that platform |
| Daily subscription | "Subscribe to daily push" | Create a daily scheduled push task |
Sample output
🔥 Cross-platform hot search ranking (by platform)
📅 Time range: Hourly updates; hot items listed from 2026-05-21 00:00 to 2026-05-21 16:00
📊 Platforms: Baidu, Weibo, Douyin, Bilibili, Kuaishou, Zhihu, Toutiao
---
Douyin hot search
| Rank | Hot search | Heat |
|---|---|---|
| 1 | Hot video topic 1 | 21.56M |
| 2 | Hot video topic 2 | 18.76M |
| ... | ... | ... |
| 10 | Hot video topic 10 | 6.78M |
💡 40 more entries not shown. Reply "Show Douyin full ranking" to view all.
Baidu hot search
| Rank | Hot search | Heat |
|---|---|---|
| 1 | 2026 gaokao essay topics announced | 9.86M |
| 2 | Celebrity relationship announcement | 8.75M |
| 3 | Fuel price adjustment tonight | 6.54M |
| 4 | Weather alert issued | 5.43M |
| ... | ... | ... |
| 10 | Today's stock market | 2.34M |
💡 40 more entries not shown. Reply "Show Baidu full ranking" to view all.
---
Weibo hot search
| Rank | Hot search | Heat |
|---|---|---|
| 1 | Hot topic 1 | 12.34M |
| 2 | Hot topic 2 | 9.87M |
| 3 | Hot topic 3 | 8.76M |
| ... | ... | ... |
| 10 | Hot topic 10 | 4.56M |
💡 40 more entries not shown. Reply "Show Weibo full ranking" to view all.
---
Bilibili hot search
| Rank | Hot search | Heat |
|---|---|---|
| 1 | Hot video 1 | 5.67M |
| 2 | Hot video 2 | 4.32M |
| ... | ... | ... |
| 10 | Hot video 10 | 1.23M |
💡 40 more entries not shown. Reply "Show Bilibili full ranking" to view all.
---
📬 Subscription push:
- Reply "Subscribe to daily push" for scheduled daily hot ranking updates
- Reply "Subscribe to weekly push" for scheduled weekly hot summaries
---
Single-platform query example
User says "Weibo hot search":
Weibo hot search
📅 Time range: Hourly updates; hot items listed from 2026-05-21 15:00 to 2026-05-21 16:00
📊 Platforms: Weibo
| Rank | Hot search | Heat |
|---|---|---|
| 1 | Hot topic 1 | 12.34M |
| 2 | Hot topic 2 | 9.87M |
| ... | ... | ... |
| 50 | Hot topic 50 | 890K |
---
Keyword filter example
User says "Show me sports-related hot searches":
Sports hot search
📅 Time range: Hourly updates; hot items listed from 2026-05-21 00:00 to 2026-05-21 16:00
📊 Keyword: Sports
| Rank | Hot search | Platform | Heat |
|---|---|---|---|
| 1 | U20 women's football China vs Japan | 12.34M | |
| 2 | NBA playoff updates | Douyin | 9.87M |
| 3 | Champions League final preview | Bilibili | 8.76M |
| ... | ... | ... | ... |
---
Use Cases
| Scenario | Role | Example question | Benefit |
|---|---|---|---|
| Scan all platforms | Content creator | "What's trending today across platforms?" | Browse 7 platforms at once for topic inspiration |
| Single-platform focus | Operator | "What's on Weibo hot search?" | Focus analysis on one platform's trends |
| Keyword research | Topic planner | "Search workplace-related hot searches" | Precisely match content direction |
| Multi-platform compare | Data analyst | "How do Douyin and Weibo trends differ?" | Compare hot topic differences across platforms |
| Historical lookback | Competitor intel | "Check yesterday's hot searches" | Analyze historical hot search performance |
| Full ranking view | Market research | "Show Bilibili full hot search ranking" | Get all 50 hot searches for that platform |
| Scheduled tracking | Operator | "Push hot searches to me every morning" | Automated tracking of trends across platforms |
---
Important data notes
Data notes
- Platforms covered: 7 (Douyin, Weibo, Bilibili, Kuaishou, Zhihu, Toutiao, Baidu)
- Update frequency: Hourly; not real-time
- Data range: Look back up to 30 days; up to 50 hot searches per platform
全网热点追踪 / trending-hub
简介
帮你把抖音、微博、B 站、快手、知乎、头条、百度等 7 个平台的热搜聚合在一起,省得一个个平台去看。
核心价值
一键获取 7 大平台热搜数据,小时级更新。按平台分类独立展示,每个平台最多 50 条热搜,支持按关键词/平台筛选,告别逐平台查看的痛苦。
适用对象
- 🔍 竞品监控 — 查看特定平台热搜,了解竞争对手动态
- 🎯 选题调研 — 按关键词筛选相关热搜,快速匹配选题方向
- 📊 数据分析 — 获取全平台原始热搜数据,进行深度分析
- 📰 舆情追踪 — 监控特定事件在各平台的热搜表现 ---
核心功能
- 全平台热搜展示:7 大平台热搜独立展示,每个平台最多 50 条
- 多平台组合查询:支持查询单个和多个指定平台热搜
- 关键词精准筛选:支持按关键词筛选相关热搜
- 多时间范围查询:支持实时、今日、昨日、本周等多种时间范围
- 完整榜单查看:每个平台可查看全部 50 条热搜
- 订阅推送服务:定时推送最新热榜/昨日热榜
---
密钥获取与安全说明
- 本技能需要使用环境变量:
REDFOX_API_KEY。 REDFOX_API_KEY由 红狐 hub (https://redfox.hk)提供。- 请前往 红狐 hub 注册账号,获取
REDFOX_API_KEY。 - 配置设备环境变量
REDFOX_API_KEY后使用本技能。 - 在提供密钥前,请先确认密钥来源、可用范围、有效期及是否支持重置/撤销。
- 禁止在代码、提示词、日志或输出文件中硬编码/明文暴露密钥。
---
使用指南
常用说法速查
| 意图 | 示例话术 | 效果 |
|---|---|---|
| 查看全平台热搜 | "热点榜"、"热榜"、"全平台热搜" | 展示 7 大平台各 TOP10 热搜 |
| 关键词筛选 | "帮我看看体育相关的热搜" | 只展示含关键词的热搜 |
| 只看特定平台 | "微博热搜"、"抖音热点"、"B 站热搜" | 只展示指定平台热搜 |
| 多平台组合查询 | "微博和抖音热搜"、"抖音、B 站、知乎热点" | 同时展示多个平台热搜 |
| 查历史热搜 | "昨日热榜"、"昨天的热搜" | 查看指定日期的热搜数据 |
| 查看完整榜单 | "查看微博完整榜单" | 输出该平台全部 50 条热搜 |
| 订阅每日推送 | "订阅每日推送" | 创建每日定时推送任务 |
输出示例
🔥 全网热搜榜(按平台分类)
📅 统计时间: 小时级更新,热点上榜时间为 2026-05-21 00:00 至 2026-05-21 16:00
📊 覆盖平台: 百度、微博、抖音、B 站、快手、知乎、头条
---
抖音热搜
| 排名 | 热搜 | 热度 |
|---|---|---|
| 1 | 热门视频话题 1 | 2156 万 |
| 2 | 热门视频话题 2 | 1876 万 |
| ... | ... | ... |
| 10 | 热门视频话题 10 | 678 万 |
💡 该平台还有 40 条数据未展示,回复「查看抖音完整榜单」可查看全部数据。
百度热搜
| 排名 | 热搜 | 热度 |
|---|---|---|
| 1 | 2026 年高考作文题目公布 | 986 万 |
| 2 | 某明星官宣恋情 | 875 万 |
| 3 | 油价今晚调整 | 654 万 |
| 4 | 天气预警发布 | 543 万 |
| ... | ... | ... |
| 10 | 今日股市行情 | 234 万 |
💡 该平台还有 40 条数据未展示,回复「查看百度完整榜单」可查看全部数据。
---
微博热搜
| 排名 | 热搜 | 热度 |
|---|---|---|
| 1 | 热搜话题 1 | 1234 万 |
| 2 | 热搜话题 2 | 987 万 |
| 3 | 热搜话题 3 | 876 万 |
| ... | ... | ... |
| 10 | 热搜话题 10 | 456 万 |
💡 该平台还有 40 条数据未展示,回复「查看微博完整榜单」可查看全部数据。
---
B 站热搜
| 排名 | 热搜 | 热度 |
|---|---|---|
| 1 | 热门视频 1 | 567 万 |
| 2 | 热门视频 2 | 432 万 |
| ... | ... | ... |
| 10 | 热门视频 10 | 123 万 |
💡 该平台还有 40 条数据未展示,回复「查看 B 站完整榜单」可查看全部数据。
---
📬 订阅推送:
- 回复「订阅每日推送」,每天定时推送最新热榜
- 回复「订阅每周推送」,每周定时推送热门汇总
---
特定平台查询示例
用户说"微博热搜":
微博热搜
📅 统计时间: 小时级更新,热点上榜时间为 2026-05-21 15:00 至 2026-05-21 16:00
📊 覆盖平台: 微博
| 排名 | 热搜 | 热度 |
|---|---|---|
| 1 | 热搜话题 1 | 1234 万 |
| 2 | 热搜话题 2 | 987 万 |
| ... | ... | ... |
| 50 | 热搜话题 50 | 89 万 |
---
关键词筛选示例
用户说"帮我看看体育相关的热搜":
体育热搜
📅 统计时间: 小时级更新,热点上榜时间为 2026-05-21 00:00 至 2026-05-21 16:00
📊 关键词: 体育
| 排名 | 热搜 | 平台 | 热度 |
|---|---|---|---|
| 1 | U20 女足中日对决 | 微博 | 1234 万 |
| 2 | NBA 季后赛战况 | 抖音 | 987 万 |
| 3 | 欧冠决赛预告 | B 站 | 876 万 |
| ... | ... | ... | ... |
---
使用场景
| 场景 | 角色 | 示例问法 | 收益 |
|---|---|---|---|
| 全平台扫榜 | 内容创作者 | "看看今天各平台有什么热搜" | 一键浏览 7 大平台热搜,找选题灵感 |
| 特定平台分析 | 运营人员 | "看看微博热搜有什么" | 专注分析单一平台热点 |
| 关键词调研 | 选题策划 | "搜索职场相关的热搜" | 精准匹配选题方向 |
| 多平台对比 | 数据分析师 | "抖音和微博热搜有什么差异" | 对比不同平台热点差异 |
| 历史数据回溯 | 竞品分析 | "查一下昨天的热搜" | 分析历史热搜表现 |
| 完整榜单查看 | 市场调研 | "查看 B 站完整热搜榜" | 获取该平台全部 50 条热搜 |
| 定时追踪 | 运营人员 | "每天早上给我推送热搜" | 自动化追踪各平台热点 |
---
重要数据说明
数据说明
- 覆盖平台:7 大平台(抖音、微博、B 站、快手、知乎、头条、百度)
- 数据更新:小时级更新,非实时更新
- 数据范围:支持回溯近 30 天热搜,每个平台最多 50 条热搜数据
指令列表
本文档列出全平台聚合热点榜支持的所有用户指令。
一、查询类指令
1.1 查询最新热点
| 指令 | 说明 |
|---|---|
| 热点榜 | 查询当前最新热点榜(前一个完整小时) |
| 今日热点 | 查询今日0:00到当前时间整点的热点榜 |
| 全网热点榜 | 查询当前最新热点榜(前一个完整小时) |
| 最新热榜 | 查询当前最新热点榜(前一个完整小时) |
输出内容:
- 📅 统计时间: 小时级更新,热点上榜时间为{start_time}至{end_time}
- 📊 覆盖平台: {实际有数据的平台列表}
- 各平台TOP10热点表格(百度、知乎、微博、抖音、B站、快手、头条)
- 全网热点小总结
- 查看更多引导
- 订阅推送引导
---
1.2 查询昨日热榜
| 指令 | 说明 |
|---|---|
| 昨日热榜 | 查询昨日0:00到24:00的热点榜 |
| 昨天的热点 | 查询昨日热点榜 |
| 昨天热榜 | 查询昨日热点榜 |
输出内容:
- 📅 统计时间: 小时级更新,热点上榜时间为昨日00:00至24:00
- 📊 覆盖平台: {实际有数据的平台列表}
- 各平台TOP10热点表格
- 全网热点小总结
- 查看更多引导
- 订阅推送引导
---
1.3 查询本周热点
| 指令 | 说明 |
|---|---|
| 本周热榜 | 查询本周一0:00到当前时间整点的热点榜 |
| 本周热点 | 查询本周热点榜 |
| 这周热榜 | 查询本周热点榜 |
输出内容:
- 📅 统计时间: 小时级更新,热点上榜时间为本周一00:00至{当前时间}
- 📊 覆盖平台: {实际有数据的平台列表}
- 各平台TOP10热点表格
- 全网热点小总结
- 查看更多引导
- 订阅推送引导
本周时间计算规则:
- 本周一 = 今天日期 - (今天星期几 - 1)天
- 示例:今天是2026-05-09(周六,星期六),本周一 = 2026-05-09 - 5天 = 2026-05-04
- 错误示例:今天是2026-05-09(周六),本周一 = 2026-05-03(往前多算了一天)
---
1.4 查询特定平台热榜
| 指令 | 说明 |
|---|---|
| 百度热榜 | 查询百度平台的热点榜 |
| 微博热榜 | 查询微博平台的热点榜 |
| 抖音热榜 | 查询抖音平台的热点榜 |
| B站热榜 | 查询B站平台的热点榜 |
| 快手热榜 | 查询快手平台的热点榜 |
| 知乎热榜 | 查询知乎平台的热点榜 |
| 头条热榜 | 查询头条平台的热点榜 |
输出内容:
- 📅 统计时间: 小时级更新,热点上榜时间为{start_time}至{end_time}
- 📊 覆盖平台: {平台名称}
- 该平台完整50条热点数据
- 订阅推送引导
---
1.4 关键词搜索热点
| 指令 | 说明 |
|---|---|
| 搜体育热点 | 搜索"体育"相关热点(自动泛化为体育、足球、篮球等10个关键词) |
| 搜明星热点 | 搜索"明星"相关热点(自动泛化为明星、演员、歌手等) |
| 搜苏超 | 搜索"苏超"相关热点(精确词,不泛化) |
关键词泛化策略:
- 大词(如"体育"、"娱乐"、"科技"):自动扩展为10个泛化词
- 精确词(如"苏超"、"某明星名字"):直接使用原词搜索
- 支持泛化的大类:体育、娱乐、科技、财经、社会、游戏、汽车、美食、旅游、时尚等
输出内容:
- 📅 统计时间: 小时级更新,热点上榜时间为{start_time}至{end_time}
- 📊 覆盖平台: {实际有数据的平台列表}
- 匹配关键词的热点数据
- 订阅推送引导
---
二、查看更多指令
| 指令 | 说明 |
|---|---|
| 查看百度完整榜单 | 查看百度平台完整50条热点 |
| 查看知乎完整榜单 | 查看知乎平台完整50条热点 |
| 查看微博完整榜单 | 查看微博平台完整50条热点 |
| 查看抖音完整榜单 | 查看抖音平台完整50条热点 |
| 查看B站完整榜单 | 查看B站平台完整50条热点 |
| 查看快手完整榜单 | 查看快手平台完整50条热点 |
| 查看头条完整榜单 | 查看头条平台完整50条热点 |
输出内容:
- 📅 统计时间: 小时级更新,热点上榜时间为{start_time}至{end_time}
- 📊 覆盖平台: {平台名称}
- 该平台完整50条热点表格
- 订阅推送引导
---
三、订阅推送指令
| 指令 | 说明 |
|---|---|
| 订阅每日推送 | 每天定时推送最新热榜 |
| 订阅每周推送 | 每周定时推送热门汇总 |
推送内容:
- 精简版TOP热点表格
- 全网热点小总结
- 查看详情引导
输出模板参考
本文档包含全平台聚合热点榜的所有输出模板,供执行时参考。
一、主输出模板(按平台分类)
【重要说明】
- 必须按平台分类输出,每个平台最多展示TOP10热点
- 平台顺序:百度 → 知乎 → 微博 → 抖音 → B站 → 快手 → 头条
- 每个平台的热点按热度值降序排列
- 平台展示格式:二级标题为"{平台名}热点"(如"百度热点"、"知乎热点")
【智能输出规则】 1. 如果某平台没有数据(hotspots为空或不存在),则完全跳过该平台,不展示标题和空表格 2. 如果某平台数据少于10条,则展示实际数量(如只有5条就展示5条) 3. 查看更多引导根据实际剩余数据动态生成:
- 数据≤10条:不显示查看更多引导
- 数据>10条:显示"💡 该平台还有{N}条数据未展示,回复「查看{平台名}完整榜单」可查看全部数据。"
# 🔥 全网热点榜(按平台分类)
> **📅 统计时间:** 小时级更新,热点上榜时间为{start_time}至{end_time}
> **📊 覆盖平台:** {实际有数据的平台列表}
---
## 百度热点
| 排名 | 热点 | 热度 |
|:---:|------|:---:|
| 1 | [{热点标题}]({url}) | {热度}万 |
| 2 | [{热点标题}]({url}) | {热度}万 |
| 3 | [{热点标题}]({url}) | {热度}万 |
| 4 | [{热点标题}]({url}) | {热度}万 |
| 5 | [{热点标题}]({url}) | {热度}万 |
| 6 | [{热点标题}]({url}) | {热度}万 |
| 7 | [{热点标题}]({url}) | {热度}万 |
| 8 | [{热点标题}]({url}) | {热度}万 |
| 9 | [{热点标题}]({url}) | {热度}万 |
| 10 | [{热点标题}]({url}) | {热度}万 |
💡 该平台还有40条数据未展示,回复「查看百度完整榜单」可查看全部数据。
---
## 知乎热点
| 排名 | 热点 | 热度 |
|:---:|------|:---:|
| 1 | [{热点标题}]({url}) | {热度}万 |
| 2 | [{热点标题}]({url}) | {热度}万 |
| 3 | [{热点标题}]({url}) | {热度}万 |
| 4 | [{热点标题}]({url}) | {热度}万 |
| 5 | [{热点标题}]({url}) | {热度}万 |
{该平台只有5条数据,不显示查看更多引导}
---
## 微博热点
| 排名 | 热点 | 热度 |
|:---:|------|:---:|
| 1 | [{热点标题}]({url}) | {热度}万 |
| 2 | [{热点标题}]({url}) | {热度}万 |
| ... | ... | ... |
| 10 | [{热点标题}]({url}) | {热度}万 |
💡 该平台还有35条数据未展示,回复「查看微博完整榜单」可查看全部数据。
---
{如果某平台无数据,则完全跳过,不展示任何内容}
---
## 📊 全网热点小总结
**今日最热**:{热度最高的热点标题}({热度}万,来自{平台})
**跨平台热度王**:{出现在最多平台的热点标题}(覆盖{N}个平台)
**上升最快**:{热度增长最快的热点标题}
**值得关注**:{智能体根据热度、平台覆盖、趋势综合判断的热点}
---
📬 **订阅推送**:
- 回复「订阅每日推送」,每天定时推送最新热榜
- 回复「订阅每周推送」,每周定时推送热门汇总二、平台完整榜单模板
当用户请求查看某平台完整榜单时使用:
# 百度热点完整榜单
> **📅 统计时间:** 小时级更新,热点上榜时间为{start_time}至{end_time}
> **📊 覆盖平台:** {平台名称}
| 排名 | 热点 | 热度 |
|:---:|------|:---:|
| 1 | [{热点标题}]({url}) | {热度}万 |
| 2 | [{热点标题}]({url}) | {热度}万 |
| 3 | [{热点标题}]({url}) | {热度}万 |
| ... | ... | ... |
| {实际总数} | [{热点标题}]({url}) | {热度}万 |
---
📬 **订阅推送**:回复「订阅每日推送」或「订阅每周推送」,定期获取热榜更新三、订阅推送模板
每日推送格式
# 📊 今日热点榜
> **📅 统计时间:** 小时级更新,热点上榜时间为{start_time}至{end_time}
> **📊 覆盖平台:** {实际有数据的平台列表}
## 🔥 全网TOP3
| 排名 | 热点 | 热度 | 来源平台 |
|:---:|------|:---:|:---:|
| 1 | {热点标题} | {热度}万 | {平台} |
| 2 | {热点标题} | {热度}万 | {平台} |
| 3 | {热点标题} | {热度}万 | {平台} |
## 📈 平台热点速览
**百度TOP3**:{热点1} | {热点2} | {热点3}
**知乎TOP3**:{热点1} | {热点2} | {热点3}
**微博TOP3**:{热点1} | {热点2} | {热点3}
## 💡 今日看点
{智能体总结的今日热点亮点,100字以内}
---
查看完整榜单请回复「热点榜」每周推送格式
# 📊 本周热点汇总
> **📅 统计时间:** 小时级更新,热点上榜时间为{开始日期}至{结束日期}
> **📊 覆盖平台:** {实际有数据的平台列表}
## 🔥 本周最热TOP5
| 排名 | 热点 | 平均热度 | 覆盖平台 |
|:---:|------|:---:|:---:|
| 1 | {热点标题} | {热度}万 | {N}个平台 |
| 2 | {热点标题} | {热度}万 | {N}个平台 |
| ... | ... | ... | ... |
## 📈 本周趋势
**持续在榜**:{连续多天在榜的热点}
**本周新秀**:{本周新上榜的热门话题}
**本周焦点**:{本周最受关注的事件}
---
查看更多热点请回复「热点榜」四、输出要求
1. 智能输出逻辑
- 跳过空平台:如果某平台没有数据,则完全不展示该平台
- 动态展示数量:如果某平台数据少于10条,则展示实际数量
- 动态查看更多:
- 数据≤10条:不显示查看更多引导
- 数据>10条:计算剩余条数并显示对应提示
2. 平台展示格式
- 二级标题:平台名(如"百度"、"知乎")
- 三级标题:统一为"热点"
- 平台顺序:百度 → 知乎 → 微博 → 抖音 → B站 → 快手 → 头条
3. 统计时间格式
- 格式:📅 统计时间: 小时级更新,热点上榜时间为{start_time}至{end_time}
- 示例:📅 统计时间: 小时级更新,热点上榜时间为2026-04-16 16:00至2026-04-16 17:00
- 使用查询的实际开始和结束时间
- "统计时间"标题必须保留并加粗
- 必须包含"小时级更新"字样
4. 热度值格式
- 必须为"数字+万"格式(如"938万")
- 换算规则:
hotCount // 10000(整数除法) - 禁止包含其他字符(如"938万4"、"热度938万")
5. 热点标题格式
- 有URL:显示为超链接
[{标题}]({url}) - 无URL:仅显示文本
5. 交互引导
- 每个平台根据实际数据量决定是否显示查看更多引导
- 如果有多个平台有剩余数据,在最后一个平台后统一显示订阅推送引导
- 订阅选项:每日推送、每周推送
热度趋势预测逻辑
本文档详细说明热度趋势预测的判断规则和计算方法。
预测维度
| 维度 | 权重 | 判断依据 | 数据字段 |
|---|---|---|---|
| 热度值 | 35% | maxHotScore值越高热度越高 | maxHotScore |
| 平台覆盖 | 35% | platName分布,平台数越多越稳定 | platName计数 |
| 排名表现 | 30% | maxPosition值越小排名越好 | maxPosition |
话题类型预测规则
突发事件(地震、事故等)
热度曲线:快速上升→急速下降
生命周期:12-24小时
建议:第一时间跟进,延后价值低
预测特征:
- 热词包含:地震、事故、灾难、突发、爆炸、火灾等
- 初期热度极高,但衰减速度快
- 覆盖平台广但持续时间短
---
娱乐八卦(明星、恋情等)
热度曲线:快速上升→缓慢下降
生命周期:24-48小时
建议:12小时内跟进效果最佳
预测特征:
- 热词包含:明星、恋情、绯闻、八卦、曝光、官宣等
- 热度上升快,下降相对缓慢
- 舆论讨论度高,容易产生二次发酵
---
社会民生(政策、假期等)
热度曲线:缓慢上升→稳定→缓慢下降
生命周期:48-72小时
建议:有较长跟进窗口
预测特征:
- 热词包含:政策、假期、法规、民生、教育、医疗等
- 热度增长平稳,持续时间较长
- 影响面广,容易引发深度讨论
---
行业动态(产品、价格等)
热度曲线:中等速度上升→中等速度下降
生命周期:36-72小时
建议:可做深度分析内容
预测特征:
- 热词包含:发布、产品、价格、行业、技术、创新等
- 热度变化相对温和
- 适合专业深度内容创作
---
热度值分析(新增)
| 热度区间 | 热度等级 | 趋势预测 | 行动建议 |
|---|---|---|---|
| <100万 | 低热度 | 可能即将退出榜单 | 观望为主 |
| 100-500万 | 中等热度 | 热度相对稳定 | 可适度跟进 |
| 500-1000万 | 高热度 | 热度持续强劲 | 值得重点跟进 |
| >1000万 | 爆款热度 | 热度爆发状态 | 必须优先跟进 |
热度计算说明:
- maxHotScore字段直接反映热度值
- 热度值需换算为万单位展示(如8500000 → 850万)
- 多平台热度值累加可评估全网总热度
平台覆盖分析
| 平台数 | 热度稳定性 | 预测置信度 | 行动建议 |
|---|---|---|---|
| 1-2个 | 低 | 低 | 仅限特定平台 |
| 3-4个 | 中 | 中 | 可适度跟进 |
| 5-6个 | 高 | 高 | 值得重点跟进 |
| 7-8个 | 极高 | 极高 | 必须优先跟进 |
排名表现分析(基于maxPosition)
| 排名区间 | 表现 | 趋势预测 | 行动建议 |
|---|---|---|---|
| TOP 1-3 | 榜首级 | 热度巅峰 | 全力跟进 |
| TOP 4-10 | 头部 | 热度强劲 | 重点跟进 |
| TOP 11-30 | 中部 | 热度稳定 | 适度跟进 |
| TOP 31-50 | 尾部 | 热度较弱 | 观望评估 |
排名说明:
- maxPosition越小排名越好
- 多平台排名加权可评估全网表现
综合预测输出格式
首页热词快览
首页热词快览分析中,热度趋势预测输出格式:
📈 **热度趋势预测**
**综合预测**:{整体趋势描述},建议{内容建议}预测准确性说明
- 基于历史数据规律的统计预测
- 实际情况可能受突发事件影响
- 建议结合实时数据动态调整
- 话题类型判断基于关键词匹配,可能存在误判
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
热点数据获取脚本
从热点接口获取各平台热点数据,支持时间范围查询和关键词筛选
"""
import argparse
import json
import os
import ssl
import sys
import urllib.request
from datetime import datetime, timedelta
from typing import Dict, List, Optional
import tempfile
# 平台代码映射:平台代码 -> 平台名称
PLATFORM_MAP = {
"wb": "微博",
"dy": "抖音",
"bz": "B站",
"ks": "快手",
"zh": "知乎",
"tt": "头条",
"bd": "百度"
}
# 平台代码到接口枚举值的映射
PLATFORM_CODE_MAP = {
"ks": 1, # 快手
"dy": 2, # 抖音
"wb": 5, # 微博
"bd": 7, # 百度
"bz": 8, # B站
"zh": 9, # 知乎
"tt": 10 # 头条
}
# 关键词泛化映射:大词 -> 泛化词列表
KEYWORD_EXPANSION_MAP = {
"体育": ["体育", "足球", "篮球", "运动", "健身", "奥运", "世界杯", "NBA", "CBA", "乒乓球"],
"娱乐": ["娱乐", "明星", "电影", "电视剧", "综艺", "音乐", "八卦"],
"科技": ["科技", "互联网", "手机", "电脑", "AI", "人工智能", "数码"],
"财经": ["财经", "股市", "基金", "理财", "经济", "金融"],
"社会": ["社会", "民生", "新闻", "热点", "事件"],
"游戏": ["游戏", "电竞", "网游", "手游", "王者荣耀", "英雄联盟"],
"汽车": ["汽车", "车", "新能源", "电动车", "特斯拉", "比亚迪"],
"美食": ["美食", "吃", "餐厅", "菜谱", "做饭"],
"旅游": ["旅游", "旅行", "景点", "攻略", "酒店"],
"时尚": ["时尚", "穿搭", "美妆", "护肤", "衣服"]
}
def expand_keywords(keyword: str) -> List[str]:
"""
对关键词进行泛化扩展
Args:
keyword: 用户输入的关键词
Returns:
扩展后的关键词列表
"""
# 首先检查是否为大词(优先匹配)
for big_word, expanded_words in KEYWORD_EXPANSION_MAP.items():
if keyword == big_word or big_word in keyword:
return expanded_words
# 精确词不扩展(长度<=2或包含特定字符)
if len(keyword) <= 2 or any(char in keyword for char in ["超", "联赛", "杯"]):
return [keyword]
# 默认不扩展
return [keyword]
def format_hot_count(hot_count: str) -> str:
"""
智能格式化热度值
Args:
hot_count: 原始热度值
Returns:
格式化后的热度值
"""
if not hot_count:
return "0"
# 如果已经包含单位(万、亿),直接返回
if "万" in hot_count or "亿" in hot_count:
return hot_count
# 尝试转换为数字
try:
num = int(hot_count)
# 转换为"数字+万"格式
wan = num // 10000
if wan > 0:
return f"{wan}万"
else:
return str(num)
except ValueError:
# 无法转换为数字,直接返回原值
return hot_count
def _get_api_key() -> str:
"""从当前环境变量获取 REDFOX_API_KEY"""
key = os.environ.get("REDFOX_API_KEY")
if not key:
raise SystemExit("❌ 未找到 REDFOX_API_KEY,请配置环境变量:export REDFOX_API_KEY=<你的apikey>")
return key
def fetch_hotspot_data(
source: str,
platforms: Optional[List[str]] = None,
keywords: Optional[List[str]] = None,
start_date: Optional[str] = None,
end_date: Optional[str] = None
) -> Dict:
"""
从接口获取热点数据
Args:
source: 数据来源
platforms: 平台代码列表(可选)
keywords: 关键词列表(可选)
start_date: 开始时间(可选)
end_date: 结束时间(可选)
Returns:
API返回的数据字典
"""
# API配置
api_url = "https://redfox.hk/story/api/hotSpot/getListByPlatformWithKeyword"
# 构建请求参数
params = {
"source": source
}
# 添加平台参数(数组)- 始终传入,即使为空数组
platform_enums = []
if platforms:
for p in platforms:
if p in PLATFORM_CODE_MAP:
platform_enums.append(PLATFORM_CODE_MAP[p])
else:
print(f"警告: 不支持的平台代码 {p}", file=sys.stderr)
params["platforms"] = platform_enums
# 添加关键词参数(数组)- 始终传入,即使为空数组
params["keywords"] = keywords if keywords else []
# 添加时间参数
if start_date:
params["startDate"] = start_date
if end_date:
params["endDate"] = end_date
# 获取 API Key
api_key = _get_api_key()
try:
# 发送请求(使用 urllib,跳过 SSL 验证)
body = json.dumps(params).encode("utf-8")
req = urllib.request.Request(
api_url,
data=body,
headers={
"Content-Type": "application/json",
"X-API-KEY": api_key
},
method="POST"
)
ctx = ssl.create_default_context()
ctx.check_hostname = False
ctx.verify_mode = ssl.CERT_NONE
with urllib.request.urlopen(req, timeout=30, context=ctx) as resp:
if resp.status != 200:
return {
"status": "error",
"message": f"HTTP请求失败: {resp.status}",
"data": None
}
raw = resp.read()
# 解析响应
result = json.loads(raw.decode("utf-8"))
# 接口返回code=2000表示成功
if result.get("code") == 2000:
return {
"status": "success",
"message": "数据获取成功",
"data": result.get("data", {})
}
else:
# 接口返回错误码
error_msg = result.get("msg") or result.get("message") or "接口返回错误"
return {
"status": "error",
"message": f"接口错误: {error_msg} (code: {result.get('code')})",
"data": None
}
except Exception as e:
err_msg = str(e)
if "timed out" in err_msg.lower():
return {"status": "error", "message": "请求超时", "data": None}
if "urlopen" in err_msg.lower() or "connection" in err_msg.lower():
return {"status": "error", "message": f"连接失败: {err_msg}", "data": None}
return {"status": "error", "message": f"请求异常: {err_msg}", "data": None}
def process_hotspot_data(data: Dict, platform_filter: Optional[List[str]] = None) -> Dict:
"""
处理热点数据
Args:
data: API返回的原始数据
platform_filter: 平台筛选列表
Returns:
处理后的数据
"""
result = {
"total": 0,
"platforms": {}
}
# 平台列表映射
platform_list_map = {
"bdList": "bd",
"bzList": "bz",
"dyList": "dy",
"ksList": "ks",
"ttList": "tt",
"wbList": "wb",
"zhList": "zh"
}
for list_key, platform_code in platform_list_map.items():
# 如果指定了平台筛选,跳过不在筛选列表中的平台
if platform_filter and platform_code not in platform_filter:
continue
hotspots = data.get(list_key, [])
if hotspots:
processed_hotspots = []
for hotspot in hotspots:
processed = {
"title": hotspot.get("title", ""),
"url": hotspot.get("url", ""),
"hotCount": format_hot_count(hotspot.get("hotCount", "0")),
"index": hotspot.get("index", 0),
"gmtCreate": hotspot.get("gmtCreate", ""),
"platCode": platform_code,
"platName": PLATFORM_MAP.get(platform_code, platform_code)
}
processed_hotspots.append(processed)
result["platforms"][platform_code] = {
"name": PLATFORM_MAP.get(platform_code, platform_code),
"count": len(processed_hotspots),
"hotspots": processed_hotspots
}
result["total"] += len(processed_hotspots)
return result
def output_compact(result: Dict) -> str:
"""
输出极简格式(避免数据被截断)
末尾附带完整数据文件路径,避免重复调用接口
"""
output_lines = []
# 元信息
output_lines.append(f"status: {result['status']}")
output_lines.append(f"total: {result['total']}")
output_lines.append(f"platforms: {len(result['platforms'])}")
output_lines.append("")
# 各平台概览(TOP3)
for platform_code, platform_data in result["platforms"].items():
output_lines.append(f"[{platform_data['name']}] {platform_data['count']}条")
for hotspot in platform_data["hotspots"][:3]:
output_lines.append(f" {hotspot['index']}. {hotspot['title']} - {hotspot['hotCount']}")
output_lines.append("")
# 附带完整数据文件路径(一次调用搞定,禁止二次调用浪费token)
if "dataFile" in result:
output_lines.append(f"dataFile: {result['dataFile']}")
return "\n".join(output_lines)
def output_json(result: Dict) -> str:
"""
输出JSON格式
"""
return json.dumps(result, ensure_ascii=False, indent=2)
def output_markdown(result: Dict) -> str:
"""
输出Markdown表格格式(只输出TOP10)
"""
output_lines = []
for platform_code, platform_data in result["platforms"].items():
output_lines.append(f"## {platform_data['name']}")
output_lines.append("")
output_lines.append("|排名|标题|热度|")
output_lines.append("|---|---|---|")
for hotspot in platform_data["hotspots"][:10]:
title = hotspot["title"]
url = hotspot["url"]
hot_count = hotspot["hotCount"]
index = hotspot["index"]
# Markdown超链接格式
title_link = f"[{title}]({url})" if url else title
output_lines.append(f"|{index}|{title_link}|{hot_count}|")
output_lines.append("")
return "\n".join(output_lines)
def main():
parser = argparse.ArgumentParser(description="获取各平台热点数据")
parser.add_argument(
"--source",
default="全平台热点事件-GitHub",
help="数据来源(默认:全平台热点事件)"
)
parser.add_argument(
"--platforms",
help="平台代码列表,逗号分隔(如:wb,dy,bz)"
)
parser.add_argument(
"--keywords",
help="关键词列表,逗号分隔(如:体育,足球)"
)
parser.add_argument(
"--expand-keywords",
action="store_true",
help="启用关键词泛化扩展"
)
parser.add_argument(
"--start-date",
help="开始时间(格式:YYYY-MM-DD HH:MM:SS)"
)
parser.add_argument(
"--end-date",
help="结束时间(格式:YYYY-MM-DD HH:MM:SS)"
)
parser.add_argument(
"--output",
choices=["compact", "json", "markdown"],
default="compact",
help="输出格式(默认:compact)"
)
args = parser.parse_args()
# 解析平台参数
platforms = None
if args.platforms:
platforms = [p.strip() for p in args.platforms.split(",")]
# 解析关键词参数
keywords = None
if args.keywords:
raw_keywords = [k.strip() for k in args.keywords.split(",")]
if args.expand_keywords:
# 对每个关键词进行扩展
expanded = []
for k in raw_keywords:
expanded.extend(expand_keywords(k))
keywords = list(dict.fromkeys(expanded)) # 去重保持顺序
else:
keywords = raw_keywords
# 计算默认时间范围(前一个完整小时)
if not args.start_date or not args.end_date:
now = datetime.now()
current_hour = now.replace(minute=0, second=0, microsecond=0)
start_time = current_hour - timedelta(hours=1)
end_time = current_hour
if not args.start_date:
args.start_date = start_time.strftime("%Y-%m-%d %H:%M:%S")
if not args.end_date:
args.end_date = end_time.strftime("%Y-%m-%d %H:%M:%S")
# 获取数据
api_result = fetch_hotspot_data(
source=args.source,
platforms=platforms,
keywords=keywords,
start_date=args.start_date,
end_date=args.end_date
)
if api_result["status"] == "error":
print(json.dumps(api_result, ensure_ascii=False))
sys.exit(1)
# 处理数据
result = process_hotspot_data(api_result["data"], platforms)
# 添加元信息
result["status"] = "success"
result["source"] = args.source
result["startDate"] = args.start_date
result["endDate"] = args.end_date
if keywords:
result["keywords"] = keywords
# 保存完整数据到临时文件
temp_file = tempfile.mktemp(prefix="platforms-hotspot-data-", suffix=".json")
with open(temp_file, "w", encoding="utf-8") as f:
json.dump(result, f, ensure_ascii=False, indent=2)
result["dataFile"] = temp_file
# 输出结果
if args.output == "compact":
print(output_compact(result))
elif args.output == "json":
print(output_json(result))
elif args.output == "markdown":
print(output_markdown(result))
if __name__ == "__main__":
main()