Skill: redfox-data/trending-hub-top10 (version 1.0.2)

--- name: trending-hub-top10 description: 基于每小时收录的抖音、微博、B站、快手、知乎、头条、百度等7大平台热点数据，聚合全网最热TOP10热点。支持回溯近7天热点。不支持具体热点的查询。 dependency: python: - python-dateutil==2.8.2 system: - mkdir -p output --- # 全网聚合热点榜 ## 任务目标 - 本 Skill 用于：聚合抖音、微博、B站、快手、知乎、头条、百度等多个平台的热点数据，提供跨平台热点分析和趋势预测 - 核心价值 解决内容创作者、市场运营者在热点追踪中的三大痛点: 热点分散难整合：无需逐个平台查看，一次聚合7大平台热榜 跨平台对比困难：自动识别同一事件在不同平台的讨论差异和热度表现，对热点进行快览分析 趋势判断模糊：基于热度值、上榜时长、平台覆盖等维度智能预测热点走势 订阅推送服务：定时推送最新热榜/昨日热榜 - 触发条件：用户查询"热点榜"、"今日热点"、"全网热点榜"、"昨日热榜"，请求"导出报告"，或订阅推送服务 - **不支持**：该技能不支持查询特定热词详情，仅提供全网热点榜聚合查询 核心能力 功能模块 能力描述 核心价值 🔍 全网热榜聚合 实时抓取7大平台热搜数据 一键获取全网热点，告别逐平台查看 🔗 跨平台事件识别 智能识别同一事件在不同平台的表述 自动归并相似话题，避免重复统计 📊 热度趋势预测 基于热度值、时长、平台覆盖预测走势 提前判断热点生命周期，把握创作窗口 📈 TOP10榜单提供 按综合热度排序输出TOP10热点 快速定位高价值选题 💬 跨平台讨论分析 展示不同平台的讨论焦点和差异 深度洞察舆论生态，精准定位受众 📄 HTML报告导出 生成美观的可视化报告 支持图片导出，便于分享存档 ⏰ 订阅推送服务 定时推送最新热榜/昨日热榜 持续追踪热点动态，不错过关键机会 ## 前置准备 - 依赖说明：scripts脚本依赖 python-dateutil 库 - 非标准文件准备：当前路径视为相对于Skill目录的父目录 ### 鉴权 #### 获取 API Key 请前往 [红狐hub](https://redfox.hk/settings/api-keys?source=clawhub) 获取API KEY #### 配置 API Key 方案1: 以OpenClaw为例，将REDFOX_API_KEY添加到~/.openclaw/openclaw.json中，部分内容如下： ```bash { "env": { "REDFOX_API_KEY": "ak_xxxx..." } } ``` 方案2: 终端配置 ```bash export REDFOX_API_KEY="ak_xxxx..." ``` ## 操作步骤 **重要原则：智能体完成数据分析并保存JSON后，直接生成HTML报告，不在对话中输出详细榜单。** - 标准流程： 1. 获取热点数据 — 脚本调用 - 脚本调用：`python scripts/fetch_hotspot.py --output json` - 返回JSON数据结构见下方"数据结构说明" 2. **智能体分析数据并保存JSON** — 智能体根据JSON数据进行热点事件识别、排序，保存结构化数据 - 执行热点事件识别（见下方"热点事件总结规则"） - 按热度值降序排列，取TOP10 - 将分析结果保存为 `structured_report.json`（格式见下方"结构化报告JSON格式"） - **discussions必须覆盖所有在榜平台**：`platforms` 列表中的每个平台都必须在 `discussions` 数组中有对应条目 3. **自动生成HTML报告** — JSON保存完成后立即执行，不询问用户 - 脚本调用：`python scripts/generate_html_report.py --input structured_report.json --output 热点榜报告.html` 4. **对话中输出简要信息** — 按顺序输出：标题 > 统计时间 > HTML报告 > 订阅推送服务询问 - 输出格式： ```markdown # 🔥 全网热点榜 > 📅 统计时间：{start_date} 至 {end_date} ⚡ **HTML报告已生成** • 点击下方下载HTML报告文件，可在浏览器中打开查看，支持导出图片 📬 **订阅推送服务** 想持续追踪热点动态？ 可以订阅最新热榜，向您推送前1小时的最新数据 或者订阅昨日热榜，一键获取全网热点 还支持您定制近30天任意时间段的数据~追热点快人一步 ``` - 可选分支： - 当用户需要趋势预测：智能体参考 [references/prediction-logic.md](references/prediction-logic.md) 生成趋势预测 - 当用户订阅推送：智能体按照订阅模板进行交互 ## 热点事件总结规则 **核心原则：完全忽略接口返回的keyword和分类，独立从所有标题中识别并归纳具体热点事件。** **【重要】必须执行以下步骤，不能跳过任何一步：** ### 识别流程（必须按顺序执行） **步骤1：收集所有标题** - 遍历API返回的 `hotspots` 数组 - 提取每条数据的 `title` 和 `platName` - 将所有标题放在一个列表中，忽略原有的keyword分组 **步骤2：识别具体事件** - 阅读每一条标题，判断哪些标题描述的是同一个事件 - 判断依据： - 相同主体（人名、地名、机构名、事件名） - 相同事件核心（比赛、发布会、案件、政策等） - 时间连续性（同一时间段的热点） **步骤3：归纳事件热词** - 为每个识别出的事件提炼一个简洁的热词（5-15个字） - 热词必须描述具体事件，不能是泛化概念 - ✅ 正确：U20女足中日对决、2026大学排名发布、德国留学生迷奸案 - ❌ 错误：中国相关热点、体育新闻、社会事件 **步骤4：按热度值排序** - 按热度值降序排列，取TOP10 ### 正确示例 **接口返回的原始数据（忽略keyword分组）**： ``` 抖音标题：["U20女足中国vs日本", "中国U20女足0:2日本", "2026软科中国大学排名发布"] 头条标题：["无缘决赛！U20女足中国0-2日本", "2026中国大学排名", "中国钨出口管制对日本影响"] 微博标题：["在德读硕中国小伙多次下药迷奸女友"] 知乎标题：["福特CEO称中国车进入美国市场我们就完蛋"] ``` **AI识别并归纳的事件**： | 排名 | 热词 | 平台数 | 词条数 | 热度值 | 综合热度 | | :--: | ---------------- | :----: | :----: | :----: | :------: | | 1 | U20女足中日对决 | 2 | 3 | 938万 | 2038万 | | 2 | 2026大学排名发布 | 2 | 2 | 442万 | 2442万 | | 3 | 德国留学生迷奸案 | 1 | 1 | 320万 | 1320万 | | 4 | 中国钨出口管制 | 1 | 1 | 280万 | 1280万 | | 5 | 福特CEO谈中国车 | 1 | 1 | 150万 | 1150万 | **注意**：原来5条标题被归纳为5个事件，而不是直接使用原标题作为热点名称。 ### 数据来源 直接读取 `hotspots` 数组中每个热点项的 `title`、`platName`、`url` 等字段。 ### URL跳转 每个热点项包含 `url` 字段，支持跳转到对应平台查看详情： - 有URL的热点：输出时可添加跳转链接 - 无URL的热点（url为空字符串）：不提供跳转 ## 数据结构说明 脚本返回的JSON数据结构如下，智能体需据此填充模板： ```json { "status": "success", "stat_time": "2026-04-16 08:30:00", "query_range": { "type": "realtime", "start_date": "2026-04-16 07:00:00", "end_date": "2026-04-16 08:00:00" }, "total_count": 50, "hotspots": [ { "hotId": [REDACTED_SECRET], "title": "匈牙利总理用"三个最"描述中国", "platName": "头条", "plat": 11, "url": "https://www.toutiao.com/trending/7628053353528033321/", "firstRankTime": "2026-04-15 21:00:00", "latestRankDate": "2026-04-16 00:00:00", "maxHotScore": 4427099, "maxPosition": 15, "topOfTheDayTime": "3", "source_keyword": "中国" }, { "hotId": [REDACTED_SECRET], "title": "中国U20女足0:2日本", "platName": "抖音", "plat": 10, "url": "https://www.douyin.com/search/中国U20女足0:2日本", "firstRankTime": "2026-04-16 00:00:00", "latestRankDate": "2026-04-16 00:00:00", "maxHotScore": 9384468, "maxPosition": 8, "topOfTheDayTime": "14", "source_keyword": "中国" } ] } ``` ### 字段说明 | 字段 | 含义 | 可分析维度 | | --------------- | ------------------------------ | ------------------------ | | hotId | 热点唯一ID | - | | title | 热点标题 | 事件识别、跨平台归并 | | platName | 平台名称（抖音、头条、微博等） | 平台覆盖分析 | | plat | 平台代码 | - | | url | 跳转链接 | 查看详情、跳转访问 | | firstRankTime | 首次上榜时间 | 热点发酵起点、时效性 | | latestRankDate | 最新上榜日期 | 热点是否仍在榜 | | maxHotScore | 最高热度值 | 热度排行、热度对比 | | maxPosition | 最高排名位置 | 热度峰值、排名变化 | | topOfTheDayTime | 榜单停留时长(小时) | 热度持续性、生命周期预测 | | source_keyword | 接口分组关键词 | 仅供参考，不用于输出 | ### 可分析维度 基于新增字段，可进行以下分析： 1. **热度排行**：按 `maxHotScore` 排序，展示热度最高的热点 2. **热度持续性**：根据 `topOfTheDayTime` 判断热点生命周期 - 停留<3小时：短期热点，快速衰减 - 停留3-10小时：中等持续 - 停留>10小时：长期热点，持续发酵 3. **排名表现**：`maxPosition` 越小说明热度峰值越高 4. **时效性判断**：对比 `firstRankTime` 和当前时间，判断热点新鲜度 5. **趋势预测**：结合热度值、停留时长、排名进行趋势判断 ### 结构化报告JSON格式 智能体完成分析后，将结果保存为 `structured_report.json`（内部中间文件，不展示给用户），供HTML报告脚本读取。 **关键原则**： 1. HTML报告脚本只负责模板渲染，不进行任何数据分析或事件识别 2. JSON中的数据必须与对话中输出的内容完全一致 3. 智能体在对话中输出什么，JSON就保存什么，HTML就渲染什么 ```json { "query_range": { "start_date": "2026-04-16 00:00:00", "end_date": "2026-04-16 08:00:00" }, "hotspots": [ { "rank": 1, "title": "归纳的事件热词", "hot_score": "938万", "platform_count": 4, "duration": "14h", "max_position": 3, "platforms": ["微博", "抖音", "头条", "快手"], "discussions": [ { "platform": "微博", "focus": "讨论焦点描述，不少于10个字", "topics": [ { "title": "原始标题1", "url": "https://..." }, { "title": "原始标题2", "url": "" } ] }, { "platform": "抖音", "focus": "讨论焦点描述", "topics": [{ "title": "原始标题3", "url": "https://..." }] } ], "prediction": "预测内容文字", "prediction_emoji": "🔥🔥🔥" } ] } ``` **字段说明**： | 字段 | 说明 | 要求 | |------|------|------| | title | 事件热词 | 与对话中TOP10表格的热点事件一致 | | hot_score | 热度值 | 格式为"数字+万"（如"938万"），禁止包含其他字符 | | platform_count | 上榜平台数 | 与对话中一致 | | duration | 持续时长 | 0h时填"刚上热搜"，否则填"Nh"，与对话中一致 | | max_position | 最高排名 | 数字，越小排名越高 | | platforms | 在榜平台列表 | 仅包含实际在榜的平台 | | discussions | 跨平台讨论差异 | **必须覆盖platforms中所有在榜平台**，每个平台一个条目，不可遗漏 | | discussions.focus | 讨论焦点 | 与对话中各平台讨论焦点文字一致 | | discussions.topics | 原始标题 | 2-3条，有url时填写，无url填空字符串 | | prediction | 综合预测内容 | 纯文字，不含🔥emoji | | prediction_emoji | 综合预测标题前的emoji | 必须与对话输出中综合预测标题前的🔥emoji完全一致：🔥🔥🔥/🔥🔥/🔥/📉 | ### 1. 获取热榜数据 #### 1.1 最新热榜（默认） 要求最新、当下等实时热榜时，自动查询当前时间前一个小时的数据： ```bash python scripts/fetch_hotspot.py ``` **实时查询规则**： - 自动计算当前时间的前一个小时作为查询范围 - 例如：当前时间为 `2026-04-16 08:30:00`，则查询 `2026-04-16 07:00:00` 到 `2026-04-16 08:00:00` 的数据 #### 1.2 历史热榜查询 支持查询昨天的热度峰值最高的热搜数据： ```bash # 查询昨日热榜（假设今天是2026-04-16） python scripts/fetch_hotspot.py --start-date "2026-04-15 00:00:00" --end-date "2026-04-16 00:00:00" ``` **日期范围规则**： - 时间格式为 `YYYY-MM-DD HH:MM:SS` - 日期范围是 **[start_date, end_date)** 左闭右开区间 - 例如：`--start-date "2026-04-01 00:00:00" --end-date "2026-04-02 00:00:00"` 查询的是4月1日当天的数据 - 例如：`--start-date "2026-04-09 00:00:00" --end-date "2026-04-16 00:00:00"` 查询的是4月9日至4月15日共7天的数据 **参数说明**： - `--start-date`：开始时间（包含），格式 `YYYY-MM-DD HH:MM:SS`，也可简写为 `YYYY-MM-DD`（自动补全为 00:00:00） - `--end-date`：结束时间（不包含），格式 `YYYY-MM-DD HH:MM:SS`，也可简写为 `YYYY-MM-DD`（自动补全为 00:00:00） - **最长查询范围：7天** #### 1.3 智能体判断逻辑 根据用户意图自动选择查询方式（假设今天日期为T，当前时间为T HH:MM:SS）： **今日热点查询**： - "今日热榜" / "今日热点" / "今天热榜" → 查询今日0:00到当前时间的整点 - 脚本调用：`python scripts/fetch_hotspot.py --start-date "T 00:00:00" --end-date "T {当前小时}:00:00"` - 示例：当前时间 `2026-04-16 08:30:00`，则查询 `--start-date "2026-04-16 00:00:00" --end-date "2026-04-16 08:00:00"` **最新热点查询**： - "最新热榜" / "最新热点" / "热榜" / "热点榜" → 查询当前时间前一小时 - 脚本调用：`python scripts/fetch_hotspot.py`--start-date "T {当前小时-1}:00:00" --end-date "T {当前小时}:00:00"` - 自动计算当前时间的前一个小时作为查询范围 - 示例：当前时间 `2026-04-16 08:30:00`，则查询 `2026-04-16 07:00:00` 到 `2026-04-16 08:00:00` **历史热点查询**： - "昨日热榜" / "昨天热榜" / "昨日热点" → `--start-date "T-1 00:00:00" --end-date "T 00:00:00"` - "近7天热榜" / "一周热榜" → `--start-date "T-7 00:00:00" --end-date "T 00:00:00"` - "X月X日热榜" → `--start-date "X月X日 00:00:00" --end-date "X月X日+1天 00:00:00"` **对比查询场景**： 当用户需要对比多天数据时，需**分别查询**多天的热榜，而非合并查询： - "对比昨天和今天的热榜" → 分别查询昨日热榜和今日热榜，输出两份数据进行对比 - "对比4月1日和4月2日的热榜" → 分别查询4月1日热榜和4月2日热榜，输出两份数据进行对比 **对比查询执行方式**： ```bash # 对比昨天和今天的热榜（假设今天是2026-04-16） python scripts/fetch_hotspot.py --start-date "2026-04-15 00:00:00" --end-date "2026-04-16 00:00:00" # 昨日 python scripts/fetch_hotspot.py --start-date "2026-04-16 00:00:00" --end-date "2026-04-17 00:00:00" # 今日实时 ``` ### 2. 输出处理流程 **核心原则：报告内容直接在对话中输出，输出结束后再调用脚本生成HTML报告文件。** #### 步骤一：获取数据 ```bash python scripts/fetch_hotspot.py --start-date "..." --end-date "..." > raw_data.json ``` #### 步骤二：对话中输出报告并同步保存JSON - 智能体读取JSON数据，完成热点事件识别、指标计算、趋势预测 - **直接在对话中输出完整报告**，同时将分析结果同步保存为 `structured_report.json`（内部中间文件，不展示给用户） - **discussions必须覆盖所有在榜平台**：`platforms` 列表中的每个平台都必须在 `discussions` 数组中有对应条目，不可遗漏 - 输出格式参考 [references/output-templates.md](references/output-templates.md) #### 步骤三：自动生成HTML报告 - 直接读取已保存的 `structured_report.json` 生成HTML，**不询问用户是否生成** ```bash python scripts/generate_html_report.py --input structured_report.json --output 热点榜报告.html ``` - **自检**：确认JSON数据与对话输出一致 #### 输出注意事项 1. **排序规则（最重要）**：TOP10表格必须按热度值（maxHotScore）降序排列，热度最高的排第1位。 - **强制检查**：输出表格前，逐一核对热度值是否满足：第1名 > 第2名 > 第3名 > ... > 第10名 - 如果发现乱序，立即重新排序后再输出 - 正确示例：| 1 | 事件A | 938万 | | | 2 | 事件B | 876万 | | | 3 | 事件C | 654万 | - 错误示例：| 1 | 事件A | 654万 | | | 2 | 事件B | 938万 | ← 热度值倒挂，必须修正 2. **统计时间**：使用脚本返回的 `query_range.start_date` 和 `end_date`，格式为"开始时间 至 结束时间" 3. **热度换算**：`maxHotScore // 10000`（整数除法），结果拼接"万"。例如：9384468 → 938万。**格式必须是"数字+万"，禁止任何其他字符** 4. **持续时长显示**：topOfTheDayTime 为 0 或 "0" 时显示"刚上热搜"，否则显示"{N}h"（如 3h、14h） 5. **URL链接**：标题有 `url` 时显示为超链接 `[标题](url)`，无URL时仅显示文本 6. **平台图标**：使用emoji区分平台（微博🌐、抖音🎵、知乎📚、B站📺、快手🎬、头条📰、百度🔍） 7. **跨平台讨论差异**： - 每个平台行首加全角空格缩进符（ ） - **必须输出该事件全部在榜平台的讨论差异，不可遗漏**（遗漏会导致平台数与"上榜平台"数量不一致） - 仅展示该事件实际在榜的平台，未上榜平台不输出 - 根据该事件在该平台的所有话题标题综合总结讨论焦点，不少于10个字 - **必须展示2-3个具体话题标题**（如该平台只有1条数据则展示1条），有URL则显示为超链接格式「[{标题}]({url})」，无URL则显示为纯文本「{标题}」 8. **综合预测**： - 根据话题类型（突发事件/娱乐八卦/社会民生/行业动态）、热度值、上榜时长、平台覆盖表现综合分析 - 预测内容不少于30字 - **综合预测标题前emoji必须按热度值选择**（对话输出和HTML报告统一规则）： - 🔥🔥🔥 热度 ≥ 1000万（爆款） - 🔥🔥 热度 500-999万（高热） - 🔥 热度 100-499万（中等） - 📉 热度 < 100万（低热） 9. **不支持热词查询**：该技能不支持查询特定热词，仅支持全网热点榜查询 ## 使用示例 - 示例1: 查询今日热点 - 场景/输入: 用户输入"热点榜"或"今日热点" - 执行步骤: 1. 调用 `python scripts/fetch_hotspot.py` 获取数据 2. 智能体分析数据，识别热点事件，保存 `structured_report.json` 3. 调用 `python scripts/generate_html_report.py --input structured_report.json` 生成HTML 4. 对话中输出：标题 > 统计时间 > HTML报告 > 订阅推送服务询问 - 预期产出: 用户看到简要信息、HTML文件下载链接、订阅推送服务提示 - 关键要点: 输出顺序为标题→统计时间→HTML报告→订阅推送服务 - 示例2: 导出HTML报告 - 场景/输入: 用户输入"导出报告"或"生成HTML报告" - 预期产出: 生成美观的HTML报告文件，告知用户文件路径 - 关键要点: 调用 `generate_html_report.py` 脚本生成HTML ## 资源索引 - 脚本:见 [scripts/fetch_hotspot.py](scripts/fetch_hotspot.py)(用途与参数:从API获取热点数据) - 脚本:见 [scripts/generate_html_report.py](scripts/generate_html_report.py)(用途与参数:读取structured_report.json生成HTML报告，参数--input JSON路径 --output输出路径) - 参考:见 [references/output-templates.md](references/output-templates.md)(何时读取:HTML报告格式参考) - 参考:见 [references/prediction-logic.md](references/prediction-logic.md)(何时读取:生成热度趋势预测时参考预测规则) - 资产:见 [assets/report-template.html](assets/report-template.html)(直接用于生成:HTML报告模板) ## 注意事项 - **【重要】排序规则（必须严格遵守）**： - TOP10必须按热度值（maxHotScore）降序排列，热度最高的排第1位 - **保存JSON前必须检查**：确认热度值从第1名到第10名依次递减，严禁乱序 - 示例：第1名938万 > 第2名876万 > 第3名654万 > ... > 第10名123万 - **【重要】热点事件识别必须执行**： - 必须从所有标题中识别和归纳热点事件，不能直接使用原标题 - 必须合并描述同一事件的不同标题 - 必须为每个事件提炼简洁的热词（5-15个字） - **执行流程**： 1. 获取数据 → 2. 智能体分析并保存JSON → 3. 对话输出简要信息 → 4. 生成HTML报告 - 对话中仅输出：标题、统计时间、订阅推送服务提示 - 详细内容（TOP10表格、热点快览分析）在HTML报告中展示 - **JSON数据完整性**： - **discussions必须覆盖所有在榜平台**：`platforms` 列表中的每个平台都必须在 `discussions` 数组中有对应条目 - discussions 中不得包含 platforms 列表以外的平台 - **热度值格式**：hot_score必须为"数字+万"格式（如"938万"），禁止包含其他字符 - prediction 字段为纯文字内容，prediction_emoji 字段存🔥emoji - **禁止行为**： - 在对话中输出详细的TOP10表格和热点快览分析（这些内容只在HTML报告中展示） - 直接使用原标题作为热点名称（必须归纳事件热词） - 不合并相似标题（必须识别同一事件的不同表述） - 仅在需要时读取参考文档，保持上下文简洁 - 数据获取通过脚本调用真实API，确保数据实时性


Security scan verdicts — ClawScan: suspicious | static analysis: clean | VirusTotal: clean | SkillSpector: suspicious (CRITICAL)