# Space Xhs Hotspot

> 小红书热点搜集与选题判断。按关键词/赛道拉取近期高互动笔记，输出热点表格、趋势判断和可直接开写的选题建议。当用户说"小红书热点""小红书最近火什么""查一下 XX 赛道的爆款""小红书选题""找小红书素材""这个词在小红书热不热""小红书热榜/热门笔记/爆款笔记""帮我看看小红书数据"时触发。也适用于用户报出一个赛道词（如"减脂餐""通勤穿搭""AI 工具"）并问"能不能写"的场景。多数据源自动降级：红狐 API / socialdatax CLI / 怪壳 CLI，均未配置时走 WebSearch 手动兜底。

- Skill: `chuanyue98/space-xhs-hotspot` (Agent Skill, multi-file: 7 files)
- Install (CLI): `npx skillmds@latest add chuanyue98/space-xhs-hotspot`
- Raw SKILL.md: https://api.skillmd.com/api/skills/chuanyue98/space-xhs-hotspot/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Integrations & APIs
- Author: chuanyue98 (https://skillmd.com/u/chuanyue98)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/chuanyue98/space-xhs-hotspot

---


# 小红书热点搜集（space-xhs-hotspot）

给创作者用的选题雷达。目标不是把数据倒出来，而是**回答三个问题**：这个赛道现在有没有流量？流量集中在哪几种内容形态上？我下一篇该写什么。

**产出链路**：本 skill 出选题 → `space-xhs-title` 起标题 → `space-xhs-writer` 写正文。所以最后一段必须是**可以直接粘给下游的选题卡**，不是一句"建议多观察"。

---

## 数据说明（展示任何数据之前必须先说明，逐字保留口径）

- **收录门槛**：红狐库只收录**互动数 1000+** 的笔记。搜不到 ≠ 这个方向没人写，只等于**这个方向没出过 1000+ 互动的爆款**——这本身就是一条判断（小众/低天花板 or 蓝海）。
- **更新节奏**：每日**早上 7 点**更新**昨日**数据。当天数据永远查不到，用户说"今天"时按"昨天"处理并说明。
- **数据快照**：互动数是**入库时刻**的快照，不是实时值。入库后还会继续涨——所以"3 天前的 8000 互动"实际热度可能高于"昨天的 1.2w"。
- **时间窗**：库内只有**昨天到 30 天前**的数据。超过 30 天的请求要明确告知并降级到最近可用范围。
- **链接口径**：`note_url` / `noteLink` **必须原样输出**，包含 `xsec_token` 查询参数。禁止截断、脱敏、重建，禁止只拿 `note_id` 自己拼 URL——拼出来的链接打不开。`note_id` 是 24 位小写十六进制，必须完整复制。

---

## 第 0 步：数据源探测与降级（每次执行前先做，不要假设 Key 存在）

```bash
env | grep -E '^(REDFOX_API_KEY|SOCIALDATAX_API_KEY|GUAIKEI_API_TOKEN)=' | sed 's/=.*/=<set>/'
```

按下表**从上往下**取第一条可用路线；某条路线报错（401/余额不足/网络失败）时继续往下降级，并在输出里注明"本次数据来自 X 路线"。

| 优先级 | 环境变量 | 路线 | 强项 | 短板 |
|---|---|---|---|---|
| 1 | `REDFOX_API_KEY` | 红狐 API（本 skill 自带脚本） | 唯一有**热度/相关性/时效三维评分**和 `relatedSearches` 拓词；天然只含 1000+ 爆款，信噪比最高 | 只有近 30 天；T+1 更新；无评论 |
| 2 | `SOCIALDATAX_API_KEY` | socialdatax CLI（npx，见 `xhs-content-research`） | 近实时；有 `--since-days`、多种排序、图文/视频筛选 | 无评分，需自己按互动排序；按量计费 |
| 3 | `GUAIKEI_API_TOKEN` | 怪壳 Node CLI（见 `xiaohongshu-content-tools`） | 能拿**笔记详情 + 评论区 + 博主全部作品**，做深挖唯一选择 | 需 node，脚本在另一 skill 目录下 |
| 兜底 | 无 | WebSearch 手动 | 零配置 | 无互动数，只能看到标题和大致方向 |

具体命令、参数、报错处理见 `references/data_sources.md`（执行前读它）。

**三个 Key 都没有时**，不要静默失败，按此模板回复：

```
未检测到小红书数据源，本次用公开搜索兜底（拿不到互动数，只能看内容方向）。

想要带互动数据的完整热点分析，配置任一即可（推荐第 1 个）：
  export REDFOX_API_KEY=...        # https://redfox.hk/settings/api-keys  近30天爆款库，带热度评分
  export SOCIALDATAX_API_KEY=...   # https://socialdatax.com/ai          近实时搜索
  export GUAIKEI_API_TOKEN=...     # https://www.guaikei.com             详情+评论深挖
写进 ~/.zshrc 后重开终端即可。
```

然后**继续用 WebSearch 兜底跑完流程**（`site:xiaohongshu.com <关键词>` + 小红书热点类聚合站），只是把"互动数"列换成"来源"列，并在结论里标注"未经互动数据验证"。不要因为没 Key 就停在提示上。

---

## 第 1 步：把用户的话变成能查的词

**核心判断：泛化词 vs 细分词。** 拿泛化词去查，返回的是一堆彼此无关的爆款，看不出任何趋势；拿过细的词去查，返回 0 条。

| 类型 | 特征 | 例 | 动作 |
|---|---|---|---|
| 泛化词 | 上位概念、行业分类，无场景/人群/风格修饰 | 美妆、穿搭、职场、AI、母婴 | 先拓 6~10 个细分词，**同时开跑**，用结果对比出热度分布 |
| 细分词 | 有一层修饰（场景/人群/风格/意图） | 通勤穿搭、减脂早餐、小个子显高、AI 做 PPT | 直接查，这是甜点区 |
| 过细词 | 两层以上修饰或长尾组合 | 微胖小个子秋冬通勤穿搭 | 砍到一层修饰再查，同时保留原词做人工筛 |

**与原版的差别**：识别到泛化词时**不要停下来等用户回复"拓展/不拓展"**。直接说明"「穿搭」太宽，我按 8 个细分方向并行查了"，然后一次跑完（红狐支持逗号分隔多词）。用户想改方向，看到结果再改效率更高。只有当拓展词方向存在多种明显不同的商业意图（如"保险"→ 买保险 / 卖保险 / 保险从业）时，才值得先问一句。

**拓展词生成原则**：
- 大小适中——"中产穿搭"这种自造词查不到数据，"老钱风""通勤""松弛感"这种平台上真实存在的说法才查得到。
- 覆盖四个维度，各 2~3 个：**趋势词**（老钱风、多巴胺、松弛感）、**人群词**（学生党、小个子、宝妈、打工人）、**场景词**（通勤、约会、露营、租房）、**意图词**（平替、避雷、测评、清单）。
- 优先用用户自述里出现过的词。用户说"我平时写小众电影、书评、港台文化"，就该查「小众电影/港台电影/书单推荐」，而不是查「电影」。

### 赛道词库：`references/xhs_sectors.json`

不要凭空想拓展词——先查词库。它按小红书官方 24 个一级赛道组织，每个赛道给 `trend` / `audience` / `scene` / `intent` 四个维度的可查询细分词，正好对应上面四个维度。

**什么时候读它**（三种场景，其余场景别浪费上下文）：

| 场景 | 用法 |
|---|---|
| 用户给的是泛化词（"穿搭""职场""AI"） | 找到对应一级赛道，**四个维度各取 2~3 个**凑 6~10 个词并行查，这就是赛道下切 |
| 用户给的是细分词（"通勤穿搭"） | 直接查该词，**同时**从同赛道同维度取 2~3 个邻近词做横向对比（见第 4 步），用来回答"这个词在赛道里算热还是算冷" |
| 用户说不清方向、只说"我该写什么" | 先问定位，再从其人设匹配的 1~2 个赛道取词 |

**词库是起点不是终点**：跑完第一轮后，必须拿接口返回的 `relatedSearches`（红狐）或本轮高频标题词（其他路线）二次拓词——那才是平台**当下**的真实说法。词库里的趋势词会过期，查出来 0 条就说明它已经凉了，这本身是条结论，别硬凑。

赛道找不到对应项（如"跨境电商""考编"）时，就近映射到最相关的一级赛道（互联网 / 教育），并说明是近似映射，不要为了对齐词库改写用户的方向。

---

## 第 2 步：查询与时间窗策略

**默认窗口 7 天**（`startDate = 今天 - 7`）。换算：今天→昨天，最近/近一周→7 天，近 N 天→今天-N，最多 30 天。

**数据不足时只扩时间，不换词**（换词会把两个不同赛道的数据混在一起，趋势判断就废了）：

```
1 天 → 3 天 → 7 天 → 30 天
```

每次扩窗都要告知："「XX」近 7 天只有 3 条 1000+ 笔记，已扩到近 30 天。"扩到 30 天仍 < 5 条，就停手，直接给结论：**这是一个低产出赛道**——要么受众太窄，要么平台不给这个方向流量，要么就是没人写的蓝海。这三种可能要在结论里替用户区分（看 `relatedSearches` 有没有词、看邻近词的数据量）。

---

## 第 3 步：读数据，做趋势判断（本 skill 的核心，不要跳过）

拿到笔记列表后，**逐条不是重点，模式才是**。按下面六个切口过一遍，前五个是赛道现状，第六个是爆款共性：

### 1. 形态分布
把 top 20 按内容形态归类，数出占比：**清单/盘点｜教程步骤｜测评对比｜个人经历叙事｜避雷吐槽｜数据结论｜资源合集**。占比最高的形态 = 平台当前在这个赛道给流量的形态，也是最安全的模仿对象。占比为 0 但用户擅长的形态 = 差异化机会（要标风险）。

### 2. 标题钩子分布
统计 top 20 标题里出现的钩子：数字（"5 个""3 天"）、人群标签（"打工人""学生党"）、痛点原话（带引号的吐槽）、反差（"没想到""原来"）、身份背书（"三甲医生""HR"）、时效（"2026""最新"）。哪种钩子重复出现最多，就是这个赛道读者当下吃的那一套——直接传给 `space-xhs-title`。

### 3. 账号量级
看 `authorFans`。**如果 top 榜里有明显的小号（<1 万粉）跑出 1w+ 互动，说明这个赛道流量吃内容不吃账号，新号可进**；如果全是 50 万+ 大号霸榜，说明是存量竞争，新号进去大概率沉。这条对用户的决策价值最高，务必写出来。

### 4. 时间分布
爆款集中在最近 3 天 = 上升期热点，抓紧写；均匀分散在 30 天 = 常青需求，什么时候写都行；集中在 3 周前后没有新的 = 热点已过，别追。

### 5. 互动结构
比较 `likedCount` / `collectedCount` / `commentsCount`：
- **收藏 > 点赞** → 工具型/资料型内容，读者要留着用。适合做清单、模板、合集。
- **评论 > 收藏且评论占比高** → 话题型/争议型，读者要表态。适合做观点、提问、对比。
- **点赞压倒性高** → 情绪型/审美型，读者只是路过认同。转化弱，涨粉一般。

> 账号量级这一条只有红狐路线有 `authorFans`。怪壳路线**实测拿不到粉丝数**，此时写"粉丝字段缺失，本路线无法判断账号量级"，**不要估算**，其余四个切口照常给。

### 6. 爆款共性提取（样本 ≥ 8 条时必做）

上面五个切口回答"这个赛道现在是什么样"，共性提取回答**"这批爆款为什么爆，哪些我能抄，哪些抄不了"**——后者才是用户真正要的东西。

执行前读 `references/pattern_extraction.md`，按它做三件事：

1. **逐条打两个标签**：形态标签（清单/教程/测评/经历/避雷/数据/资源/身份背书）+ 爆款机制标签（新鲜感/结果感/场景感/身份感/情绪感/反差感/收藏动机/争议感），一条笔记取最强的 1~2 个机制。
2. **数成分布**：形态 X/20、机制 X/20、标题高频词 top 10~14。**≥40% 才叫共性，20%~40% 叫次主流，<20% 且只有 1~2 条支撑的只能叫个例**，不许包装成趋势。
3. **拆成三张清单**：可复用 / 不可复用（身份壁垒、资源壁垒、账号壁垒）/ 空位。**不可复用清单不能省**——只给"可以抄的"等于把用户往坑里带。

样本 < 8 条时不做占比，只做定性描述，并写明"样本 N 条，结论仅供参考"。

---

## 第 4 步：对比（用户问"变没变""哪个更值得写"时做，否则跳过）

单次快照只能说"现在什么样"，说不了"在变好还是变差""A 和 B 哪个能进"。这两类问题要靠两次以上查询的**对比**。

**触发条件**：用户问"最近还火吗""比上个月怎么样""哪个赛道更值得写""我该选 A 还是 B"，或第 1 步做了赛道下切拿到多组数据。

**做法**：把每次查询的结果 JSON 各自落盘，再用 `scripts/compare_sets.py` 归一对齐（离线脚本，不联网、不需要 Key）。

```bash
S=~/.claude/skills/space-xhs-hotspot/scripts

# 多赛道横向：同一时间窗，谁的量级更高、形态和钩子有什么差别
python3 $S/compare_sets.py 通勤穿搭=a.json 老钱风=b.json 学生党穿搭=c.json --top 20

# 单赛道纵向：同一个词，本周 vs 上月
python3 $S/compare_sets.py 本周=this.json 上月=last.json --label-kind time

# 要结构化数据自己再加工时
python3 $S/compare_sets.py a.json b.json --json
```

- 输入是**已落盘的 JSON**，两种格式自动识别：红狐脚本输出（`items[]`）、怪壳 `search-cli.js` 的结果文件（`results[]`）。怪壳 **stdout 混着日志行不能直接解析**，用它自动落盘的 `xiaohongshu-content-tools/logs/*_search.json`。
- 标签就是查询词，脚本会用它剔除高频词里的查询词本身（不然 top 词永远是查询词自己）。
- 输出：对比总表（样本/互动中位数/互动最高/藏赞比/评赞比/小号占比/主形态/主钩子）+ 每组的形态、钩子、标题高频词、最高互动笔记 + 词层交集与独有词。
- 样本 < 8 条的组，脚本会自己打 ⚠️，转述时要带上这句警告。

**怎么读对比结果**：

| 观察 | 结论 |
|---|---|
| 同词跨时间：互动中位数明显下滑、高频词换了一批 | 热点在退潮，别追旧说法，跟着新高频词走 |
| 同词跨时间：中位数稳定、高频词几乎不变 | 常青需求，什么时候写都行，拼的是执行 |
| 跨赛道：A 的中位数高但主形态是"身份背书" | 天花板高但**你进不去**，要在结论里说破 |
| 跨赛道：B 中位数中等但小号占比高、主形态是清单 | 这才是新号的入口 |
| 词层"共有高频词" | 跨赛道通用钩子，可复用性最强 |
| 词层"独有词" | 该赛道的专属搜索入口，交给 `space-xhs-title` |

**红线**：不同数据源的数字**不能直接比大小**（红狐是 1000+ 收录库的入库快照，怪壳是实时抓取的全量搜索）。跨路线对比时只比**结构性指标**（形态占比、藏赞比、高频词），并注明"两组数据来自不同路线，绝对量级不可比"。

---

## 输出格式

### ① 数据说明（一行）
> 数据源：红狐 API｜收录门槛 互动 1000+｜每日 7 点更新昨日数据｜互动数为入库快照
> 📅 查询范围：X月X日 - X月X日｜关键词：A、B、C

### ② 热点笔记表格

有关键词（红狐路线，带评分）：

| # | 笔记标题 | 作者(粉丝) | 互动 | 赞/藏/评 | 发布 | 相关性 | 热度 | 时效 | **总分** |
|---|---|---|---|---|---|---|---|---|---|

无关键词全站热门 / 非红狐路线（无评分字段，按互动降序）：

| # | 笔记标题 | 作者(粉丝) | 互动 | 赞/藏/评 | 发布 |
|---|---|---|---|---|---|

- 标题和作者都做成 Markdown 链接。笔记链接**原样使用返回值**（含 `xsec_token`），作者链接 `https://www.xiaohongshu.com/user/profile/{authorId}`。
- 默认展示前 10 条，多于 10 条时在表下写"共 X 条，已展示前 10，要全部就说一声"——**说明即可，不要停下来等回复**，直接继续往下做趋势判断。
- 多关键词并行查询时，按关键词分组小标题，每组展示 top 5。

### ③ 赛道体检（对应第 3 步前五个切口）

```
形态分布：清单 45% ｜ 测评 25% ｜ 经历叙事 20% ｜ 其他 10%
钩子分布：数字 12/20，人群标签 9/20，痛点原话 5/20
账号量级：top10 里 4 个 <1 万粉 → 内容驱动，新号可进
时间分布：8/10 集中在近 5 天 → 上升期
互动结构：收藏平均高于点赞 1.3 倍 → 工具型需求为主
```

每条后面跟一句话解读，不要只丢数字。

### ④ 爆款共性（样本 ≥ 8 条时必给，格式见 `references/pattern_extraction.md`）

```
共性：收藏动机 12/20（60%，主流）｜身份感 9/20（45%，主流）｜反差感 3/20（个例）
可复用：清单式收纳合集 —— 对标《XXX》1.2w（链接）—— 换到你的赛道就是「租房党的 X 件……」
不可复用：top3 有 2 条是三甲医生出镜科普（身份壁垒），你没这个身份照抄说服力归零
空位：教程形态占比 0，但该赛道读者藏赞比 1.3 明显偏工具型 —— 可能是机会，也可能是平台不给这个形态流量，先小成本试
选题公式：收藏动机 + 清单 + 打工人 →「打工人通勤的 5 件平价单品，闭眼买」
```

### ⑤ 对比结论（只在做了第 4 步时给）

贴 `compare_sets.py` 的对比总表，后面跟 2~3 句解读：量级在涨还是在跌、新号能进哪个、高频词换没换。跨路线数据要标注"绝对量级不可比"。

### ⑥ 拓词与邻近机会
`relatedSearches` 原样列出，并标注哪几个值得下一轮查（挑与用户人设匹配的），哪几个是无关噪音。非红狐路线用本轮标题高频词代替，并注明来源不同。

### ⑦ 选题建议（3~5 条，交付重点）

每条按这个卡片给，让用户能整条粘给 `space-xhs-title` / `space-xhs-writer`：

```
【选题 N】一句话选题
  形态：清单 / 教程 / 测评 / 叙事 / 避雷
  依据：对标笔记《XXX》互动 1.2w（链接），同类形态本轮出现 5 次
  钩子方向：数字 + 人群标签（如"打工人的 5 个 XX"）
  预期互动结构：偏收藏 → 内容要有可保存的清单/模板
  风险：赛道已被 50w 粉大号占据 / 属于时效热点，7 天后失效
```

**依据必须挂到具体笔记**，不能写"因为这个方向很火"。没有对标笔记支撑的选题不要给。选题应当从 ④ 的选题公式长出来，公式和选题要能互相对上。

---

## 红线

- **不编数据**。互动数、粉丝数、发布时间一律来自接口返回；WebSearch 兜底时明确写"无互动数据"，不要估算。
- **链接不改写**。丢了 `xsec_token` 的链接等于给了个 404，比不给更糟。
- **不把"搜不到"说成"没人写"**。收录门槛是互动 1000+，两者不是一回事，必须区分表述。
- **不把相关说成因果**。"top10 里 6 篇带数字标题"是观察，"用数字标题就能爆"是错误推论——写成"这个赛道读者对数字钩子响应更好"。
- **不承诺结果**。给的是概率更高的方向，不是"照这个写必爆"。
- **不只给能抄的**。共性提取必须同时给「不可复用」清单，指明是身份壁垒、资源壁垒还是账号壁垒。
- **不跨源比绝对值**。不同数据源的互动数口径不同，对比时只比结构性指标并注明。
- **超窗口不糊弄**。用户要 60 天，就说"库内只有 30 天，已按 30 天返回"，不要默默改成 30 天当作满足了需求。
- **不越权深挖**。要评论区/博主全量作品时，走怪壳路线并说明需要 `GUAIKEI_API_TOKEN`，不要用搜索结果脑补评论区在说什么。

---

## 自检（输出前过一遍）

- [ ] 顶部有数据源标注 + 收录口径 + 时间范围？
- [ ] 所有笔记链接都保留了 `xsec_token` 原样？
- [ ] 泛化词是否已查 `xhs_sectors.json` 做赛道下切并并行查询，而不是拿大词硬查？
- [ ] 数据不足时是否扩了时间窗并告知，而不是偷偷换词？
- [ ] 五个切口的赛道体检是否都给了，且每条有解读不只有数字？粉丝字段缺失时是否如实说明而不是估算？
- [ ] 样本 ≥8 条时是否给了共性提取，且**三张清单齐全**（可复用 / 不可复用 / 空位）？占比是否按 40%/20% 阈值分级表述？
- [ ] 做了多组查询时，是否跑了 `compare_sets.py` 而不是拿眼睛估？跨路线是否标了"绝对量级不可比"？
- [ ] 选题建议是否 ≥3 条，每条都挂了具体对标笔记和链接？
- [ ] 有没有出现接口没返回的数字？

---

## 目录结构

```
space-xhs-hotspot/
├── SKILL.md
├── scripts/
│   ├── fetch_xhs_hot_articles.py      # 红狐 API 查询脚本（需 REDFOX_API_KEY）
│   │                                  # 来源：creator-buddy/skills/xhs-hotnotes，原样复用未改动
│   └── compare_sets.py                # 第 4 步用：多组结果 JSON 归一对比（离线，不需要 Key）
│                                      # 吃红狐 items[] 和怪壳 results[] 两种格式，自动识别
└── references/
    ├── data_sources.md                # 三条路线的命令、参数、报错处理、字段映射、怪壳实测须知
    ├── xhs_hot_article_format.md      # 红狐接口字段说明（同样来自 xhs-hotnotes）
    ├── xhs_sectors.json               # 第 1 步用：24 个一级赛道 × 四维度细分词库
    └── pattern_extraction.md          # 第 3 步用：爆款共性提取方法（标签表、阈值、三张清单、选题公式）
```

**按需读取**：`data_sources.md` 每次执行前必读；`xhs_sectors.json` 只在需要赛道下切时读；`pattern_extraction.md` 只在样本 ≥8 条要做共性提取时读；`xhs_hot_article_format.md` 只在走红狐路线时读。

