---
name: wechat-original-hot
description: 全网持续收录每日公众号原创热门文章内容，向用户推送公众号原创热门文章；当用户需要获取全领域的公众号原创热门文章、或订阅每日原创热门文章推送时使用
---

# 公众号热门原创文章

## 任务目标

- **本Skill必须调用脚本获取数据，禁止AI自行生成任何内容。未调用脚本=功能失效。**
- 本Skill用于：获取公众号原创爆款文章
- 能力包含：爆文数据获取、分类查询、日期查询、HTML页面生成、PDF导出
- 触发条件："原创爆文"、"爆文推荐"、"今日爆文"等词语
- **核心功能**：主要推送原创爆文文章，支持按分类和日期筛选，末尾询问用户是否需要查看更多或订阅每日推送
- **默认查询时间**：当用户提到"最近"、"最新"等无明确时间说法时，默认查询过去7天数据
- **文章数量提示**：当文章少于10篇时，提示"xx赛道10w+文章较少，您可以拓展过去30天或者看看综合10w+文章~"
- **输出规范**：
  1. 对话文本输出：完整榜单数据（**必须展示所有文章，禁止截断或省略**）
  2. HTML文件输出：对话输出完成后生成HTML（用于可视化展示和PDF导出）
- **执行顺序**：先完成对话中的完整文章输出 → 再生成HTML文件
- **禁止行为**：禁止自行生成文章内容、写作建议、爆文规律分析，本Skill只输出榜单数据

## 启动提示

- Skill加载后，提示用户："技能已加载完成。是否为您推送最新的原创爆款文章？"

## 视觉规范（重要）

生成HTML页面时，必须遵循以下样式规范：

**主题色调**：

- 主色：`rgb(0, 179, 84)`（微信绿）
- 辅助色：`#0088ff`（阅读数、用户名称蓝色）
- 背景色：`#fff`（纯白）

**布局结构**：

- 序号（🥇🥈🥉/数字）放在标题左边
- 用户、类型、阅读数、发布时间四项目之间用浅灰色竖线分隔 `|`
- 竖线高度缩短一半，垂直居中对齐
- 阅读量排序标签 + 导出PDF按钮 放在标题右侧
- **头部不含"爆款研究院"等品牌标签**，保持简洁

**图标规范**：

- 用户图标：`👤`（无背景）
- 阅读数图标：`📖`

**元素样式**：

- 用户名称：`#0088ff`，可点击跳转公众号名片（链接：`https://open.weixin.qq.com/qr/code?username={accountId}`）
- 阅读数：`#0088ff`
- 爆款分析区块：无左边框，纯白背景 + 浅绿底色

**PDF导出**：

- 使用 html2pdf.js 生成
- 按钮位于标题右侧，紧邻阅读量排序标签
- 按钮样式：蓝色渐变背景，白色文字，12px字号
- **自适应单页模式**：PDF尺寸根据内容实际大小自动调整，所有内容在一页完整展示，禁用分页分割
- PDF配置要点：`pagebreak: { mode: 'none' }`、`margin: 0`、根据内容高度/宽度计算纸张尺寸、添加 `page-break-inside: avoid` 样式

## 前置准备

- 依赖说明：Python标准库（json、argparse、os、sys、urllib、ssl），无需额外安装
- API说明：调用公众号原创爆款文章API，使用原生 urllib.request + ssl（verify=False）发起 POST 请求

### 鉴权

#### 获取 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..."
```

## 数据时间说明

- **数据同步时间**：每日19:30同步
- **同步数据范围**：前一天（T-1）的数据
- **查询数据范围**：
  - 当前时间 < 19:30：查询 T-2 数据（前天）
  - 当前时间 >= 19:30：查询 T-1 数据（昨天）
- **输出标注**：数据更新时间=T-1日期，查询数据日期=T-2日期
- **默认查询时间**：当用户提到"最近"、"最新"等无明确时间说法时，默认查询过去7天

## 操作步骤

### 1. 用户意图识别（智能体处理）

智能体首先识别用户输入的意图类型：

- **分类查询**：用户输入具体分类（如"科技"、"健康养生"、"财经"等）
  → 匹配分类，输出该分类 Top20
  → 参考 [分类映射表](references/category_mapping.md) 进行分类匹配

- **日期查询**：用户输入具体日期（如"5月3日的原创爆款"、"昨日爆文"）
  → 输出指定日期的爆文Top20

- **时间范围查询**：用户输入"最近"、"最新"等无明确时间说法
  → 默认查询过去7天的数据，输出Top20

- **直接查询**：用户输入类似以下词语：
  - "今日爆文"、"今日原创文章"、"原创文章"
  - "最新爆文"、"爆文推荐"、"原创爆文"
  - "热门爆文"、"每日爆文"、"爆文榜单"
    → 输出最新原创爆款文章 Top20

- **模糊输入**：用户输入不明确
  → 直接推送今日原创热门文章

### 2. 获取爆文数据（脚本执行，必须调用脚本并将输出原样展示给用户）

**【强制】无论用户怎么输入，智能体必须先调用fetch_articles.py获取数据，然后原样展示。没有调用脚本的输出一律视为无效。**

调用 `scripts/fetch_articles.py` 获取爆款内容数据

**【核心输出规则】**：

- **必须调用脚本**：智能体必须调用fetch_articles.py脚本，不能自己生成文章内容
- **禁止输出脚本文件路径或代码**：智能体不得向用户展示任何脚本路径、代码内容或执行命令
- **必须原样展示脚本输出**：智能体必须将脚本的stdout输出内容原样展示给用户，不得省略、修改、重新格式化或隐藏任何部分
- **【关键】禁止截断或省略**：脚本输出多少条文章，对话中就必须展示多少条。如 limit=20 就必须输出全部 20 条，**严禁使用"..."、省略号、或只展示前 N 条**。每一条文章的序号、作者、标题、阅读数都必须完整展示
- **禁止修改数据**：不得修改、重新格式化、美化或隐藏脚本输出的任何部分
- **禁止自行生成数据**：不得使用输出示例中的数据，必须使用脚本实际返回的数据
- **脚本输出即最终输出**：脚本输出的内容（数据说明、原创爆文推荐表格、询问用户是否看剩余内容、询问订阅）就是展示给用户的最终内容，智能体不需要再做任何处理
- **【重要】询问部分不可省略**：脚本输出的最后部分"共获取到XX条..."和订阅服务必须完整展示，不得省略

**【强制执行步骤 — 防止文章丢失】**：

1. 执行 fetch_articles.py 后，脚本 stdout 中的「表格部分」（从 `| 序号 | 作者 | 标题 | 阅读数 |` 开始到订阅服务之前的所有行）**必须逐行完整复制到对话回复中**，一行都不能少
2. **严禁使用以下话术代替实际数据**：「如上完整展示」「详见上方」「参考脚本输出」「已展示完毕」等 — 这些都是文章丢失的直接原因
3. **第2步的对话回复是文章的唯一展示窗口**，如果这一步没有逐条输出文章，文章就永远丢失了（HTML 只是辅助文件，不能替代对话输出）
4. 生成 HTML 之前必须自检：对话中显示的表格行数是否等于 --limit 参数值？不等于则**禁止生成 HTML**，先补上缺失的文章

**接口信息**：

- 接口URL：`https://redfox.hk/story/api/cozeSkill/getWxDataByCategoryAndTime`
- 请求方式：POST（JSON body）
- 认证方式：X-API-KEY header，值从 `REDFOX_API_KEY` 环境变量获取
- 参数：
  - `type`：分类名称（如"科技数码"、"总排名"等）
  - `startDate`：开始日期（YYYY-MM-DD格式）
  - `endDate`：结束日期（YYYY-MM-DD格式）
  - `source`："公众号文章原创之王"（固定值）

**脚本调用方式**（智能体内部执行，用户不可见）：

**分类查询**：

```bash
python scripts/fetch_articles.py --type "科技数码" --limit 20
```

- `--type`：从用户输入中匹配的分类名称（参考分类映射表）
- 如用户输入"科技类原创爆款"，智能体匹配到"科技数码"，传入`--type "科技数码"`

**总榜查询**：

```bash
python scripts/fetch_articles.py --type "总排名" --limit 20
```

- 或不传 `--type`，默认为"总排名"

**日期查询**：

```bash
python scripts/fetch_articles.py --type "总排名" --start_date "2026-05-03" --limit 20
```

- `--start_date`：用户指定的日期（YYYY-MM-DD格式）
- 脚本会自动计算 `endDate` = `startDate` + 1天

**时间参数说明**：

- 用户未指定日期时，脚本根据当前时间自动判断：
  - 当前时间 < 18:30：查询 T-2 数据（前天）
  - 当前时间 >= 18:30：查询 T-1 数据（昨天）
- 用户指定日期时，使用用户指定的日期

**【输出格式】**

**文章概览表格**：输出Markdown表格，包含序号、作者、标题、阅读数四列，作者和标题包含链接

```
| 序号 | 作者 | 标题 | 阅读数 |
|------|------|------|--------|
| 1 | [夜听](https://open.weixin.qq.com/qr/code?username=yetingfm) | [【夜听】有一种感情，叫不再联系](https://mp.weixin.qq.com/s?...) | 10w+ |
| 2 | [罗辑思维](https://open.weixin.qq.com/qr/code?username=luojisw) | [李璞：普通人如何实现财务自由？](https://mp.weixin.qq.com/s?...) | 10w+ |
```

**输出示例**（仅展示格式，实际数据以脚本返回为准）：

**最新一期数据**：

```
💡 数据说明
公众号原创文章推荐将在每日19点30分准时更新昨日文章数据，以下数据为获取时间时的快照，和实时数据有所差别。

非常抱歉🙏，最新的是前天的数据，我将为您查询最接近您需求的2026年05月12日原创文章。

📊 原创爆文推荐
最近30天的原创爆款文章

| 序号 | 作者 | 标题 | 阅读数 |
|------|------|------|--------|
| 1 | [作者A](链接) | [文章标题](链接) | 10w+ |
...

导出功能：输出生成HTML榜单页面，表格内容支持导出 PDF 格式，自动生成并打开

共获取到50条爆款原创热门文章,当前展示前20条。

📬 订阅服务
是否需要订阅具体赛道的账号表现？我们支持：
人文资讯、知识百科、健康养生、时尚潮流、美食餐饮、乐活生活、旅游出行、搞笑幽默、情感心理、体育娱乐、美容美体、文摘精选、民生资讯、财富理财、科技数码、创投商业、汽车交通、房产楼市、职场发展、教育考试、学术研究、企业品牌、总排名
订阅推送 — 每天19点30分推送最新公众号原创文章
暂不需要 — 仅本次查询
```

**指定日期查询**（日期在有效范围内）：

```
💡 数据说明
公众号原创文章推荐将在每日19点30分准时更新昨日文章数据，以下数据为获取时间时的快照，和实时数据有所差别。

📊 原创爆文推荐
2026年05月03日当天的原创爆款文章

| 序号 | 作者 | 标题 | 阅读数 |
|------|------|------|--------|
| 1 | [作者A](链接) | [文章标题](链接) | 10w+ |
...
```

**用户查询"今日爆款"**（今日数据未更新）：

```
💡 数据说明
公众号原创文章推荐将在每日19点30分准时更新昨日文章数据，以下数据为获取时间时的快照，和实时数据有所差别。

非常抱歉🙏，最新的是前天的数据，我将为您查询最接近您需求的2026年05月12日原创文章。

📊 原创爆文推荐
2026年05月12日当天的原创爆款文章

| 序号 | 作者 | 标题 | 阅读数 |
|------|------|------|--------|
| 1 | [作者A](链接) | [文章标题](链接) | 10w+ |
...
```

**用户查询"最近7天"**（查询时间范围超出最新数据）：

```
💡 数据说明
公众号原创文章推荐将在每日19点30分准时更新昨日文章数据，以下数据为获取时间时的快照，和实时数据有所差别。

非常抱歉🙏，最新的是前天的数据，我将为您查询最接近您需求的时间范围。

📊 原创爆文推荐
2026年05月06日至2026年05月12日的原创爆款文章

| 序号 | 作者 | 标题 | 阅读数 |
|------|------|------|--------|
| 1 | [作者A](链接) | [文章标题](链接) | 10w+ |
...
```

**特殊情况 - 用户查询时间早于回溯日期**：

```
💡 数据说明
公众号原创文章推荐将在每日19点30分准时更新昨日文章数据，以下数据为获取时间时的快照，和实时数据有所差别。

非常抱歉🙏，最新的是昨天的数据，我将为您查询最接近您需求的2026年05月08日原创文章。

📊 原创爆文推荐
2026年05月08日当天的原创爆款文章

| 序号 | 作者 | 标题 | 阅读数 |
|------|------|------|--------|
| 1 | [作者A](链接) | [文章标题](链接) | 10w+ |
...
```

**特殊情况 - 用户查询时间早于回溯日期**：

```
💡 数据说明
公众号原创文章推荐将在每日19点30分准时更新昨日文章数据，以下数据为获取时间时的快照，和实时数据有所差别。

非常抱歉🙏，目前最多支持回溯「过去30天」（最早至2026年04月15日），我将为您查询最接近您需求的时间范围~

📊 原创爆文推荐
2026年04月15日当天的原创爆款文章

| 序号 | 作者 | 标题 | 阅读数 |
|------|------|------|--------|
| 1 | [作者A](链接) | [文章标题](链接) | 10w+ |
...
```

**【重要】必须使用脚本实际返回的数据，不得使用上述示例数据！**

**【重要】只要数据查询日期和用户询问日期不一致，就必须在数据说明后显示提示信息：**

- 查询日期 > 最新日期：`非常抱歉🙏，最新的是{查询日期}的数据，我将为您查询最接近您需求的{查询日期}原创文章。`
- 查询日期 < 回溯日期：`非常抱歉🙏，目前最多支持回溯「过去30天」（最早至{回溯日期}），我将为您查询最接近您需求的时间范围~`

### 3. 生成HTML页面（对话输出完成后执行）

**【执行顺序】先在对话中完整输出所有文章数据 → 再生成HTML页面并打开。禁止在对话输出完成前生成HTML。**

**【HTML生成前置条件】生成 HTML 前必须自检：对话回复中是否已逐条展示了 --limit 指定数量的文章？例如 limit=20 则必须能看到 20 个带序号的表格行。未通过自检则禁止生成 HTML，必须先补全文章。**

**【重要】每次对话中完整输出表格数据并通过自检后，自动调用generate_hot_html.py生成HTML页面并打开，无需用户额外触发。**

调用脚本读取临时JSON文件数据，填充HTML模板，生成公众号风格的HTML页面：

**脚本位置**：`scripts/generate_hot_html.py`

**参数说明**：

- `temp_file`: 临时JSON文件路径（默认：`temp_articles.json`）
- `output`: 输出文件路径（建议：`{分类}_热门榜单.html`）
- `display_count`: 要展示的文章数量（**重要**：必须与对话中展示的数量一致）

**命令示例**：

```bash
python scripts/generate_hot_html.py --temp_file temp_articles.json --output "原创爆文_榜单.html" --display_count 20
```

### 4. 订阅服务

**主动询问用户**是否需要订阅特定分类：

```
是否需要订阅具体赛道的账号表现？我们支持：
人文资讯、知识百科、健康养生、时尚潮流、美食餐饮、乐活生活、旅游出行、搞笑幽默、情感心理、体育娱乐、美容美体、文摘精选、民生资讯、财富理财、科技数码、创投商业、汽车交通、房产楼市、职场发展、教育考试、学术研究、企业品牌、总排名
```

用户选择订阅后：

- 订阅成功后：每天19:30推送最新一期原创爆文数据
- 暂不需要 - 仅本次查询

## 注意事项

- **【核心规则】禁止向用户输出脚本路径、代码或执行命令，直接展示脚本运行结果**
- 榜单数据为实时获取，可能因网络或API状态有所延迟
- 首次展示前20条，超过20条时提示用户是否全部展示
- 分类冷门时提示"该领域暂无爆款数据，建议换个方向或查看最新原创爆文"
- **HTML内容一致性**：HTML中的文章内容必须与对话中展示的内容完全一致
- **数据说明**：输出时必须注明数据库更新日期和查询的日期

## 资源索引

- 脚本: 见 [scripts/fetch_articles.py](scripts/fetch_articles.py)（用途: 获取原创爆款文章数据，支持分类查询和日期查询）
- 脚本: 见 [scripts/generate_hot_html.py](scripts/generate_hot_html.py)（用途: 从临时JSON文件读取数据，生成公众号风格HTML页面）
- 参考: 见 [references/category_mapping.md](references/category_mapping.md)（用途: 分类映射表，包含22个标准分类和泛化关键词）

## 使用示例

**示例1：直接查询最新原创爆文**

```
用户输入：最新原创爆文
智能体识别：直接查询
智能体调用：
python scripts/fetch_articles.py --type "总排名" --limit 20

输出结果：
数据说明：本次查询的数据更新时间为 2026年05月08日（数据每日18:30同步），查询的是 2026年05月07日 的原创爆文数据，与实时数据存在差异。

📊 原创爆文推荐
最近30天的原创爆款文章

| 序号 | 作者 | 标题 | 阅读数 |
|------|------|------|--------|
| 1 | [一个坏土豆](链接) | [这次报应来的太快！日本刚刚遭遇迎头暴击](链接) | 10w+ |
...

共获取到50条爆款原创热门文章,当前展示前20条。

📬 订阅服务
是否需要订阅具体赛道的账号表现？我们支持：
人文资讯、知识百科、健康养生、时尚潮流、美食餐饮、乐活生活、旅游出行、搞笑幽默、情感心理、体育娱乐、美容美体、文摘精选、民生资讯、财富理财、科技数码、创投商业、汽车交通、房产楼市、职场发展、教育考试、学术研究、企业品牌、总排名
订阅推送 — 每天19点30分推送最新公众号原创文章
暂不需要 — 仅本次查询
```

**示例2：分类查询**

```
用户输入：科技类原创爆款
智能体识别：分类查询
智能体匹配分类："科技数码"
智能体调用：
python scripts/fetch_articles.py --type "科技数码" --limit 20

输出结果：
数据说明：本次查询的数据更新时间为 2026年05月08日（数据每日18:30同步），查询的是 2026年05月07日 的原创爆文数据，与实时数据存在差异。

📊 原创爆文推荐
最近30天的原创爆款文章

| 序号 | 作者 | 标题 | 阅读数 |
|------|------|------|--------|
| 1 | [作者A](链接) | [科技文章标题1](链接) | 10w+ |
...
```

**示例3：日期查询**

```
用户输入：5月3日的原创爆款
智能体识别：日期查询
智能体调用：
python scripts/fetch_articles.py --type "总排名" --start_date "2026-05-03" --limit 20

输出结果：
数据说明：查询的是 2026年05月03日 的原创爆文数据，与实时数据存在差异。

📊 原创爆文推荐
2026年05月03日当天的原创爆款文章

| 序号 | 作者 | 标题 | 阅读数 |
|------|------|------|--------|
| 1 | [作者A](链接) | [文章标题1](链接) | 10w+ |
...
```

**示例4：分类+日期查询**

```
用户输入：5月3日科技类的原创爆款
智能体识别：分类+日期查询
智能体匹配分类："科技数码"
智能体调用：
python scripts/fetch_articles.py --type "科技数码" --start_date "2026-05-03" --limit 20

输出结果：
数据说明：查询的是 2026年05月03日 的原创爆文数据，与实时数据存在差异。

📊 原创爆文推荐
2026年05月03日当天的原创爆款文章

| 序号 | 作者 | 标题 | 阅读数 |
|------|------|------|--------|
| 1 | [作者A](链接) | [科技文章标题1](链接) | 10w+ |
...
```
