---
name: dongchedi-user-search
description: 懂车帝用户搜索和作品订阅工具。输入关键词就能搜到懂车帝上的用户（作者）账号，粉丝数、简介一眼看清；选中想看的用户即可拉取他的作品列表，标题、类型、阅读、点赞、评论、收藏、发布时间全部呈现，每条作品点一下就能跳转原页；还支持订阅用户，每天自动推送 TA 昨日更新的作品。当用户需要搜索懂车帝用户、查找懂车帝作者/达人、查看懂车帝用户作品列表、订阅懂车帝用户更新、研究懂车帝创作者内容时使用。触发词：懂车帝、懂车帝用户、懂车帝作者、懂车帝作品、懂车帝账号、懂车帝搜索、懂车帝达人、懂车帝用户搜索、懂车帝订阅。
---

# 懂车帝用户搜索和作品订阅

## 📝 简介

输入关键词就能搜到懂车帝上的用户（作者）账号，粉丝数、简介一目了然；选中想看的用户，立即拉取他的作品列表，标题、类型、阅读、点赞、评论、收藏、发布时间全部呈现，每条作品都能点链接跳转原页。

## ✨ 功能特性

| 功能模块 | 能力描述 | 核心价值 |
|---------|---------|---------|
| 用户关键词搜索 | 输入关键词搜索懂车帝用户（作者） | 精准发现目标用户 |
| 用户数据展示 | 昵称、粉丝数、简介、主页链接 | 快速评估账号影响力 |
| 作品列表查询 | 选中用户后获取其作品列表（标题/类型/阅读/点赞/评论/收藏/发布时间），默认展示最新 20 条，可查看全部 | 一览内容表现 |
| 作品直达 | 每条作品附可点击链接 | 一键跳转查看原作品 |
| 翻页浏览 | 用户列表支持多页翻看 | 不遗漏任何一个候选用户 |
| 订阅推送 | 订阅用户后每天 9:00 自动推送 TA 昨日更新的作品 | 持续追踪，不错过更新 |

## 🎯 适用对象

- 🔍 **内容创作者** — 找汽车领域对标账号，研究他们的选题方向和内容表现。
- 📊 **运营 / 数据分析** — 摸清某个品牌/车型在懂车帝上有哪些活跃创作者。
- 🏢 **品牌 / MCN** — 筛选汽车领域潜在合作达人，按粉丝量和作品数据评估价值。
- 🚗 **汽车行业从业者** — 追踪喜欢的车评人，快速浏览其近期全部作品。

## 🔑 鉴权

### 获取 API Key

请前往 [红狐hub](https://redfox.hk/settings/api-keys?source=github) 获取 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..."
```

## 🔄 工作流程

### Step 1：理解用户意图，提取关键词

**⚠️ 核心规则：语义理解优先，优先提取细分方向词（品牌、车型、领域词）**

**1. 提取关键词**

- 从用户描述中提取 2~6 字的细分关键词，如品牌名（"比亚迪"）、车型（"理想L8"）、领域词（"越野""车评"）
- **过滤冗余修饰词**：用户说的"xx用户""xx作者""xx账号""xx达人""xx博主"，搜索关键词仅取核心部分 **xx**，去除末尾的类别修饰词。例如"小米作者" → 搜索"小米"，"越野达人" → 搜索"越野"
- 若用户意图模糊（如"帮我搜懂车帝用户"），主动询问：「请问你想搜索哪个方向或领域的懂车帝用户？」
- 不得在用户未提供关键词时擅自猜测并调用脚本

**2. 识别页码参数**（用户未指定时使用默认值）

- **页码**（`--page`）：默认 `1`
  - 用户提到"下一页"、"第2页" → 对应页码
  - 用户提到"上一页" → 当前页 - 1
  - 未提及页码 → `1`（默认）

### Step 2：调用用户搜索脚本

```bash
python3 ~/.agents/skills/dongchedi-user-search/scripts/search_user.py "<关键词>" [--page 页码]
```

**参数说明：**

| 参数     | 可选值     | 含义                  |
| -------- | ---------- | --------------------- |
| keyword  | 任意字符串 | 搜索关键词             |
| `--page` | 正整数     | 页码，从1开始（默认1） |

脚本以 JSON 格式输出：

| 字段          | 说明                                |
| ------------- | ----------------------------------- |
| `users`       | 匹配的用户列表（保持接口原始顺序）       |
| `page`        | 当前页码                            |
| `has_next`    | 是否有下一页（true/false）            |
| `next_offset` | 下一页偏移量（翻页信息，无需展示给用户）  |
| `total`       | 当前页返回条数                        |

每个用户字段：

| 字段          | 说明       |
| ------------- | ---------- |
| `nickname`    | 用户昵称    |
| `user_id`     | 用户ID（Step 4 拉取作品列表时使用） |
| `followers`   | 粉丝数      |
| `bio`         | 用户简介    |
| `avatar`      | 头像URL     |
| `profile_url` | 主页链接    |

**⚠️ 完整数据读取规则：** 脚本输出 JSON 数据量较大时，终端可能截断中间内容并显示 `// This is the omitted part`。此时必须读取 Bash 输出中提示的完整文件路径（如 `Full output saved to: /path/to/file`），使用 Read 工具获取完整 JSON 后再生成表格，确保所有字段数据完整可见，不遗漏任何记录。

### Step 3：判断结果并展示用户列表

#### 情况 A：users 数量 > 0（有匹配结果）

**A1. 告知用户查询范围**

> 📊 关键词「**XXX**」查询到 **N 个**懂车帝用户（第 {page} 页），以下是详细数据：

**A2. 渲染 Markdown 表格（全部展示）**

```markdown
| #   | 用户昵称         | 粉丝数  | 简介                        | 用户ID       | 主页链接                |
| --- | ---------------- | ------- | --------------------------- | ------------ | ----------------------- |
| 1   | 小米公司         | 359.8w  | 小米公司官方信息发布账号。    | 3446334881   | [访问主页](profile_url) |
```

**格式化规则：**
- 粉丝数：`< 10000` 用原始数字（如 `320`）；`≥ 10000` 且 `< 1亿` 用 `x.xw` 格式（如 `1.2w`、`359.8w`）；`≥ 1亿` 用 `x.x亿` 格式（如 `1.2亿`）
- 昵称：完整展示，不截断
- 简介：最多展示 40 字，超出以 `...` 结尾；为空时显示 `—`
- 用户ID：完整展示
- 主页链接：固定显示文字 `[访问主页](profile_url)`，点击可跳转至懂车帝用户主页

**A3. 翻页提示（⚠️ 紧接在表格之后，不可省略，每次必须输出）**

- 若 `has_next` 为 true：

> 📄 当前第 **{page}** 页。回复「下一页」继续查看。

- 若 `has_next` 为 false（已是最后一页）：

> 📄 当前第 **{page}** 页，已无更多数据。

**翻页时「下一页」调用规则：** 若用户回复「下一页」，调用脚本时递增页码：

```bash
python3 ~/.agents/skills/dongchedi-user-search/scripts/search_user.py "<关键词>" --page {page+1}
```

**A4. 引导选择用户（⚠️ 必须输出，不可省略）**

> 👉 想看谁的作品列表？直接回复序号或昵称即可（如「2」或「小米公司」）。

**⚠️ A1~A4 缺一不可，必须在同一轮输出中连续完成。若缺少 A3 或 A4，视为执行错误，必须重新补充输出。**

#### 情况 B：users 数量 = 0（无匹配结果）

**B1. 抱歉提示**

> 😔 抱歉，未找到与「**XXX**」相关的懂车帝用户，可以换个关键词试试（如品牌名、车型或领域词）。

**⚠️ B1 必须在同一轮输出中完成，不得中断。**

### Step 4：识别用户选择并调用作品列表脚本

**1. 匹配用户**

- 用户回复**序号**（如「2」）→ 匹配上一轮用户表格中该序号对应的用户
- 用户回复**昵称** → 在上一轮用户表格中按昵称匹配
- 若无法匹配或存在歧义（如多个相似昵称），询问用户确认具体想看哪个用户

**2. 调用作品列表脚本**

```bash
python3 ~/.agents/skills/dongchedi-user-search/scripts/work_list.py "<user_id>"
```

**参数说明：**

| 参数       | 可选值     | 含义                              |
| ---------- | ---------- | --------------------------------- |
| user_id    | 字符串     | 用户ID（来自用户搜索结果的 `user_id`） |
| `--date`   | `YYYY-MM-DD` / `yesterday` / `today` | 按发布时间筛选指定日期的作品；订阅推送时传 `yesterday`，默认不筛选 |

**⚠️ 作品查询不支持分页：** `cursor` 固定传 `0`，单次返回该用户收录的全部作品（最多约 100 条封顶），不存在翻页参数，也不具备更早作品的翻页能力。

脚本以 JSON 格式输出：

| 字段       | 说明                     |
| ---------- | ------------------------ |
| `user_id`  | 用户ID                   |
| `date`     | 日期筛选值（未筛选时为空字符串） |
| `total_count` | 该用户收录的作品总数（筛选前） |
| `count`    | 当前返回的作品数（筛选后）  |
| `works`    | 作品列表（保持接口原始顺序，按发布时间从新到旧） |

每个作品字段：

| 字段                | 说明                             |
| ------------------- | -------------------------------- |
| `work_id`           | 作品ID                           |
| `title`             | 作品标题/描述（已做 Markdown 清理） |
| `work_type`         | 作品类型（1/2/7/9）               |
| `work_type_label`   | 类型中文名：文章 / 视频 / 图文动态   |
| `publish_time`      | 发布时间（Unix 时间戳，秒）        |
| `publish_time_str`  | 发布时间格式化结果（YYYY-MM-DD HH:MM） |
| `read_count`        | 阅读数                           |
| `like_count`        | 点赞数                           |
| `comment_count`     | 评论数                           |
| `collect_count`     | 收藏数                           |
| `duration_seconds`  | 视频时长（秒），视频类型时有值      |
| `cover_url`         | 封面图URL                        |
| `image_urls`        | 图片列表（图文类型时包含多张图片）  |
| `video_id`          | 视频ID，视频类型时有值            |
| `work_url`          | 作品详情页链接                    |
| `author_name`       | 作者昵称                         |
| `author_id`         | 作者ID                          |

**⚠️ 完整数据读取规则：** 同 Step 2，若终端输出被截断，必须读取提示的完整文件路径获取完整 JSON 后再生成表格。

### Step 5：判断结果并展示作品列表

#### 情况 A：works 数量 > 0（有作品）

**A1. 告知用户查询范围**

- 常规查询（`date` 为空）：

> 📊 用户「**XXX**」共收录 **N 条**作品，以下是详细数据：

- 日期筛选查询（`date` 非空，如订阅推送）：

> 📊 用户「**XXX**」在 **{date}** 更新了 **N 条**作品，以下是详细数据：

**A2. 渲染 Markdown 表格（保持接口原始顺序，禁止二次排序）**

- 常规查询（`date` 为空）：默认仅展示前 **20** 条；`count` ≤ 20 时全部展示
- 日期筛选查询（`date` 非空，如订阅推送）：不设条数限制，全部展示

```markdown
| #   | 发布时间            | 作品标题                               | 类型     | 阅读   | 点赞 | 评论 | 收藏 |
| --- | ------------------ | ------------------------------------- | -------- | ------ | ---- | ---- | ---- |
| 1   | 2026-10-09 17:11   | [13万价位，后驱，激光雷达，磁流变悬架...](work_url) | 图文动态 | 6706   | 2    | 0    | 0    |
```

**格式化规则：**
- 作品标题：使用 `[标题](work_url)` 超链接格式；超过 30 字截断并以 `...` 结尾
- 类型：直接使用 `work_type_label` 字段（文章 / 视频 / 图文动态）
- 发布时间：直接使用 `publish_time_str` 字段
- 数字（阅读/点赞/评论/收藏）：`< 10000` 用原始数字；`≥ 10000` 且 `< 1亿` 用 `x.xw` 格式（如 `1.2w`、`12.5w`）；`≥ 1亿` 用 `x.x亿` 格式

**A3. 查看全部提示（⚠️ 常规查询且 `count` > 20 时必须输出）**

> 📄 已展示前 **20** 条（共 **N 条**作品），回复「查看全部」查看所有作品。

**A4. 订阅提示（⚠️ 必须输出）**

> 📬 想持续追踪 TA 吗？订阅「**XXX**」后每天 9:00 自动推送 TA **昨日更新的作品**，回复「订阅」即可创建。

**A5. 看完作品后的引导（⚠️ 必须输出）**

> 👉 需要查看其他用户的作品或搜索其他关键词吗？直接告诉我即可。

#### 情况 B：works 数量 = 0（无作品）

**B1. 提示（按场景区分）**

- 日期筛选且 `total_count` > 0（订阅推送 / 指定日期场景）：

> 😔 用户「**XXX**」在 **{date}** 无更新作品。（订阅推送时可表述为「昨日无更新作品」）

- 常规查询或 `total_count` = 0：

> 😔 用户「**XXX**」暂无收录作品（红狐未收录该用户的公开作品，或作品较少），可以换个用户看看。

**⚠️ B1 必须在同一轮输出中完成，不得中断。**

#### 查看全部处理（用户回复「查看全部」时）

**触发条件：** 用户在作品列表展示后表达继续查看作品的意图（如「查看全部」「全部」「查看所有作品」「下一页」等）时执行。

**1. 展示方式**

- **作品查询不支持分页**：不得按「下一页」方式分批展示（如每次 20 条），也不输出任何「下一页」式翻页提示；继续查看一律**一次性**展示全部剩余作品
- 基于上一轮已获取的完整作品数据，**续接展示**第 21 条起的所有剩余作品（相同表格格式与格式化规则，编号从 21 连续递增，保持接口原始顺序，禁止二次排序），直至全部展示完毕
- 数据优先复用上一轮脚本输出；若上一轮输出被截断，按「完整数据读取规则」读取 Bash 输出中提示的完整文件路径获取
- **不发起新的接口请求**；仅当上一轮完整数据确实不可获取时，才重新执行一次相同脚本命令
- 若回复「查看全部」时作品已全部展示（如 `count` ≤ 20），直接说明已展示全部作品即可，无需重复输出
- 若用户在日期筛选展示（订阅推送）后要求「查看全部」，则对该用户执行一次常规查询（不带 `--date`）并完整展示其全部作品（不再套用前 20 条限制）

**2. 后续输出**

- 续接展示完成后，仅输出引导语（A5），订阅提示与查看全部提示不再重复输出

### Step 6：订阅处理

**触发条件：** 用户在作品列表展示后回复「订阅」（或明确表达订阅当前用户的意向）时，为其创建每日推送任务。

- 若用户未先展示作品、直接要求订阅（如「订阅懂车帝的小米公司」），先按 Step 1~4 定位到唯一用户（存在歧义时先请用户确认），再执行本步骤。

> **静默执行原则：** 任务查询、创建/更新等中间步骤不得向用户输出过程性提示（如「正在创建订阅」），仅展示最终订阅成功提示。

**1. 查询现有订阅任务**

使用 `automation_update mode=list` 获取「懂车帝订阅」相关任务，读取各任务中已订阅的用户与对应 userId。

**2. 判断追加 / 新建**

| 条件 | 操作 |
| ---- | ---- |
| 现有订阅用户数 + 新用户 ≤ 10 | 追加：`automation_update mode=update`，在现有任务 prompt 中追加该用户的拉取命令（去重） |
| 超过 10 | 新建：`automation_update mode=create`，新建独立每日任务「懂车帝订阅作品日报 #2」 |
| 用户要求取消订阅 | 从对应任务 prompt 中移除该用户的命令；若任务中已无用户，则删除该任务 |

**3. 任务配置**

- 执行时间：每天 9:00（`FREQ=DAILY;BYHOUR=9;BYMINUTE=0`）
- automation prompt 模板（每个订阅用户一条命令，多用户依次罗列）：

```text
拉取懂车帝订阅用户昨日更新的作品并展示给用户（保持接口原始顺序，禁止二次排序；某用户昨日无更新时输出「{昵称}：昨日无更新作品」）：
python3 ~/.agents/skills/dongchedi-user-search/scripts/work_list.py "{user_id}" --date yesterday
```

- `--date yesterday` 由脚本内部按发布时间筛选「昨日」数据，无需手工比对时间

**4. 订阅成功提示（唯一对外输出）**

> ✅ 订阅成功！每天 9:00 自动推送「**XXX**」昨日更新的作品。如昨日无更新，会提示「XXX：昨日无更新作品」。

### Step 7：结束输出

全部内容展示完毕后，不等待、立刻结束输出。

## 📌 注意事项

- 作品查询不支持分页，`cursor` 固定传 `0`；单次拉取红狐收录的该用户作品（最多约 100 条封顶），不具备更早作品的翻页能力
- 日期筛选（`--date`）由脚本内部按发布时间（本地时区）比对完成，仅在本次单次拉取返回的作品范围内筛选
- 作品数据保持接口返回顺序（按发布时间从新到旧），禁止二次排序
- 常规查询作品列表默认展示前 20 条；唯一续接逻辑为用户回复「查看全部」后，基于已获取数据一次性展示全部剩余作品（编号从 21 起），不发起新的接口请求，不输出「下一页」式翻页提示
- 所有数据来自红狐收录，部分用户可能存在作品未收录或收录滞后的情况
