---
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": "0DFEC94708F044A64E88818174FDD003",
      "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": "566756798B468EC8665BE99EE5EBF83A",
      "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，确保数据实时性
