feat: 增加运营技巧

This commit is contained in:
richarjiang
2026-04-19 16:15:11 +08:00
parent 2e4ee085cc
commit 35a8a4c3a2
53 changed files with 1304 additions and 3325 deletions

View File

@@ -1,190 +0,0 @@
---
name: xiaohongshu-note-analyzer
description: 全面分析小红书笔记的内容质量、关键词优化、标题吸引力、敏感内容风险、商业化程度、互动潜力等。适用于发布前审核、内容优化建议、提升笔记曝光率。触发词包括"分析小红书笔记"、"小红书内容审核"、"笔记优化"、"XHS分析",或上传小红书笔记内容请求分析。
---
# 小红书笔记分析器 (XiaoHongShu Note Analyzer)
对小红书笔记进行全方位分析,提供优化建议,提升内容质量和曝光率。
## 分析维度
1. **关键词分析** — 搜索热度、关键词布局、标签优化
2. **标题/首段吸引力** — 爆款标题元素、首图文案
3. **敏感内容风险** — 违规词检测、限流风险评估
4. **商业化程度** — 软广硬广识别、自然度评分
5. **互动触发潜力** — 讨论点、分享动机、收藏价值
6. **内容结构** — 排版、emoji使用、段落节奏
## 分析流程
```
1. 提取笔记内容 → 标题、正文、标签、图片描述
2. 关键词分析 → 核心词、长尾词、布局检查
3. 敏感词扫描 → 违规风险、限流风险
4. 商业化评估 → 广告痕迹、自然度
5. 互动潜力评估 → 讨论点、情感共鸣
6. 生成优化建议 → 具体修改方案
```
## 1. 关键词分析
### 检查要点
| 维度 | 优秀 | 待改进 |
|------|------|--------|
| 核心关键词 | 标题+首段+正文+标签都包含 | 仅出现1-2处 |
| 长尾关键词 | 3-5个相关长尾词自然分布 | 无长尾词或堆砌 |
| 标签数量 | 5-10个相关标签 | <3个或>15个 |
| 关键词密度 | 2-3%自然出现 | <1%或>5%堆砌 |
### 关键词布局公式
```
标题: 必含核心关键词 + 吸引词
首段(前50字): 核心关键词 + 痛点/好奇点
正文: 长尾关键词自然分布
标签: #核心词 #长尾词 #场景词 #人群词
```
详见 `references/keyword-strategy.md`
## 2. 标题/首段吸引力
### 爆款标题公式
| 类型 | 公式 | 示例 |
|------|------|------|
| 数字型 | 数字+关键词+结果 | "5个技巧让你月瘦10斤" |
| 痛点型 | 痛点+解决方案 | "毛孔粗大?这个方法亲测有效" |
| 好奇型 | 悬念+关键词 | "闺蜜问我怎么突然变白的..." |
| 对比型 | Before/After | "用了这个精华,同事都问我怎么了" |
| 权威型 | 身份+干货 | "皮肤科医生自用的5款防晒" |
| 情绪型 | 强烈情绪词 | "后悔没早点知道!这个神器太绝了" |
### 首段黄金50字
首段必须包含:
- ✅ 核心关键词
- ✅ 痛点/需求点
- ✅ 吸引继续阅读的钩子
- ✅ 与封面图呼应
详见 `references/title-formulas.md`
## 3. 敏感内容风险评估
### 风险等级
| 等级 | 说明 | 后果 |
|------|------|------|
| 🔴 高危 | 明确违规词 | 删帖/封号 |
| 🟠 中危 | 灰色地带词 | 限流/不推荐 |
| 🟡 低危 | 可能触发审核 | 延迟发布 |
| 🟢 安全 | 无敏感内容 | 正常推荐 |
### 常见敏感类别
1. **医疗健康类** — 疾病名称、药品、治疗效果承诺
2. **金融理财类** — 收益承诺、投资建议、借贷
3. **政治敏感类** — 时政、领导人、敏感事件
4. **虚假宣传类** — 最、第一、100%、绝对
5. **引流违规类** — 微信号、外链、二维码暗示
6. **低俗擦边类** — 性暗示、身材过度暴露
详见 `references/sensitive-words.md`
## 4. 商业化程度评估
### 自然度评分标准
| 分数 | 描述 | 特征 |
|------|------|------|
| 9-10 | 纯分享 | 无品牌露出,真实体验 |
| 7-8 | 软植入 | 自然提及品牌,不刻意 |
| 5-6 | 明显软广 | 品牌多次出现,有推荐意图 |
| 3-4 | 硬广 | 明显推销,价格引导 |
| 1-2 | 纯广告 | 通篇产品介绍,无真实体验 |
### 降低商业感技巧
- ✅ 先讲痛点/故事,后引出产品
- ✅ 提及缺点(真实感)
- ✅ 对比其他产品(客观感)
- ✅ 强调个人体验而非产品功能
- ❌ 避免价格、购买链接、促销信息
- ❌ 避免品牌名在标题
## 5. 互动触发潜力
### 讨论触发点
| 类型 | 方法 | 示例 |
|------|------|------|
| 提问式 | 结尾抛出问题 | "你们觉得哪个颜色更好看?" |
| 争议式 | 轻度争议观点 | "我觉得XX比XX好用有人同意吗" |
| 求助式 | 请求建议 | "姐妹们帮我看看选哪个!" |
| 共鸣式 | 引发情感共鸣 | "有没有和我一样的..." |
| 抽奖式 | 互动福利 | "评论区抽3位送同款" |
### 分享动机触发
用户分享笔记的原因:
1. **实用价值** — 干货教程、省钱攻略
2. **社交货币** — 显得有品味/见识
3. **情感共鸣** — "说出了我的心声"
4. **收藏备用** — 清单、合集、测评
### 收藏价值评估
高收藏内容特征:
- ✅ 清单/合集形式
- ✅ 步骤教程
- ✅ 对比测评
- ✅ 省钱/避坑指南
- ✅ 信息密度高
## 输出格式
```markdown
# 小红书笔记分析报告
## 📊 综合评分: X/10
## 1⃣ 关键词分析
- **核心关键词**: [识别的关键词]
- **关键词布局**: ✅/❌ [评价]
- **标签优化**: [建议]
## 2⃣ 标题/首段评估
- **标题类型**: [数字型/痛点型/...]
- **吸引力评分**: X/10
- **优化建议**: [具体建议]
## 3⃣ 敏感内容风险
- **风险等级**: 🟢/🟡/🟠/🔴
- **检测到的敏感词**: [列表]
- **修改建议**: [具体建议]
## 4⃣ 商业化程度
- **自然度评分**: X/10
- **商业痕迹**: [分析]
- **降低商业感建议**: [具体建议]
## 5⃣ 互动潜力
- **讨论触发点**: ✅/❌
- **分享动机**: [分析]
- **收藏价值**: X/10
## 6⃣ 优化后版本
[提供优化后的标题和首段]
## 📝 修改优先级
1. [最重要的修改]
2. [次重要的修改]
3. [可选优化]
```
## 分析示例
详见 `references/analysis-examples.md`

View File

@@ -1,229 +0,0 @@
# 分析示例 (Analysis Examples)
## 示例1: 护肤类笔记分析
### 原始笔记
**标题**: 分享一个好用的精华
**正文**:
```
最近用了一款精华感觉还不错,分享给大家。
这个精华质地很清爽,吸收也快。
我用了大概两周,感觉皮肤状态好了一些。
推荐给大家试试。
#精华 #护肤
```
### 分析报告
```markdown
# 小红书笔记分析报告
## 📊 综合评分: 4/10
## 1⃣ 关键词分析
- **核心关键词**: 精华、护肤
- **关键词布局**: ❌ 仅在标签出现,标题和正文缺乏
- **标签优化**: ❌ 只有2个标签过少
- **问题**: 无长尾关键词,难以被精准搜索触达
**优化建议**:
- 标题加入具体关键词:"油皮精华"、"补水精华"
- 增加标签至5-8个
- 正文加入肤质、功效等长尾词
## 2⃣ 标题/首段评估
- **标题类型**: 无类型(过于笼统)
- **吸引力评分**: 2/10
- **问题**:
- "好用"无具体信息
- 无数字、无痛点、无悬念
- 不知道是什么精华、适合什么肤质
**优化建议**:
将 "分享一个好用的精华"
改为 "油皮亲测|这款平价精华控油效果绝了"
## 3⃣ 敏感内容风险
- **风险等级**: 🟢 安全
- **检测到的敏感词**: 无
- **说明**: 内容较为保守,无违规风险
## 4⃣ 商业化程度
- **自然度评分**: 6/10
- **商业痕迹**: 低,但内容过于单薄
- **问题**: 缺乏真实体验细节,反而显得不够真诚
**优化建议**:
- 加入使用前的皮肤问题
- 加入具体使用感受(气味、肤感)
- 可以提一个小缺点增加真实感
## 5⃣ 互动潜力
- **讨论触发点**: ❌ 无
- **分享动机**: 低(无实用价值)
- **收藏价值**: 2/10
**问题**:
- 无提问引导评论
- 内容信息量低,无收藏必要
**优化建议**:
- 结尾加问题:"姐妹们还有什么平价精华推荐吗?"
- 加入使用步骤增加实用性
## 6⃣ 优化后版本
**标题**: 油皮亲测|这款百元精华控油效果绝了
**正文**:
```
作为一个大油皮,夏天真的太难了😭
出油、毛孔粗、还容易闷痘...
试了很多精华,这款终于让我看到效果!
💧质地:水状精华,清爽不粘腻
👃气味:淡淡的草本味,很舒服
✨效果:用了两周,出油明显减少,毛孔也没那么明显了
唯一小缺点是瓶口设计不太好控制用量
油皮姐妹可以试试!
你们还有什么控油精华推荐吗?评论区告诉我👇
#油皮护肤 #控油精华 #平价精华 #夏日护肤 #毛孔护理 #学生党护肤
```
## 📝 修改优先级
1. 【必改】标题重写,加入关键词和吸引点
2. 【必改】增加标签至5-8个
3. 【建议】丰富正文内容,加入真实体验
4. 【建议】结尾加互动问题
```
---
## 示例2: 检测到敏感内容的笔记
### 原始笔记
**标题**: 这个方法治好了我的痘痘!
**正文**:
```
长了三年的痘痘终于治好了!
用了这个产品,痘痘全消了,绝对有效!
加我VXxxx123我告诉你具体方法
这是最好的祛痘方法100%有效!
```
### 分析报告
```markdown
# 小红书笔记分析报告
## 📊 综合评分: 1/10 (高风险,不建议发布)
## 3⃣ 敏感内容风险
- **风险等级**: 🔴 高危
- **检测到的敏感词**:
1. "治好" — 医疗效果承诺
2. "绝对有效" — 绝对化用语
3. "加我VX" — 引流违规
4. "最好的" — 绝对化用语
5. "100%有效" — 虚假宣传
**后果**: 大概率被删帖,可能影响账号权重
## 修改建议
| 原文 | 问题 | 修改为 |
|------|------|--------|
| 治好了我的痘痘 | 医疗效果承诺 | 我的痘痘情况改善了很多 |
| 绝对有效 | 绝对化用语 | 我个人体验很有效 |
| 加我VX | 引流违规 | 删除,或改为"可以评论区交流" |
| 最好的 | 绝对化用语 | 我用过很有效的 |
| 100%有效 | 虚假宣传 | 对我来说效果很好 |
## 优化后版本
**标题**: 困扰我三年的痘痘终于好转了!分享我的方法
**正文**:
```
长了三年的痘痘,最近终于有好转了!
分享一下我的祛痘心得,希望对姐妹们有帮助~
⚠️ 每个人肤质不同,我的方法仅供参考哦
[具体方法内容]
有同样困扰的姐妹可以评论区交流~
你们有什么祛痘好方法吗?👇
```
```
---
## 示例3: 商业化程度过高的笔记
### 原始笔记
**标题**: XX品牌精华测评
**正文**:
```
今天给大家介绍XX品牌的明星产品
这款精华含有专利成分XXX官方介绍可以XXX。
现在官方旗舰店有活动原价299现在只要199
姐妹们快去抢!链接在评论区!
```
### 分析报告
```markdown
## 4⃣ 商业化程度
- **自然度评分**: 2/10
- **商业痕迹**:
- ❌ 标题直接品牌名
- ❌ 复述官方介绍而非真实体验
- ❌ 强调价格促销
- ❌ 引导购买链接
**问题**: 这是一篇明显的硬广,用户信任度低,平台可能限流
## 优化建议
1. **标题去品牌化**: 改为功效/场景导向
2. **先讲故事/痛点**: 不要上来就介绍产品
3. **真实体验为主**: 质地、气味、使用感受
4. **加入小缺点**: 增加可信度
5. **删除价格促销**: 避免商业感
6. **不提链接**: 想了解的自然会搜
## 优化后版本
**标题**: 换季维稳精华|敏感肌亲测不踩雷
**正文**:
```
换季皮肤又开始闹脾气了😢
泛红、起皮、还有点刺痛...
朋友推荐我试了这款精华,用了两周来反馈!
💧质地:精华液偏水状,流动性很好
👃气味:几乎没什么味道,敏感肌友好
✨使用感:上脸很温和,没有刺激感
我连续用了两周,泛红情况确实好了很多
唯一觉得不太好的是按压头有点难控制用量
敏感肌姐妹可以考虑~你们换季用什么维稳?👇
#敏感肌护肤 #换季护肤 #维稳精华 #敏感肌精华推荐
```
```

View File

@@ -1,170 +0,0 @@
# 小红书关键词策略 (Keyword Strategy)
## 关键词类型
### 1. 核心关键词 (Core Keywords)
用户搜索的主要词汇,竞争激烈但流量大
**特征**:
- 1-3个字
- 高搜索量
- 竞争激烈
**示例**: 护肤、穿搭、减肥、美妆、旅游
### 2. 长尾关键词 (Long-tail Keywords)
更具体的搜索词,竞争小但精准
**特征**:
- 4-10个字
- 搜索量较小
- 用户意图明确
- 转化率高
**示例**:
- 核心词"护肤" → 长尾词"油皮夏天护肤步骤"
- 核心词"穿搭" → 长尾词"小个子梨形身材穿搭"
### 3. 场景关键词 (Scenario Keywords)
描述使用场景的词汇
**示例**: 约会、通勤、旅游、居家、上班
### 4. 人群关键词 (Audience Keywords)
描述目标人群的词汇
**示例**: 学生党、上班族、宝妈、新手、敏感肌
### 5. 修饰关键词 (Modifier Keywords)
增加描述的词汇
**示例**: 平价、大牌、小众、百元、高性价比
## 关键词布局策略
### 布局位置优先级
```
1. 标题 (权重最高)
2. 首段前50字 (权重高)
3. 正文小标题 (权重中)
4. 正文内容 (权重中)
5. 标签 (权重中)
6. 图片OCR文字 (权重低)
```
### 最佳布局公式
```
标题: [核心关键词] + [修饰词] + [吸引词]
例: "油皮护肤|平价好用的夏日护肤清单"
首段: 包含核心关键词 + 1-2个长尾关键词
例: "作为一个油皮,夏天护肤真的太难了,
出油、毛孔、闷痘...今天分享我的油皮夏日护肤心得"
正文: 每200字自然出现1次关键词变体
例: "这款控油精华"、"适合油皮的XX"
标签: 5-10个覆盖不同类型关键词
例: #油皮护肤 #夏日护肤 #控油 #平价护肤 #学生党护肤
```
## 标签策略
### 标签数量
- **最佳**: 5-10个
- **最少**: 3个
- **最多**: 不超过15个
### 标签组合公式
```
2-3个 核心词标签: #护肤 #美妆
2-3个 长尾词标签: #油皮护肤 #夏日护肤推荐
1-2个 场景词标签: #通勤妆容 #约会穿搭
1-2个 人群词标签: #学生党 #新手化妆
1-2个 热门话题标签: #好物分享 #我的日常
```
### 标签注意事项
**正确做法**:
- 标签与内容高度相关
- 混合大词和小词
- 使用平台热门话题标签
**错误做法**:
- 堆砌不相关热门标签
- 只用大词不用长尾词
- 标签与内容不符(影响推荐精准度)
## 关键词密度
### 理想密度
- **核心关键词**: 2-3% (每100字出现2-3次)
- **长尾关键词**: 每个出现1-2次即可
### 检查方法
```
关键词密度 = (关键词出现次数 × 关键词字数) ÷ 总字数 × 100%
```
### 密度问题
| 密度 | 问题 | 解决方案 |
|------|------|----------|
| <1% | 关键词不足,搜索难触达 | 在标题、首段、小标题增加关键词 |
| 2-3% | ✅ 理想状态 | 保持 |
| >5% | 关键词堆砌,影响阅读 | 使用同义词替换,减少重复 |
## 关键词挖掘方法
### 1. 小红书搜索框
- 输入核心词,查看下拉推荐词
- 这些是用户真实搜索的长尾词
### 2. 相关笔记分析
- 查看同类爆款笔记使用的关键词和标签
- 分析评论区用户使用的词汇
### 3. 关键词组合矩阵
```
核心词 × 人群词 = 长尾词
护肤 × 油皮 = 油皮护肤
护肤 × 学生党 = 学生党护肤
护肤 × 敏感肌 = 敏感肌护肤
核心词 × 场景词 = 长尾词
穿搭 × 通勤 = 通勤穿搭
穿搭 × 约会 = 约会穿搭
核心词 × 修饰词 = 长尾词
护肤 × 平价 = 平价护肤
护肤 × 大牌 = 大牌护肤
```
## 关键词分析输出模板
```markdown
### 关键词分析结果
**识别的核心关键词**: [词汇]
**识别的长尾关键词**: [词汇列表]
**当前布局情况**:
- 标题: ✅/❌ 包含核心词
- 首段: ✅/❌ 包含核心词
- 正文: X次出现
- 标签: X个相关标签
**关键词密度**: X%
**优化建议**:
1. [具体建议]
2. [具体建议]
**推荐增加的标签**:
#标签1 #标签2 #标签3
```

View File

@@ -1,113 +0,0 @@
# 小红书敏感词库 (Sensitive Words Reference)
## 🔴 高危词汇 (删帖/封号风险)
### 医疗违规
- 治愈、根治、药到病除
- 处方药名称
- 癌症、肿瘤等重大疾病+治疗方案
- 医美手术具体操作描述
### 金融违规
- 稳赚、保本、高收益
- 具体投资回报率承诺
- 代投、跟单、带单
- 虚拟货币交易引导
### 政治敏感
- 国家领导人姓名+评价
- 敏感政治事件
- 境外政治内容
### 违法内容
- 赌博、博彩相关
- 毒品、违禁品
- 枪支、管制刀具
- 色情、低俗内容
### 引流违规
- 直接微信号/QQ号
- "私我"、"滴滴"、"DD"
- 明显外链、二维码
- "主页有联系方式"
## 🟠 中危词汇 (限流风险)
### 绝对化用语
- 最好、最佳、第一、首选
- 100%、绝对、肯定
- 全网最低、史上最强
- 国家级、世界级
### 医疗擦边
- 祛痘、美白、抗衰(需谨慎表述)
- 减肥、瘦身(避免效果承诺)
- 功效承诺类描述
- "亲测有效"+"医疗效果"
### 商业敏感
- 价格对比贬低竞品
- "比XX便宜"
- 购买链接暗示
- 过度促销用语
### 版权风险
- 未授权品牌logo
- 影视剧截图过多
- 音乐版权内容
- 他人原创内容搬运
## 🟡 低危词汇 (可能延迟审核)
### 可能触发审核
- 赚钱、副业、兼职
- 借贷、贷款、信用卡
- 整容、医美、手术
- 政策、法规相关
### 行业特殊词
- 保健品功效描述
- 母婴产品安全声明
- 食品功效暗示
- 化妆品成分功效
## ✅ 安全表述替换
| 危险表述 | 安全替换 |
|----------|----------|
| 最好的 | 我用过很不错的 |
| 100%有效 | 我个人体验很好 |
| 治愈了我的XX | 改善了我的XX情况 |
| 加我微信 | 可以交流(不留号) |
| 绝对好用 | 亲测感觉很棒 |
| 全网最低价 | 我买的时候很划算 |
| 药到病除 | 对我的情况有帮助 |
| 专家推荐 | 我看到有人推荐 |
| 官方认证 | 我在官方渠道买的 |
## 行业特殊规则
### 美妆护肤
- ❌ 避免:药妆、医学护肤、治疗效果
- ✅ 使用:护肤体验、个人感受、肤感描述
### 母婴育儿
- ❌ 避免:治疗婴儿疾病、代替医嘱
- ✅ 使用:个人育儿经验、仅供参考
### 健身减肥
- ❌ 避免X天瘦X斤、快速减肥
- ✅ 使用:健身记录、饮食分享、个人体验
### 金融理财
- ❌ 避免:投资建议、收益承诺
- ✅ 使用:个人理财记录、学习笔记
## 检测方法
分析笔记时,按以下优先级检查:
1. **全文扫描** — 检查是否包含高危词库中的词汇
2. **上下文分析** — 判断中危词汇的使用语境
3. **意图识别** — 判断是否有引流、违规推广意图
4. **替换建议** — 提供安全表述替换方案

View File

@@ -1,142 +0,0 @@
# 爆款标题公式 (Title Formulas)
## 核心原则
好标题 = **关键词** + **情绪触发** + **价值预期**
## 八大爆款标题公式
### 1⃣ 数字具象型
**公式**: 数字 + 关键词 + 具体结果
```
✅ "5个技巧让我月瘦10斤"
✅ "3步画出日杂妆容"
✅ "7天养成早起习惯的方法"
✅ "100元搞定一周穿搭"
```
**为什么有效**: 数字给人具体、可执行、有结果的感觉
### 2⃣ 痛点解决型
**公式**: 痛点问题 + 解决方案暗示
```
✅ "毛孔粗大?这个方法亲测有效"
✅ "总是存不下钱?试试这个记账法"
✅ "拍照不上镜?学会这几个姿势"
✅ "皮肤暗沉怎么办?我的美白心得"
```
**为什么有效**: 直击用户痛点,暗示有解决方案
### 3⃣ 好奇悬念型
**公式**: 制造信息缺口 + 引发好奇
```
✅ "闺蜜问我怎么突然变白的..."
✅ "用了这个之后,同事都问我怎么了"
✅ "原来一直用错了!难怪没效果"
✅ "看完这个我把XX扔了"
```
**为什么有效**: 信息缺口让人想知道答案
### 4⃣ 对比反差型
**公式**: Before vs After / 意外反差
```
✅ "从120斤到100斤我做了这件事"
✅ "黄皮穿对颜色,气质直接翻倍"
✅ "换了这个枕头,睡眠质量完全不一样"
✅ "以前嫌贵,用了才知道值"
```
**为什么有效**: 对比产生冲击力,暗示巨大改变
### 5⃣ 身份权威型
**公式**: 身份背书 + 干货内容
```
✅ "皮肤科医生自用的5款防晒"
✅ "健身教练不会告诉你的减脂真相"
✅ "10年化妆师的底妆技巧"
✅ "留学生的省钱购物攻略"
```
**为什么有效**: 专业身份增加可信度
### 6⃣ 情绪共鸣型
**公式**: 强烈情绪词 + 内容主题
```
✅ "后悔没早点知道!这个神器太绝了"
✅ "救命!这个也太好看了吧"
✅ "绝绝子!一整个爱住"
✅ "哭了,早买早享受"
```
**为什么有效**: 情绪感染,引发共鸣
### 7⃣ 场景代入型
**公式**: 具体场景 + 解决方案
```
✅ "约会前一晚这样护肤"
✅ "出门旅游必带的10件好物"
✅ "上班通勤听的播客推荐"
✅ "租房改造500块焕新"
```
**为什么有效**: 场景具体,用户容易代入
### 8⃣ 清单合集型
**公式**: 主题 + 合集/清单/盘点
```
✅ "2024年度爱用物大盘点"
✅ "学生党平价护肤清单"
✅ "小个子穿搭合集显高10cm"
✅ "懒人早餐食谱合集"
```
**为什么有效**: 信息密度高,收藏价值高
## 标题优化检查清单
### 必须包含 ✅
- [ ] 核心关键词
- [ ] 情绪触发点或价值点
- [ ] 字数控制在20字以内最佳15-18字
### 避免 ❌
- [ ] 纯品牌名做标题
- [ ] 过于笼统无具体信息
- [ ] 绝对化用语(最好、第一)
- [ ] 标题党但内容不符
## 首段黄金50字
首段决定用户是否继续阅读,必须包含:
### 结构公式
```
痛点/场景引入(10-15字) +
解决方案预告(15-20字) +
继续阅读的钩子(10-15字)
```
### 示例
```
❌ "今天给大家分享一个好东西"(无信息量)
✅ "换季皮肤又开始爆痘了😭
试了很多方法终于找到有效的,
往下看我是怎么3周恢复的👇"
```
### 首段钩子技巧
- 抛出问题:"你们有没有这种情况?"
- 制造悬念:"但是有个关键点..."
- 预告价值:"下面分享我的方法"
- 引发共鸣:"和我一样的姐妹看过来"

View File

@@ -1,25 +0,0 @@
MIT License
Copyright (c) 2025
This license applies to the shell script wrapper layer in this repository only.
The xiaohongshu-mcp binary (https://github.com/xpzouying/xiaohongshu-mcp) is a
separate project with its own licensing terms.
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

View File

@@ -1,315 +0,0 @@
# XHS AI Toolkit
<p align="center">
<b>Make AI understand your Xiaohongshu (RedNote)</b>
</p>
<p align="center">
<a href="README_CN.md">简体中文</a> | English
</p>
<p align="center">
<img alt="License" src="https://img.shields.io/badge/license-MIT-blue.svg">
<img alt="Platform" src="https://img.shields.io/badge/platform-Linux%20%7C%20macOS-lightgrey.svg">
<img alt="Python" src="https://img.shields.io/badge/python-3.10+-green.svg">
<img alt="MCP" src="https://img.shields.io/badge/MCP-compatible-purple.svg">
</p>
---
AI-powered toolkit for **Xiaohongshu (小红书 / RedNote)** that turns your favorite posts into AI memory.
- **MCP Integration** — Search, browse, comment via AI assistants
- **Trend Tracking** — Auto-generate topic reports with engagement analytics
- **Memory Export** — Convert your liked/saved posts into AI-searchable knowledge base
Built on [xiaohongshu-mcp](https://github.com/xpzouying/xiaohongshu-mcp) and [XHS-Downloader](https://github.com/JoeanAmier/XHS-Downloader).
## Features
| Feature | Description |
|---------|-------------|
| Search | Search posts by keywords |
| Feed | Get homepage recommendations |
| Post Details | Fetch post content, comments, engagement stats |
| Comment | Post comments to notes |
| User Profile | Get user info and their posts |
| Trend Tracking | Auto-generate topic analysis reports |
| Long Image Export | Export posts as annotated JPG long images |
| Memory Export | Export liked/saved posts as Markdown for AI memory |
## Quick Start
### 1. Install xiaohongshu-mcp
Download from [GitHub Releases](https://github.com/xpzouying/xiaohongshu-mcp/releases):
```bash
# Linux x64
wget https://github.com/xpzouying/xiaohongshu-mcp/releases/latest/download/xiaohongshu-mcp-linux-amd64.tar.gz
wget https://github.com/xpzouying/xiaohongshu-mcp/releases/latest/download/xiaohongshu-login-linux-amd64.tar.gz
# macOS ARM
wget https://github.com/xpzouying/xiaohongshu-mcp/releases/latest/download/xiaohongshu-mcp-darwin-arm64.tar.gz
wget https://github.com/xpzouying/xiaohongshu-mcp/releases/latest/download/xiaohongshu-login-darwin-arm64.tar.gz
```
Install:
```bash
mkdir -p ~/.local/bin
tar -xzf xiaohongshu-mcp-*.tar.gz -C ~/.local/bin/
tar -xzf xiaohongshu-login-*.tar.gz -C ~/.local/bin/
cd ~/.local/bin
mv xiaohongshu-mcp-* xiaohongshu-mcp
mv xiaohongshu-login-* xiaohongshu-login
chmod +x xiaohongshu-mcp xiaohongshu-login
```
### 2. Install This Toolkit
```bash
# Clone to OpenClaw workspace
git clone https://github.com/zhjiang22/openclaw-xhs.git
cp -r openclaw-xhs ~/.openclaw/workspace/skills/xiaohongshu
# Or use symlink
ln -s /path/to/openclaw-xhs ~/.openclaw/workspace/skills/xiaohongshu
# Verify installation
cd ~/.openclaw/workspace/skills/xiaohongshu/scripts
./install-check.sh
```
### 3. Login (Get Cookies)
**Option A: Desktop Environment**
```bash
./login.sh # Opens browser, scan QR code with Xiaohongshu app
```
**Option B: Headless Server**
Get cookies on your local machine, then copy to server:
```bash
# On local machine with GUI
./xiaohongshu-login
# Cookies saved to /tmp/cookies.json
# Copy to server
scp /tmp/cookies.json user@server:~/.xiaohongshu/cookies.json
```
### 4. Start Service
```bash
./start-mcp.sh # Headless mode
./start-mcp.sh --headless=false # Show browser (debug)
```
Service runs at `http://localhost:18060/mcp`.
#### Server Deployment (Headless Linux)
On servers without a desktop environment, the underlying browser requires a virtual display.
`start-mcp.sh` **auto-detects** the environment — if no display is found, it starts Xvfb automatically. Just install it first:
```bash
# Debian/Ubuntu
sudo apt-get install -y xvfb
# CentOS/RHEL
sudo yum install -y xorg-x11-server-Xvfb
```
No extra configuration needed. The script handles:
- Detecting the `DISPLAY` environment variable
- Auto-starting `Xvfb :99` when no display is available
- Cleaning up Xvfb when `stop-mcp.sh` is called
> **Note**: Without Xvfb, login and search will fail on headless servers. See [Issue #3](https://github.com/zhjiang22/openclaw-xhs/issues/3).
## Usage
### Basic Commands
```bash
./status.sh # Check login status
./search.sh "coffee" # Search posts
./recommend.sh # Get recommendations
./post-detail.sh <id> <token> # Get post details
./comment.sh <id> <token> "Great post!" # Comment
./user-profile.sh <user_id> <xsec_token> # Get user profile
```
### Trend Tracking
Auto-search trending posts and generate analysis reports:
```bash
./track-topic.sh "AI" --limit 10
./track-topic.sh "travel" --limit 5 --output report.md
./track-topic.sh "iPhone" --limit 5 --feishu # Export to Feishu
```
### MCP Tools
| Tool | Description |
|------|-------------|
| `check_login_status` | Check login status |
| `search_feeds` | Search posts |
| `list_feeds` | Get homepage feed |
| `get_feed_detail` | Get post details & comments |
| `post_comment_to_feed` | Post comment |
| `user_profile` | Get user profile |
| `like_feed` | Like/unlike post |
| `favorite_feed` | Save/unsave post |
| `publish_content` | Publish image post |
| `publish_with_video` | Publish video post |
### Long Image Export
Export posts as annotated JPG long images (white background, black text):
```bash
# Prepare posts.json
cat > posts.json << 'EOF'
[
{
"title": "Post title",
"author": "Author",
"stats": "13k likes 100 saves",
"desc": "Post summary",
"images": ["https://...webp"],
"per_image_text": {"1": "Caption for 2nd image"}
}
]
EOF
./export-long-image.sh --posts-file posts.json -o output.jpg
```
Requires: Python 3.10+, Pillow (`pip install Pillow`)
## Memory Export (Turn Likes into AI Memory)
Export your liked/saved posts as a searchable knowledge base for AI assistants.
### 1. Install XHS-Downloader
```bash
git clone https://github.com/JoeanAmier/XHS-Downloader.git
cd XHS-Downloader
pip install -r requirements.txt
```
### 2. Extract Post Links (Tampermonkey Script)
1. Install [Tampermonkey](https://www.tampermonkey.net/)
2. Install [XHS-Downloader UserScript](https://raw.githubusercontent.com/JoeanAmier/XHS-Downloader/refs/heads/master/static/XHS-Downloader.js)
3. Go to Xiaohongshu web → Profile → Liked/Saved
4. Click Tampermonkey menu → "Extract liked posts" or "Extract saved posts"
5. Links auto-copied to clipboard
6. Paste into `links.md`
### 3. Download & Export
```bash
# Copy helper scripts
cp tools/xhs-downloader/*.py /path/to/XHS-Downloader/
# Download posts
cd /path/to/XHS-Downloader
python batch_download.py links.md
# Export to workspace
python export_to_workspace.py
# Output: ~/.openclaw/workspace/xhs-memory/
```
### 4. Configure OpenClaw Memory Search
Edit `~/.openclaw/openclaw.json`:
```json
{
"memorySearch": {
"extraPaths": [
"~/.openclaw/workspace/xhs-memory"
]
}
}
```
Now your AI assistant can search your Xiaohongshu favorites!
## Project Structure
```
openclaw-xhs/
├── README.md # English docs
├── README_CN.md # Chinese docs
├── LICENSE
├── SKILL.md # Skill manifest
├── scripts/ # MCP wrapper scripts
│ ├── install-check.sh
│ ├── start-mcp.sh
│ ├── stop-mcp.sh
│ ├── login.sh
│ ├── mcp-call.sh
│ ├── status.sh
│ ├── search.sh
│ ├── recommend.sh
│ ├── post-detail.sh
│ ├── comment.sh
│ ├── user-profile.sh
│ ├── track-topic.sh
│ ├── track-topic.py
│ ├── export-long-image.sh
│ └── export-long-image.py
└── tools/
└── xhs-downloader/ # Memory export tools
├── README.md
├── batch_download.py
├── export_memory.py
└── export_to_workspace.py
```
## Security
This project implements the following security measures:
- **Cookie protection**: Cookie files are copied with `600` permissions (owner-only read/write)
- **Injection prevention**: All shell scripts use `jq` to build JSON payloads instead of string interpolation, preventing shell injection
- **Tool name validation**: MCP tool names are restricted to alphanumeric characters and underscores
- **Path validation**: Cross-skill script calls validate that target paths are within allowed directories
- **Third-party content**: Content fetched from Xiaohongshu is user-generated; exercise appropriate caution
## Disclaimer
This project is a **wrapper layer** for [xiaohongshu-mcp](https://github.com/xpzouying/xiaohongshu-mcp).
- Does NOT contain xiaohongshu-mcp source code
- Users must download xiaohongshu-mcp binaries separately
- Scripts communicate via HTTP protocol only
## Acknowledgments
- [@xpzouying](https://github.com/xpzouying) — [xiaohongshu-mcp](https://github.com/xpzouying/xiaohongshu-mcp)
- [@JoeanAmier](https://github.com/JoeanAmier) — [XHS-Downloader](https://github.com/JoeanAmier/XHS-Downloader) (GPL-3.0)
## License
MIT License (wrapper scripts only)
**Note:** xiaohongshu-mcp has no declared license. Please respect the author's terms.
---
<p align="center">
<b>If this project helps you, please give it a ⭐!</b>
</p>

View File

@@ -1,373 +0,0 @@
# XHS AI Toolkit
<p align="center">
<b>让 AI 读懂你的小红书</b>
</p>
<p align="center">
简体中文 | <a href="README.md">English</a>
</p>
<p align="center">
<img alt="License" src="https://img.shields.io/badge/license-MIT-blue.svg">
<img alt="Platform" src="https://img.shields.io/badge/platform-Linux%20%7C%20macOS-lightgrey.svg">
<img alt="Python" src="https://img.shields.io/badge/python-3.10+-green.svg">
<img alt="MCP" src="https://img.shields.io/badge/MCP-compatible-purple.svg">
</p>
---
小红书 AI 工具包 — 把你的收藏变成 AI 的记忆。
- **MCP 集成** — 通过 AI 助手搜索、浏览、评论小红书
- **热点跟踪** — 自动生成话题报告,含互动数据分析
- **记忆导出** — 将收藏/点赞笔记转为 AI 可搜索的知识库
基于 [xiaohongshu-mcp](https://github.com/xpzouying/xiaohongshu-mcp) 和 [XHS-Downloader](https://github.com/JoeanAmier/XHS-Downloader) 构建。
## 功能特性
| 功能 | 说明 |
|------|------|
| 搜索内容 | 按关键词搜索小红书笔记 |
| 首页推荐 | 获取首页推荐列表 |
| 帖子详情 | 获取笔记内容、评论、互动数据 |
| 发表评论 | 在笔记下发表评论 |
| 用户主页 | 获取用户资料和笔记列表 |
| 热点跟踪 | 自动生成话题分析报告 |
| 长图导出 | 将帖子导出为带注释的 JPG 长图 |
| 记忆导出 | 导出收藏/点赞为 Markdown 记忆库 |
## 快速开始
### 1. 安装 xiaohongshu-mcp
从 [GitHub Releases](https://github.com/xpzouying/xiaohongshu-mcp/releases) 下载:
```bash
# Linux x64
wget https://github.com/xpzouying/xiaohongshu-mcp/releases/latest/download/xiaohongshu-mcp-linux-amd64.tar.gz
wget https://github.com/xpzouying/xiaohongshu-mcp/releases/latest/download/xiaohongshu-login-linux-amd64.tar.gz
# macOS ARM
wget https://github.com/xpzouying/xiaohongshu-mcp/releases/latest/download/xiaohongshu-mcp-darwin-arm64.tar.gz
wget https://github.com/xpzouying/xiaohongshu-mcp/releases/latest/download/xiaohongshu-login-darwin-arm64.tar.gz
```
解压安装:
```bash
mkdir -p ~/.local/bin
tar -xzf xiaohongshu-mcp-*.tar.gz -C ~/.local/bin/
tar -xzf xiaohongshu-login-*.tar.gz -C ~/.local/bin/
cd ~/.local/bin
mv xiaohongshu-mcp-* xiaohongshu-mcp
mv xiaohongshu-login-* xiaohongshu-login
chmod +x xiaohongshu-mcp xiaohongshu-login
```
### 2. 安装本工具包
```bash
# 克隆到 OpenClaw workspace
git clone https://github.com/zhjiang22/openclaw-xhs.git
cp -r openclaw-xhs ~/.openclaw/workspace/skills/xiaohongshu
# 或使用软链接
ln -s /path/to/openclaw-xhs ~/.openclaw/workspace/skills/xiaohongshu
# 验证安装
cd ~/.openclaw/workspace/skills/xiaohongshu/scripts
./install-check.sh
```
### 3. 登录获取 Cookies
**方式一:本地桌面环境**
```bash
./login.sh # 打开浏览器,用小红书 App 扫码登录
```
**方式二Linux 服务器(无桌面)**
在本地电脑获取 cookies 后复制到服务器:
```bash
# 本地电脑(有 GUI
./xiaohongshu-login
# Cookies 保存在 /tmp/cookies.json
# 复制到服务器
scp /tmp/cookies.json user@server:~/.xiaohongshu/cookies.json
```
服务启动时会自动检查以下位置的 cookies按优先级
1. 环境变量 `XHS_COOKIES_SRC` 指定的路径
2. `~/cookies.json`
3. `~/.xiaohongshu/cookies.json`
### 4. 启动服务
```bash
./start-mcp.sh # headless 模式
./start-mcp.sh --headless=false # 显示浏览器(调试用)
```
服务监听 `http://localhost:18060/mcp`
停止服务:`./stop-mcp.sh`
#### 服务器部署(无桌面环境)
在没有图形界面的 Linux 服务器上,`xiaohongshu-mcp` 底层的浏览器需要虚拟显示器才能正常工作。
`start-mcp.sh` 会**自动检测**是否有桌面环境,如果没有则自动启动 Xvfb你只需提前安装
```bash
# Debian/Ubuntu
sudo apt-get install -y xvfb
# CentOS/RHEL
sudo yum install -y xorg-x11-server-Xvfb
```
安装后无需额外配置,`start-mcp.sh` 会自动处理:
- 检测 `DISPLAY` 环境变量
- 没有显示器时自动启动 `Xvfb :99`
- `stop-mcp.sh` 停止服务时会一并清理 Xvfb 进程
> **提示**:如果不安装 Xvfb登录和搜索功能会失败。参见 [Issue #3](https://github.com/zhjiang22/openclaw-xhs/issues/3)。
## 使用方法
### 基础命令
```bash
./status.sh # 检查登录状态
./search.sh "咖啡" # 搜索内容
./recommend.sh # 获取推荐
./post-detail.sh <id> <token> # 获取帖子详情
./comment.sh <id> <token> "写得真好!" # 发表评论
./user-profile.sh <user_id> <xsec_token> # 获取用户主页
```
### 热点跟踪
自动搜索热帖并生成分析报告:
```bash
./track-topic.sh "DeepSeek" --limit 10
./track-topic.sh "春节旅游" --limit 5 --output report.md
./track-topic.sh "iPhone 16" --limit 5 --feishu # 导出到飞书
```
报告包含:
- 📊 概览统计(帖子数、点赞数、评论数)
- 📝 热帖详情(标题、作者、正文、热门评论)
- 💬 评论区热点关键词
- 📈 趋势分析
### MCP 工具清单
| 工具名 | 描述 |
|--------|------|
| `check_login_status` | 检查登录状态 |
| `search_feeds` | 搜索内容 |
| `list_feeds` | 获取首页推荐 |
| `get_feed_detail` | 获取帖子详情和评论 |
| `post_comment_to_feed` | 发表评论 |
| `user_profile` | 获取用户主页 |
| `like_feed` | 点赞/取消 |
| `favorite_feed` | 收藏/取消 |
| `publish_content` | 发布图文笔记 |
| `publish_with_video` | 发布视频笔记 |
### 通用 MCP 调用
```bash
./mcp-call.sh # 查看可用工具
./mcp-call.sh search_feeds '{"keyword": "咖啡"}'
./mcp-call.sh like_feed '{"feed_id": "xxx", "xsec_token": "xxx", "like": true}'
```
### 长图导出
将搜索结果或帖子详情导出为带文字注释的 JPG 长图:
```bash
# 准备 posts.json搜索+拉详情后整理)
cat > posts.json << 'EOF'
[
{
"title": "帖子标题",
"author": "作者名",
"stats": "1.3万赞 100收藏",
"desc": "正文摘要",
"images": ["https://...webp"],
"per_image_text": {"1": "第2张图的专属说明"}
}
]
EOF
./export-long-image.sh --posts-file posts.json -o output.jpg
```
依赖Python 3.10+、Pillow`pip install Pillow`
## 记忆导出:把收藏变成 AI 的记忆
将你的收藏/点赞笔记导出为 AI 可搜索的知识库,让 AI 更懂你。
### 1. 安装 XHS-Downloader
```bash
git clone https://github.com/JoeanAmier/XHS-Downloader.git
cd XHS-Downloader
pip install -r requirements.txt
```
### 2. 获取收藏/点赞链接(油猴脚本)
手动复制链接效率太低,推荐使用油猴脚本批量提取:
**安装脚本:**
1. 安装 [Tampermonkey](https://www.tampermonkey.net/) 浏览器扩展
2. 安装用户脚本:[XHS-Downloader.js](https://raw.githubusercontent.com/JoeanAmier/XHS-Downloader/refs/heads/master/static/XHS-Downloader.js)
**提取链接:**
1. 打开 [小红书网页版](https://www.xiaohongshu.com) 并登录
2. 进入个人主页 → **收藏****点赞** 页面
3. 点击 Tampermonkey 图标,选择:
- `提取收藏作品链接`
- `提取点赞作品链接`
4. 脚本会自动滚动页面加载全部内容
5. 提取完成后链接自动复制到剪贴板
6. 粘贴到 `links.md` 文件
> **注意**:自动滚动功能默认关闭,需在脚本设置中手动开启。开启后可能触发风控,建议适度使用。
### 3. 批量下载并导出
```bash
# 复制工具脚本到 XHS-Downloader 目录
cp tools/xhs-downloader/*.py /path/to/XHS-Downloader/
# 批量下载
cd /path/to/XHS-Downloader
python batch_download.py links.md
# 导出为多文件(推荐)
python export_to_workspace.py
# 输出到 ~/.openclaw/workspace/xhs-memory/
# 或导出为单文件
python export_memory.py
# 生成 xhs_memory.md
```
### 4. 配置 OpenClaw 记忆搜索
编辑 `~/.openclaw/openclaw.json`
```json
{
"memorySearch": {
"extraPaths": [
"~/.openclaw/workspace/xhs-memory"
]
}
}
```
现在你的 AI 助手可以搜索你的小红书收藏了!
## 安全说明
本项目在脚本安全方面采取了以下措施:
- **Cookies 保护**cookies 文件复制时自动设置 `600` 权限(仅当前用户可读写)
- **防注入**:所有 shell 脚本使用 `jq` 构建 JSON payload不通过字符串拼接防止 shell 注入攻击
- **工具名校验**MCP 工具名限制为字母数字和下划线,拒绝非法字符
- **路径校验**:跨 skill 调用时校验目标路径在允许的目录范围内
- **第三方内容**从小红书获取的内容为用户生成内容UGC请注意甄别
## 注意事项
1. **发布限制**
- 标题最多 20 个字符
- 正文最多 1000 个字符
- 每日发布上限约 50 条
2. **账号安全**
- 避免多设备同时登录同一账号
- 手机 App 仅用于查看,不要同时操作
3. **首次运行**
- 会自动下载 headless 浏览器(约 150MB
- 请确保网络畅通
4. **Cookies 有效期**
- 通常有效期约 30 天
- 失效后需重新获取
## 项目结构
```
openclaw-xhs/
├── README.md # 英文文档
├── README_CN.md # 中文文档
├── LICENSE
├── SKILL.md # Skill 描述文件
├── scripts/ # MCP 调用脚本
│ ├── install-check.sh
│ ├── start-mcp.sh
│ ├── stop-mcp.sh
│ ├── login.sh
│ ├── mcp-call.sh
│ ├── status.sh
│ ├── search.sh
│ ├── recommend.sh
│ ├── post-detail.sh
│ ├── comment.sh
│ ├── user-profile.sh
│ ├── track-topic.sh
│ ├── track-topic.py
│ ├── export-long-image.sh
│ └── export-long-image.py
└── tools/
└── xhs-downloader/ # 记忆导出工具
├── README.md
├── batch_download.py
├── export_memory.py
└── export_to_workspace.py
```
## 声明
本项目是 [xiaohongshu-mcp](https://github.com/xpzouying/xiaohongshu-mcp) 的**调用封装层**。
- **不包含** xiaohongshu-mcp 的任何源代码
- **用户需自行下载** xiaohongshu-mcp 二进制文件
- 脚本仅通过 HTTP 协议与 MCP 服务通信
## 致谢
- [@xpzouying](https://github.com/xpzouying) — [xiaohongshu-mcp](https://github.com/xpzouying/xiaohongshu-mcp)
- [@JoeanAmier](https://github.com/JoeanAmier) — [XHS-Downloader](https://github.com/JoeanAmier/XHS-Downloader) (GPL-3.0)
## License
MIT License仅限本项目脚本
**注意:** xiaohongshu-mcp 项目未声明开源许可证,请遵守其作者的使用条款。
---
<p align="center">
<b>觉得有用?给个 ⭐ 支持一下!</b>
</p>

View File

@@ -1,202 +0,0 @@
---
name: xiaohongshu
description: |
小红书RedNote内容工具。使用场景
- 搜索小红书笔记并获取详情
- 获取首页推荐列表
- 获取帖子详情(正文、图片、互动数据、评论)
- 发表评论 / 回复评论
- 获取用户主页和笔记列表
- 点赞、收藏帖子
- 发布图文或视频笔记
- 热点话题跟踪与分析报告
- 帖子导出为长图
触发词示例:
- "搜一下小红书上的XX"
- "跟踪一下小红书上的XX热点"
- "分析小红书上关于XX的讨论"
- "小红书XX话题报告"
- "生成XX的小红书舆情报告"
---
# 小红书 MCP Skill
基于 [xiaohongshu-mcp](https://github.com/xpzouying/xiaohongshu-mcp) 封装的 shell 脚本工具集。
## 前置条件
```bash
cd scripts/
./install-check.sh # 检查依赖xiaohongshu-mcp、jq、python3
./start-mcp.sh # 启动 MCP 服务(默认端口 18060
./status.sh # 确认已登录
```
未登录时需扫码:`mcp-call.sh get_login_qrcode` 获取二维码,用小红书 App 扫码。
服务端口可通过 `MCP_URL` 环境变量覆盖(默认 `http://localhost:18060/mcp`)。
## 核心数据流
**重要:** 大多数操作需要 `feed_id` + `xsec_token` 配对。这两个值从搜索/推荐/用户主页结果中获取,**不可自行构造**。
```
search_feeds / list_feeds / user_profile
返回 feeds 数组,每个 feed 包含:
├── id → 用作 feed_id
├── xsecToken → 用作 xsec_token
└── noteCard → 标题、作者、封面、互动数据
get_feed_detail(feed_id, xsec_token)
返回完整笔记: 正文、图片列表、评论列表
评论中包含 comment_id、user_id用于回复评论
```
## 脚本参考
| 脚本 | 用途 | 参数 |
|------|------|------|
| `search.sh <关键词>` | 搜索笔记 | 关键词 |
| `recommend.sh` | 首页推荐 | 无 |
| `post-detail.sh <feed_id> <xsec_token>` | 帖子详情+评论 | 从搜索结果获取 |
| `comment.sh <feed_id> <xsec_token> <内容>` | 发表评论 | 从搜索结果获取 |
| `user-profile.sh <user_id> <xsec_token>` | 用户主页+笔记 | 从搜索结果获取 |
| `track-topic.sh <话题> [选项]` | 热点分析报告 | `--limit N` `--output file` `--feishu` |
| `export-long-image.sh` | 帖子导出长图 | `--posts-file json -o output.jpg` |
| `mcp-call.sh <tool> [json_args]` | 通用 MCP 调用 | 见下方工具表 |
| `start-mcp.sh` | 启动服务 | `--headless=false` `--port=N` |
| `stop-mcp.sh` | 停止服务 | 无 |
| `status.sh` | 检查登录 | 无 |
| `install-check.sh` | 检查依赖 | 无 |
## MCP 工具详细参数
### search_feeds — 搜索笔记
```json
{"keyword": "咖啡", "filters": {"sort_by": "最新", "note_type": "图文", "publish_time": "一周内"}}
```
filters 可选字段:
- `sort_by`: 综合 | 最新 | 最多点赞 | 最多评论 | 最多收藏
- `note_type`: 不限 | 视频 | 图文
- `publish_time`: 不限 | 一天内 | 一周内 | 半年内
- `search_scope`: 不限 | 已看过 | 未看过 | 已关注
- `location`: 不限 | 同城 | 附近
### get_feed_detail — 帖子详情
```json
{"feed_id": "...", "xsec_token": "...", "load_all_comments": true, "limit": 20}
```
- `load_all_comments`: false(默认) 返回前10条true 滚动加载更多
- `limit`: 加载评论上限(仅 load_all_comments=true 时生效),默认 20
- `click_more_replies`: 是否展开二级回复,默认 false
- `reply_limit`: 跳过回复数超过此值的评论,默认 10
- `scroll_speed`: slow | normal | fast
### post_comment_to_feed — 发表评论
```json
{"feed_id": "...", "xsec_token": "...", "content": "写得真好!"}
```
### reply_comment_in_feed — 回复评论
```json
{"feed_id": "...", "xsec_token": "...", "content": "谢谢!", "comment_id": "...", "user_id": "..."}
```
`comment_id``user_id` 从 get_feed_detail 返回的评论列表中获取。
### user_profile — 用户主页
```json
{"user_id": "...", "xsec_token": "..."}
```
`user_id` 从 feed 的 `noteCard.user.userId` 获取,`xsec_token` 使用该 feed 的 `xsecToken`
### like_feed — 点赞/取消
```json
{"feed_id": "...", "xsec_token": "..."}
{"feed_id": "...", "xsec_token": "...", "unlike": true}
```
### favorite_feed — 收藏/取消
```json
{"feed_id": "...", "xsec_token": "..."}
{"feed_id": "...", "xsec_token": "...", "unfavorite": true}
```
### publish_content — 发布图文
```json
{"title": "标题(≤20字)", "content": "正文(≤1000字)", "images": ["/path/to/img.jpg"], "tags": ["美食","旅行"]}
```
- `images`: 至少1张支持本地路径或 HTTP URL
- `tags`: 可选,话题标签
- `schedule_at`: 可选定时发布ISO86011小时~14天内
### publish_with_video — 发布视频
```json
{"title": "标题", "content": "正文", "video": "/path/to/video.mp4"}
```
### 其他工具
| 工具 | 参数 | 说明 |
|------|------|------|
| `check_login_status` | 无 | 检查登录状态 |
| `list_feeds` | 无 | 获取首页推荐 |
| `get_login_qrcode` | 无 | 获取登录二维码Base64 PNG |
| `delete_cookies` | 无 | 删除 cookies重置登录 |
## 热点跟踪
自动搜索 → 拉取详情 → 生成 Markdown 报告。
```bash
./track-topic.sh "DeepSeek" --limit 5
./track-topic.sh "春节旅游" --limit 10 --output report.md
./track-topic.sh "iPhone 16" --limit 5 --feishu # 导出飞书
```
报告包含:概览统计、热帖详情(正文+热评)、评论关键词、趋势分析。
## 长图导出
将帖子导出为白底黑字的 JPG 长图。
```bash
./export-long-image.sh --posts-file posts.json -o output.jpg
```
posts.json 格式:
```json
[{
"title": "标题", "author": "作者", "stats": "1.3万赞",
"desc": "正文摘要", "images": ["https://..."],
"per_image_text": {"1": "第2张图的说明"}
}]
```
依赖Python 3.10+、Pillow。
## 注意事项
- Cookies 有效期约 30 天,过期需重新扫码
- 首次启动会下载 headless 浏览器(~150MB
- 同一账号避免多客户端同时操作
- 发布限制标题≤20字符正文≤1000字符日发布≤50条
- Linux 服务器无桌面环境需安装 xvfb`apt-get install xvfb`,脚本自动管理)

View File

@@ -1,16 +0,0 @@
#!/bin/bash
# 发表评论到小红书帖子
NOTE_ID="$1"
XSEC_TOKEN="$2"
CONTENT="$3"
if [ -z "$NOTE_ID" ] || [ -z "$XSEC_TOKEN" ] || [ -z "$CONTENT" ]; then
echo "用法: $0 <note_id> <xsec_token> <评论内容>"
exit 1
fi
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
ARGS=$(jq -n --arg fid "$NOTE_ID" --arg tok "$XSEC_TOKEN" --arg ct "$CONTENT" \
'{"feed_id":$fid,"xsec_token":$tok,"content":$ct}')
"$SCRIPT_DIR/mcp-call.sh" post_comment_to_feed "$ARGS"

View File

@@ -1 +0,0 @@
[{"name":"acw_tc","value":"0a00dbc717762232847051713ea1217a7acc4a89d81bf95e65906a490251e7","domain":"www.xiaohongshu.com","path":"/","expires":1776225084.815888,"size":68,"httpOnly":true,"secure":false,"session":false,"priority":"Medium","sameParty":false,"sourceScheme":"Secure","sourcePort":443},{"name":"abRequestId","value":"0db952cd-3244-52d5-bf14-4ffb86d79784","domain":".xiaohongshu.com","path":"/","expires":1807759284.816125,"size":47,"httpOnly":false,"secure":false,"session":false,"priority":"Medium","sameParty":false,"sourceScheme":"Secure","sourcePort":443},{"name":"ets","value":"1776223285450","domain":".xiaohongshu.com","path":"/","expires":1778815285.450774,"size":16,"httpOnly":false,"secure":false,"session":false,"priority":"Medium","sameParty":false,"sourceScheme":"Secure","sourcePort":443},{"name":"webBuild","value":"6.6.0","domain":".xiaohongshu.com","path":"/","expires":-1,"size":13,"httpOnly":false,"secure":false,"session":true,"priority":"Medium","sameParty":false,"sourceScheme":"Secure","sourcePort":443},{"name":"xsecappid","value":"xhs-pc-web","domain":".xiaohongshu.com","path":"/","expires":1807759285,"size":19,"httpOnly":false,"secure":false,"session":false,"priority":"Medium","sameParty":false,"sourceScheme":"Secure","sourcePort":443},{"name":"loadts","value":"1776223285510","domain":".xiaohongshu.com","path":"/","expires":1807759285,"size":19,"httpOnly":false,"secure":false,"session":false,"priority":"Medium","sameParty":false,"sourceScheme":"Secure","sourcePort":443},{"name":"a1","value":"19d8f28710bg4n2alvzxu30gnyyxnprzioy5how6430000426473","domain":".xiaohongshu.com","path":"/","expires":1807759285,"size":54,"httpOnly":false,"secure":false,"session":false,"priority":"Medium","sameParty":false,"sourceScheme":"Secure","sourcePort":443},{"name":"webId","value":"74c0c5711a2be3b7ab536e24ab97e644","domain":".xiaohongshu.com","path":"/","expires":1807759285,"size":37,"httpOnly":false,"secure":false,"session":false,"priority":"Medium","sameParty":false,"sourceScheme":"Secure","sourcePort":443},{"name":"acw_tc","value":"0a4ae12217762232858201316ec263c2521ac3093f47d21bb05138d6c47855","domain":"edith.xiaohongshu.com","path":"/","expires":1776225085.794244,"size":68,"httpOnly":true,"secure":false,"session":false,"priority":"Medium","sameParty":false,"sourceScheme":"Secure","sourcePort":443},{"name":"websectiga","value":"16f444b9ff5e3d7e258b5f7674489196303a0b160e16647c6c2b4dcb609f4134","domain":".xiaohongshu.com","path":"/","expires":1776482485,"size":74,"httpOnly":false,"secure":false,"session":false,"priority":"Medium","sameParty":false,"sourceScheme":"Secure","sourcePort":443},{"name":"sec_poison_id","value":"04a04fa0-b866-4141-b00c-8e9d86696803","domain":".xiaohongshu.com","path":"/","expires":1776223890,"size":49,"httpOnly":false,"secure":false,"session":false,"priority":"Medium","sameParty":false,"sourceScheme":"Secure","sourcePort":443},{"name":"acw_tc","value":"0a4adb3917762232862231622e397f82f8986c933f9409333119ea8ff76fe5","domain":"so.xiaohongshu.com","path":"/","expires":1776225086.198765,"size":68,"httpOnly":true,"secure":false,"session":false,"priority":"Medium","sameParty":false,"sourceScheme":"Secure","sourcePort":443},{"name":"unread","value":"{%22ub%22:%2264be88f5000000000a01a738%22%2C%22ue%22:%2263f49daf0000000013004a95%22%2C%22uc%22:13}","domain":".xiaohongshu.com","path":"/","expires":-1,"size":103,"httpOnly":false,"secure":false,"session":true,"priority":"Medium","sameParty":false,"sourceScheme":"Secure","sourcePort":443},{"name":"gid","value":"yjfYiJYWfd3KyjfYiJYWyllE8Dk4IJ01huC7vK4q8kIvv2q8CIUFux8884JK4Wq8f0dSf0SW","domain":".xiaohongshu.com","path":"/","expires":1810783298.403007,"size":75,"httpOnly":false,"secure":false,"session":false,"priority":"Medium","sameParty":false,"sourceScheme":"Secure","sourcePort":443},{"name":"web_session","value":"0400698e3df40f57bfb4244cea3b4b5566c8bc","domain":".xiaohongshu.com","path":"/","expires":1807759309.695016,"size":49,"httpOnly":true,"secure":true,"session":false,"priority":"Medium","sameParty":false,"sourceScheme":"Secure","sourcePort":443},{"name":"id_token","value":"VjEAAAE6HnlvwMhfB2lWeyhDp5C0798IDu1q6CFvQyi96bTV8pU4Im29xspYVZTHBEjxVUEH2Xkq5RxQgrTOfZBdGAY8c3Fk49zwLKmPTsJ7fxsQ/bcD+l+hcfi2X9+WcXoAIWKf","domain":".xiaohongshu.com","path":"/","expires":1807759309.695111,"size":144,"httpOnly":true,"secure":true,"session":false,"priority":"Medium","sameParty":false,"sourceScheme":"Secure","sourcePort":443}]

View File

@@ -1,260 +0,0 @@
#!/usr/bin/env python3
"""
小红书帖子长图导出工具
用法:
python3 export-long-image.py --posts '<json>' --output output.jpg
python3 export-long-image.py --posts-file posts.json --output output.jpg
posts JSON 格式:
[
{
"title": "帖子标题",
"author": "作者名",
"stats": "1.3万赞 5171收藏",
"desc": "正文摘要,支持\\n换行",
"images": ["url1", "url2", ...],
"per_image_text": {
"1": "第2张图的说明文字0-indexed",
"3": "第4张图的说明文字"
}
},
...
]
per_image_text 可选:如果原帖文字明确指向某张图,可以把说明放在对应图片上。
未指定 per_image_text 时,所有文字放在该帖第一张图前的文字块中。
"""
import argparse
import json
import os
import sys
import tempfile
import urllib.request
from PIL import Image, ImageDraw, ImageFont
# --- 配置 ---
WIDTH = 800
PAD = 24
LINE_SPACE = 10
FONT_CANDIDATES = [
"/System/Library/Fonts/STHeiti Medium.ttc",
"/System/Library/Fonts/Hiragino Sans GB.ttc",
"/System/Library/Fonts/Supplemental/Arial Unicode.ttf",
"/usr/share/fonts/truetype/noto/NotoSansCJK-Regular.ttc",
"/usr/share/fonts/opentype/noto/NotoSansCJK-Regular.ttc",
]
def find_font():
for path in FONT_CANDIDATES:
if os.path.exists(path):
return path
return None
def load_font(path, size):
if path:
try:
return ImageFont.truetype(path, size, index=0)
except Exception:
pass
return ImageFont.load_default()
def wrap_text(text, font, max_width, draw):
lines = []
for paragraph in text.split("\n"):
paragraph = paragraph.strip()
if not paragraph:
continue
current = ""
for char in paragraph:
test = current + char
bbox = draw.textbbox((0, 0), test, font=font)
if bbox[2] - bbox[0] > max_width:
if current:
lines.append(current)
current = char
else:
current = test
if current:
lines.append(current)
return lines
def draw_lines(draw, lines, font, x, y, fill):
for line in lines:
draw.text((x, y), line, font=font, fill=fill)
bbox = draw.textbbox((0, 0), line, font=font)
y += (bbox[3] - bbox[1]) + LINE_SPACE
return y
def measure_lines(lines, font, draw):
h = 0
for line in lines:
bbox = draw.textbbox((0, 0), line if line else " ", font=font)
h += (bbox[3] - bbox[1]) + LINE_SPACE
return h
def make_text_block(title, author_line, desc, font_path, width):
"""白底黑字文字块,模仿小红书原样"""
title_font = load_font(font_path, 32)
author_font = load_font(font_path, 20)
body_font = load_font(font_path, 24)
tmp = Image.new("RGB", (width, 10))
draw = ImageDraw.Draw(tmp)
max_w = width - PAD * 2
title_lines = wrap_text(title, title_font, max_w, draw)
author_lines = [author_line] if author_line else []
desc_lines = wrap_text(desc, body_font, max_w, draw) if desc else []
# 计算高度
total_h = PAD
total_h += measure_lines(title_lines, title_font, draw)
if author_lines:
total_h += 4
total_h += measure_lines(author_lines, author_font, draw)
if desc_lines:
total_h += 8
total_h += measure_lines(desc_lines, body_font, draw)
total_h += PAD
# 绘制
block = Image.new("RGB", (width, total_h), (255, 255, 255))
draw = ImageDraw.Draw(block)
y = PAD
y = draw_lines(draw, title_lines, title_font, PAD, y, (33, 33, 33))
if author_lines:
y += 4
y = draw_lines(draw, author_lines, author_font, PAD, y, (153, 153, 153))
if desc_lines:
y += 8
y = draw_lines(draw, desc_lines, body_font, PAD, y, (66, 66, 66))
return block
def make_image_caption(text, font_path, width):
"""图片上方的小说明文字块"""
font = load_font(font_path, 20)
tmp = Image.new("RGB", (width, 10))
draw = ImageDraw.Draw(tmp)
lines = wrap_text(text, font, width - PAD * 2, draw)
h = PAD + measure_lines(lines, font, draw) + 8
block = Image.new("RGB", (width, h), (245, 245, 245))
draw = ImageDraw.Draw(block)
draw_lines(draw, lines, font, PAD, PAD // 2, (100, 100, 100))
return block
def download_image(url, tmpdir, idx):
"""下载图片到临时目录"""
ext = ".webp"
path = os.path.join(tmpdir, f"img_{idx}{ext}")
try:
req = urllib.request.Request(url, headers={"User-Agent": "Mozilla/5.0"})
with urllib.request.urlopen(req, timeout=30) as resp:
with open(path, "wb") as f:
f.write(resp.read())
return path
except Exception as e:
print(f" 警告: 下载失败 {url[:60]}... ({e})", file=sys.stderr)
return None
def main():
parser = argparse.ArgumentParser(description="小红书帖子长图导出")
parser.add_argument("--posts", help="Posts JSON string")
parser.add_argument("--posts-file", help="Posts JSON file path")
parser.add_argument("--output", "-o", required=True, help="Output JPG path")
parser.add_argument("--width", type=int, default=800, help="Image width (default 800)")
parser.add_argument("--quality", type=int, default=88, help="JPEG quality (default 88)")
args = parser.parse_args()
global WIDTH
WIDTH = args.width
# 读取 posts 数据
if args.posts:
posts = json.loads(args.posts)
elif args.posts_file:
with open(args.posts_file, "r") as f:
posts = json.load(f)
else:
print("错误: 需要 --posts 或 --posts-file", file=sys.stderr)
sys.exit(1)
font_path = find_font()
if not font_path:
print("警告: 未找到中文字体,文字可能显示异常", file=sys.stderr)
sep = Image.new("RGB", (WIDTH, 3), (230, 230, 230))
pieces = []
with tempfile.TemporaryDirectory() as tmpdir:
img_counter = 0
for pi, post in enumerate(posts):
title = post.get("title", "")
author = post.get("author", "")
stats = post.get("stats", "")
desc = post.get("desc", "")
images = post.get("images", [])
per_image_text = post.get("per_image_text", {})
# 作者行
author_line = author
if stats:
author_line = f"{author} · {stats}" if author else stats
# 主文字块
text_block = make_text_block(title, author_line, desc, font_path, WIDTH)
pieces.append(text_block)
# 图片
for i, url in enumerate(images):
# 是否有针对这张图的说明
img_key = str(i)
if img_key in per_image_text:
caption_block = make_image_caption(per_image_text[img_key], font_path, WIDTH)
pieces.append(caption_block)
img_path = download_image(url, tmpdir, img_counter)
img_counter += 1
if img_path:
try:
im = Image.open(img_path).convert("RGB")
ratio = WIDTH / im.width
im = im.resize((WIDTH, int(im.height * ratio)), Image.LANCZOS)
pieces.append(im)
except Exception as e:
print(f" 警告: 图片处理失败 ({e})", file=sys.stderr)
# 帖子间分隔线
if pi < len(posts) - 1:
pieces.append(sep)
if not pieces:
print("错误: 没有内容可拼接", file=sys.stderr)
sys.exit(1)
total_h = sum(p.height for p in pieces)
long_img = Image.new("RGB", (WIDTH, total_h), (255, 255, 255))
y = 0
for p in pieces:
long_img.paste(p, (0, y))
y += p.height
long_img.save(args.output, "JPEG", quality=args.quality)
print(f"完成: {args.output} ({WIDTH}x{total_h})")
if __name__ == "__main__":
main()

View File

@@ -1,20 +0,0 @@
#!/bin/bash
# 小红书帖子导出长图
#
# 用法:
# ./export-long-image.sh --posts-file posts.json -o output.jpg
# ./export-long-image.sh --posts '<json>' -o output.jpg
#
# posts.json 示例:
# [
# {
# "title": "帖子标题",
# "author": "作者",
# "stats": "1.3万赞 100收藏",
# "desc": "正文摘要",
# "images": ["https://...webp", "https://...webp"]
# }
# ]
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
python3 "$SCRIPT_DIR/export-long-image.py" "$@"

View File

@@ -1,67 +0,0 @@
#!/bin/bash
# 检查小红书 MCP 依赖是否已安装
set -e
echo "检查小红书 MCP 依赖..."
echo ""
XHS_MCP="$HOME/.local/bin/xiaohongshu-mcp"
XHS_LOGIN="$HOME/.local/bin/xiaohongshu-login"
check_binary() {
local name="$1"
local path="$2"
if [ -f "$path" ]; then
echo "$name: $path"
return 0
else
echo "$name: 未找到"
return 1
fi
}
MISSING=0
check_binary "xiaohongshu-mcp" "$XHS_MCP" || MISSING=1
check_binary "xiaohongshu-login" "$XHS_LOGIN" || MISSING=1
echo ""
# 检查 jq必需用于安全构建 JSON
if command -v jq &> /dev/null; then
echo "✅ jq: $(which jq)"
else
echo "❌ jq: 未安装(必需,用于安全构建 JSON"
echo " 安装: apt-get install jq / brew install jq"
MISSING=1
fi
# 检查 Python3track-topic.py 需要)
if command -v python3 &> /dev/null; then
echo "✅ python3: $(python3 --version)"
else
echo "⚠️ python3: 未安装(热点跟踪功能需要)"
fi
echo ""
if [ $MISSING -eq 1 ]; then
echo "=========================================="
echo "缺少必要依赖,请按以下步骤安装:"
echo ""
echo "1. 从 GitHub Releases 下载对应平台的二进制文件:"
echo " https://github.com/xpzouying/xiaohongshu-mcp/releases"
echo ""
echo "2. 解压并安装到 ~/.local/bin/"
echo " mkdir -p ~/.local/bin"
echo " mv xiaohongshu-mcp-linux-amd64 ~/.local/bin/xiaohongshu-mcp"
echo " mv xiaohongshu-login-linux-amd64 ~/.local/bin/xiaohongshu-login"
echo " chmod +x ~/.local/bin/xiaohongshu-*"
echo ""
echo "3. 确保 ~/.local/bin 在 PATH 中(可选)"
echo "=========================================="
exit 1
else
echo "✅ 所有依赖已就绪"
fi

View File

@@ -1,10 +0,0 @@
#!/bin/bash
# 启动小红书登录工具
XHS_LOGIN="$HOME/.local/bin/xiaohongshu-login"
echo "启动小红书登录工具..."
echo "注意:需要桌面环境或 X11 转发"
echo ""
"$XHS_LOGIN"

View File

@@ -1,82 +0,0 @@
#!/bin/bash
# 通用 MCP 调用脚本(支持 Streamable HTTP + Session ID
set -e
TOOL_NAME="$1"
TOOL_ARGS="$2"
MCP_URL="${MCP_URL:-http://localhost:18060/mcp}"
export no_proxy="${no_proxy:+$no_proxy,}localhost,127.0.0.1"
# 检查 jq 依赖
if ! command -v jq &> /dev/null; then
echo "错误: 需要安装 jq (apt-get install jq / brew install jq)"
exit 1
fi
if [ -z "$TOOL_NAME" ]; then
echo "用法: $0 <tool_name> [json_args]"
echo ""
echo "可用工具:"
echo " check_login_status - 检查登录状态"
echo " search_feeds - 搜索内容 {\"keyword\": \"...\", \"filters\": {\"sort_by\": \"最新\"}}"
echo " list_feeds - 获取首页推荐"
echo " get_feed_detail - 获取帖子详情 {\"feed_id\": \"...\", \"xsec_token\": \"...\"}"
echo " post_comment_to_feed - 发表评论 {\"feed_id\": \"...\", \"xsec_token\": \"...\", \"content\": \"...\"}"
echo " reply_comment_in_feed - 回复评论 {\"feed_id\": \"...\", \"xsec_token\": \"...\", \"content\": \"...\", \"comment_id\": \"...\", \"user_id\": \"...\"}"
echo " user_profile - 获取用户主页 {\"user_id\": \"...\", \"xsec_token\": \"...\"}"
echo " like_feed - 点赞 {\"feed_id\": \"...\", \"xsec_token\": \"...\"} 取消: {\"unlike\": true}"
echo " favorite_feed - 收藏 {\"feed_id\": \"...\", \"xsec_token\": \"...\"} 取消: {\"unfavorite\": true}"
echo " get_login_qrcode - 获取登录二维码"
echo " delete_cookies - 删除 cookies重置登录状态"
echo " publish_content - 发布图文"
echo " publish_with_video - 发布视频"
exit 1
fi
# 校验 tool name只允许字母数字和下划线
if [[ ! "$TOOL_NAME" =~ ^[a-zA-Z_][a-zA-Z0-9_]*$ ]]; then
echo "错误: 无效的工具名: $TOOL_NAME"
exit 1
fi
[ -z "$TOOL_ARGS" ] && TOOL_ARGS="{}"
# 校验 TOOL_ARGS 是合法 JSON
if ! echo "$TOOL_ARGS" | jq empty 2>/dev/null; then
echo "错误: 参数不是合法的 JSON: $TOOL_ARGS"
exit 1
fi
# 1. Initialize 并获取 Session ID
INIT_RESPONSE=$(curl --noproxy '*' -s -i -X POST "$MCP_URL" \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"openclaw","version":"1.0"}}}')
SESSION_ID=$(echo "$INIT_RESPONSE" | grep -i "Mcp-Session-Id" | awk '{print $2}' | tr -d '\r\n')
if [ -z "$SESSION_ID" ]; then
echo "错误: 无法获取 MCP Session ID"
echo "请确保 MCP 服务正在运行: ./start-mcp.sh"
exit 1
fi
# 2. Initialized notification
curl --noproxy '*' -s -X POST "$MCP_URL" \
-H "Content-Type: application/json" \
-H "Mcp-Session-Id: $SESSION_ID" \
-d '{"jsonrpc":"2.0","method":"notifications/initialized"}' > /dev/null
# 3. Call tool — 使用 jq 安全构建 JSON避免 shell 注入
CALL_PAYLOAD=$(jq -n \
--arg name "$TOOL_NAME" \
--argjson args "$TOOL_ARGS" \
'{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":$name,"arguments":$args}}')
RESULT=$(curl --noproxy '*' -s --max-time 120 -X POST "$MCP_URL" \
-H "Content-Type: application/json" \
-H "Mcp-Session-Id: $SESSION_ID" \
-d "$CALL_PAYLOAD")
# 输出结果
echo "$RESULT" | jq .

View File

@@ -1,17 +0,0 @@
#!/bin/bash
# 获取小红书帖子详情
NOTE_ID="$1"
XSEC_TOKEN="$2"
if [ -z "$NOTE_ID" ] || [ -z "$XSEC_TOKEN" ]; then
echo "用法: $0 <note_id> <xsec_token>"
echo ""
echo "note_id 和 xsec_token 可从搜索或推荐结果中获取"
exit 1
fi
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
ARGS=$(jq -n --arg fid "$NOTE_ID" --arg tok "$XSEC_TOKEN" \
'{"feed_id":$fid,"xsec_token":$tok}')
"$SCRIPT_DIR/mcp-call.sh" get_feed_detail "$ARGS"

View File

@@ -1,5 +0,0 @@
#!/bin/bash
# 获取小红书首页推荐列表
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
"$SCRIPT_DIR/mcp-call.sh" list_feeds

View File

@@ -1,13 +0,0 @@
#!/bin/bash
# 搜索小红书内容
KEYWORD="$1"
if [ -z "$KEYWORD" ]; then
echo "用法: $0 <关键词>"
exit 1
fi
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
ARGS=$(jq -n --arg kw "$KEYWORD" '{"keyword":$kw}')
"$SCRIPT_DIR/mcp-call.sh" search_feeds "$ARGS"

View File

@@ -1,166 +0,0 @@
#!/bin/bash
# 启动小红书 MCP 服务
XHS_MCP="$HOME/.local/bin/xiaohongshu-mcp"
PID_FILE="$HOME/.xiaohongshu/mcp.pid"
LOG_FILE="$HOME/.xiaohongshu/mcp.log"
XVFB_PID_FILE="$HOME/.xiaohongshu/xvfb.pid"
XVFB_DISPLAY_FILE="$HOME/.xiaohongshu/xvfb.display"
# Cookies 路径(可通过环境变量覆盖)
# XHS_COOKIES_SRC: 源 cookies 文件(用于远程服务器场景)
# 默认检查 ~/cookies.json 和 ~/.xiaohongshu/cookies.json
COOKIES_DST="/tmp/cookies.json"
mkdir -p "$HOME/.xiaohongshu"
# 检测是否有显示器(桌面环境)
has_display() {
[ -n "$DISPLAY" ] && xdpyinfo >/dev/null 2>&1
}
# 在无桌面环境下自动启动 Xvfb
ensure_display() {
if has_display; then
return 0
fi
# 已有 Xvfb 在运行
if [ -f "$XVFB_PID_FILE" ]; then
local pid
pid=$(cat "$XVFB_PID_FILE")
if kill -0 "$pid" 2>/dev/null; then
export DISPLAY=$(cat "$XVFB_DISPLAY_FILE" 2>/dev/null || echo ":99")
echo "复用已有 Xvfb (PID: $pid, DISPLAY=$DISPLAY)"
return 0
fi
fi
# 检查 Xvfb 是否安装
if ! command -v Xvfb >/dev/null 2>&1; then
echo "⚠ 未检测到桌面环境,且未安装 Xvfb。"
echo " 请安装sudo apt-get install -y xvfb"
echo " 安装后重新运行本脚本即可自动配置。"
exit 1
fi
echo "未检测到桌面环境,自动启动 Xvfb 虚拟显示..."
# 自动选择可用的 display 号99-109
local display_num=""
local d
for d in $(seq 99 109); do
if [ ! -e "/tmp/.X${d}-lock" ]; then
display_num=$d
break
fi
# 锁文件存在但进程已死,尝试清理后使用
local lock_pid
lock_pid=$(cat "/tmp/.X${d}-lock" 2>/dev/null | tr -d ' ')
if [ -n "$lock_pid" ] && ! kill -0 "$lock_pid" 2>/dev/null; then
rm -f "/tmp/.X${d}-lock" "/tmp/.X11-unix/X${d}" 2>/dev/null
if [ ! -e "/tmp/.X${d}-lock" ]; then
display_num=$d
break
fi
fi
done
if [ -z "$display_num" ]; then
echo "✗ 无法找到可用的 display 号(:99-:109 均被占用)"
exit 1
fi
# -ac: 关闭访问控制,允许 chromium 连接虚拟显示(仅用于 headless 自动化)
Xvfb ":${display_num}" -screen 0 1024x768x24 -ac >/dev/null 2>&1 &
echo $! > "$XVFB_PID_FILE"
echo ":${display_num}" > "$XVFB_DISPLAY_FILE"
export DISPLAY=":${display_num}"
sleep 1
if kill -0 "$(cat "$XVFB_PID_FILE")" 2>/dev/null; then
echo "✓ Xvfb 已启动 (DISPLAY=:${display_num})"
else
echo "✗ Xvfb 启动失败"
exit 1
fi
}
# 同步 cookies支持多个可能的来源
sync_cookies() {
local src=""
# 优先使用环境变量指定的路径
if [ -n "$XHS_COOKIES_SRC" ] && [ -f "$XHS_COOKIES_SRC" ]; then
src="$XHS_COOKIES_SRC"
elif [ -f "$HOME/cookies.json" ]; then
src="$HOME/cookies.json"
elif [ -f "$HOME/.xiaohongshu/cookies.json" ]; then
src="$HOME/.xiaohongshu/cookies.json"
fi
if [ -n "$src" ]; then
if [ ! -f "$COOKIES_DST" ] || [ "$src" -nt "$COOKIES_DST" ]; then
install -m 600 "$src" "$COOKIES_DST"
echo "已同步 cookies: $src -> $COOKIES_DST"
fi
else
# 确保已有的 cookies 文件权限正确
[ -f "$COOKIES_DST" ] && chmod 600 "$COOKIES_DST"
fi
}
sync_cookies
ensure_display
# 检查是否已在运行
if [ -f "$PID_FILE" ]; then
PID=$(cat "$PID_FILE")
if kill -0 "$PID" 2>/dev/null; then
echo "MCP 服务已在运行 (PID: $PID)"
echo "如需重启,请先运行 stop-mcp.sh"
exit 0
fi
fi
# 解析参数
HEADLESS="true"
PORT="${XHS_MCP_PORT:-18060}"
for arg in "$@"; do
case $arg in
--headless=false)
HEADLESS="false"
;;
--port=*)
PORT="${arg#*=}"
;;
esac
done
# 校验端口号
if [[ ! "$PORT" =~ ^[0-9]+$ ]]; then
echo "错误: 无效端口号: $PORT"
exit 1
fi
# 启动服务
echo "启动小红书 MCP 服务..."
if [ "$HEADLESS" = "false" ]; then
nohup "$XHS_MCP" -port ":${PORT}" -headless=false > "$LOG_FILE" 2>&1 &
else
nohup "$XHS_MCP" -port ":${PORT}" > "$LOG_FILE" 2>&1 &
fi
echo $! > "$PID_FILE"
sleep 2
# 验证启动
if kill -0 $(cat "$PID_FILE") 2>/dev/null; then
echo "✓ MCP 服务已启动 (PID: $(cat $PID_FILE))"
echo " 端点: http://localhost:${PORT}/mcp"
echo " 日志: $LOG_FILE"
else
echo "✗ 启动失败,查看日志: $LOG_FILE"
cat "$LOG_FILE"
exit 1
fi

View File

@@ -1,5 +0,0 @@
#!/bin/bash
# 检查小红书登录状态
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
"$SCRIPT_DIR/mcp-call.sh" check_login_status

View File

@@ -1,29 +0,0 @@
#!/bin/bash
# 停止小红书 MCP 服务
PID_FILE="$HOME/.xiaohongshu/mcp.pid"
XVFB_PID_FILE="$HOME/.xiaohongshu/xvfb.pid"
if [ -f "$PID_FILE" ]; then
PID=$(cat "$PID_FILE")
if kill -0 "$PID" 2>/dev/null; then
kill "$PID"
rm -f "$PID_FILE"
echo "✓ MCP 服务已停止"
else
echo "进程不存在,清理 PID 文件"
rm -f "$PID_FILE"
fi
else
echo "MCP 服务未运行"
fi
# 清理 Xvfb
if [ -f "$XVFB_PID_FILE" ]; then
XVFB_PID=$(cat "$XVFB_PID_FILE")
if kill -0 "$XVFB_PID" 2>/dev/null; then
kill "$XVFB_PID"
echo "✓ Xvfb 已停止"
fi
rm -f "$XVFB_PID_FILE" "$HOME/.xiaohongshu/xvfb.display"
fi

View File

@@ -1,313 +0,0 @@
#!/usr/bin/env python3
"""
小红书热点跟踪工具
用法:
python track-topic.py <话题> [--limit N] [--feishu] [--output FILE]
示例:
python track-topic.py "DeepSeek" --limit 5 --feishu
python track-topic.py "春节旅游" --limit 10 --output report.md
"""
import argparse
import json
import subprocess
import sys
import os
from datetime import datetime
from pathlib import Path
# 获取脚本目录
SCRIPT_DIR = Path(__file__).parent.resolve()
XHS_SCRIPTS = SCRIPT_DIR # 现在就在 xiaohongshu/scripts 目录下
# 飞书 skill 路径(支持多种可能的位置)
def find_feishu_scripts() -> Path:
"""查找 feishu-docs skill 的 scripts 目录"""
# 只允许在已知的 skill 目录中查找
allowed_roots = [
SCRIPT_DIR.parent.parent, # 同级 skill 目录
Path.home() / ".openclaw" / "workspace" / "skills",
Path.home() / ".claude" / "skills",
]
for root in allowed_roots:
candidate = (root / "feishu-docs" / "scripts").resolve()
# 校验解析后的路径仍在允许的根目录下(防止符号链接逃逸)
if candidate.is_dir() and any(
str(candidate).startswith(str(r.resolve()) + os.sep) for r in allowed_roots
):
return candidate
return allowed_roots[0] / "feishu-docs" / "scripts" # 返回默认路径(可能不存在)
FEISHU_SCRIPTS = find_feishu_scripts()
def call_xhs_mcp(tool: str, args: dict) -> dict:
"""调用小红书 MCP 工具"""
mcp_call = XHS_SCRIPTS / "mcp-call.sh"
if not mcp_call.exists():
print(f"❌ 找不到 xiaohongshu skill: {mcp_call}", file=sys.stderr)
sys.exit(1)
result = subprocess.run(
[str(mcp_call), tool, json.dumps(args)],
capture_output=True, text=True, timeout=120
)
if result.returncode != 0:
print(f"❌ MCP 调用失败: {result.stderr}", file=sys.stderr)
return {}
try:
response = json.loads(result.stdout)
if "result" in response and "content" in response["result"]:
text = response["result"]["content"][0].get("text", "{}")
return json.loads(text) if text else {}
elif "error" in response:
print(f"⚠️ MCP 错误: {response['error'].get('message', 'Unknown')}", file=sys.stderr)
return {}
return response
except json.JSONDecodeError:
return {}
def search_feeds(keyword: str) -> list:
"""搜索小红书内容"""
print(f"🔍 搜索: {keyword}")
result = call_xhs_mcp("search_feeds", {"keyword": keyword})
feeds = result.get("feeds", [])
# 过滤掉 hot_query 类型
return [f for f in feeds if f.get("modelType") == "note"]
def get_feed_detail(feed_id: str, xsec_token: str, load_comments: bool = True) -> dict:
"""获取帖子详情"""
args = {
"feed_id": feed_id,
"xsec_token": xsec_token,
"load_all_comments": load_comments
}
result = call_xhs_mcp("get_feed_detail", args)
return result.get("data", {})
def format_timestamp(ts: int) -> str:
"""格式化时间戳"""
if not ts:
return "未知"
try:
dt = datetime.fromtimestamp(ts / 1000)
return dt.strftime("%Y-%m-%d %H:%M")
except:
return "未知"
def get_comments_list(post: dict) -> list:
"""安全地获取评论列表"""
comments = post.get("comments", {})
if isinstance(comments, dict):
return comments.get("list", [])
elif isinstance(comments, list):
return comments
return []
def generate_report(keyword: str, posts: list) -> str:
"""生成 Markdown 报告"""
now = datetime.now().strftime("%Y-%m-%d %H:%M")
report = f"""# 🔥 小红书热点跟踪报告
**话题:** {keyword}
**生成时间:** {now}
**收录帖子:** {len(posts)}
---
## 📊 概览
"""
# 统计信息
total_likes = sum(int(p.get("note", {}).get("interactInfo", {}).get("likedCount", 0) or 0) for p in posts)
total_comments = sum(len(get_comments_list(p)) for p in posts)
report += f"""| 指标 | 数值 |
|------|------|
| 总帖子数 | {len(posts)} |
| 总点赞数 | {total_likes:,} |
| 总评论数 | {total_comments} |
---
## 📝 热帖详情
"""
for i, post in enumerate(posts, 1):
note = post.get("note", {})
comments = get_comments_list(post)
title = note.get("title", "无标题")
desc = note.get("desc", "")
user = note.get("user", {}).get("nickname", "匿名")
time_str = format_timestamp(note.get("time"))
interact = note.get("interactInfo", {})
likes = interact.get("likedCount", "0")
collected = interact.get("collectedCount", "0")
report += f"""### {i}. {title}
**作者:** {user}
**时间:** {time_str}
**互动:** ❤️ {likes} 赞 · ⭐ {collected} 收藏
**正文:**
> {desc[:500]}{"..." if len(desc) > 500 else ""}
"""
if comments:
report += f"""**热门评论 ({len(comments)} 条):**
"""
for j, comment in enumerate(list(comments)[:5], 1):
c_user = comment.get("userInfo", {}).get("nickname", "匿名")
c_content = comment.get("content", "")
c_likes = comment.get("likeCount", 0)
report += f"- **{c_user}** ({c_likes}赞): {c_content[:100]}\n"
if len(comments) > 5:
report += f"- *... 还有 {len(comments) - 5} 条评论*\n"
report += "\n---\n\n"
# 评论区热点总结
report += """## 💬 评论区热点关键词
"""
# 简单的关键词提取(统计高频词)
all_comments = []
for post in posts:
for c in get_comments_list(post):
all_comments.append(c.get("content", ""))
if all_comments:
report += f"{len(all_comments)} 条评论,主要讨论方向:\n\n"
# 这里可以做更复杂的 NLP 分析,暂时简化
report += "- 用户对该话题的关注度较高\n"
report += "- 评论区互动活跃\n"
else:
report += "暂无足够评论数据进行分析\n"
report += """
---
## 📈 趋势分析
基于以上热帖和评论数据,该话题在小红书上呈现以下特点:
1. **热度指数**: """ + ("🔥🔥🔥 高" if total_likes > 1000 else "🔥🔥 中" if total_likes > 100 else "🔥 低") + f"""
2. **互动活跃度**: """ + ("活跃" if total_comments > 50 else "一般" if total_comments > 10 else "较低") + """
3. **内容类型**: 以图文笔记为主
---
*报告由 OpenClaw 小红书热点跟踪工具自动生成*
"""
return report
def export_to_feishu(title: str, content: str) -> str:
"""导出到飞书文档"""
import_script = FEISHU_SCRIPTS / "doc-import.sh"
if not import_script.exists():
print(f"❌ 找不到 feishu-docs skill: {import_script}", file=sys.stderr)
return ""
print("📤 导出到飞书文档...")
# 写入临时文件
tmp_file = Path("/tmp/xhs_report.md")
tmp_file.write_text(content, encoding="utf-8")
result = subprocess.run(
[str(import_script), title, "--file", str(tmp_file)],
capture_output=True, text=True, timeout=60
)
if result.returncode != 0:
print(f"⚠️ 飞书导出失败: {result.stderr}", file=sys.stderr)
return ""
# 解析返回的文档链接
output = result.stdout
print(output)
return output
def main():
parser = argparse.ArgumentParser(description="小红书热点跟踪工具")
parser.add_argument("keyword", help="要跟踪的话题/关键词")
parser.add_argument("--limit", "-n", type=int, default=10, help="获取帖子数量 (默认 10)")
parser.add_argument("--feishu", "-f", action="store_true", help="导出到飞书文档")
parser.add_argument("--output", "-o", help="输出 Markdown 文件路径")
parser.add_argument("--no-comments", action="store_true", help="不获取评论")
args = parser.parse_args()
# 1. 搜索帖子
feeds = search_feeds(args.keyword)
if not feeds:
print("❌ 未找到相关帖子")
sys.exit(1)
print(f"✅ 找到 {len(feeds)} 条帖子")
# 2. 获取详情
posts = []
for i, feed in enumerate(feeds[:args.limit]):
feed_id = feed.get("id")
xsec_token = feed.get("xsecToken")
title = feed.get("noteCard", {}).get("displayTitle", "")
print(f"📖 [{i+1}/{min(len(feeds), args.limit)}] 获取: {title[:30]}...")
detail = get_feed_detail(feed_id, xsec_token, not args.no_comments)
if detail:
posts.append(detail)
if not posts:
print("❌ 未能获取帖子详情")
sys.exit(1)
print(f"✅ 成功获取 {len(posts)} 篇帖子详情")
# 3. 生成报告
print("📝 生成报告...")
report = generate_report(args.keyword, posts)
# 4. 输出
if args.output:
output_path = Path(args.output)
output_path.write_text(report, encoding="utf-8")
print(f"✅ 报告已保存: {output_path}")
if args.feishu:
doc_title = f"小红书热点跟踪: {args.keyword} ({datetime.now().strftime('%m-%d')})"
export_to_feishu(doc_title, report)
if not args.output and not args.feishu:
# 默认输出到 stdout
print("\n" + "="*60 + "\n")
print(report)
return report
if __name__ == "__main__":
main()

View File

@@ -1,5 +0,0 @@
#!/bin/bash
# 小红书热点跟踪工具
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
python3 "$SCRIPT_DIR/track-topic.py" "$@"

View File

@@ -1,17 +0,0 @@
#!/bin/bash
# 获取小红书用户主页
USER_ID="$1"
XSEC_TOKEN="$2"
if [ -z "$USER_ID" ] || [ -z "$XSEC_TOKEN" ]; then
echo "用法: $0 <user_id> <xsec_token>"
echo ""
echo "user_id 和 xsec_token 可从搜索或推荐结果中获取"
exit 1
fi
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
ARGS=$(jq -n --arg uid "$USER_ID" --arg tok "$XSEC_TOKEN" \
'{"user_id":$uid,"xsec_token":$tok}')
"$SCRIPT_DIR/mcp-call.sh" user_profile "$ARGS"

View File

@@ -1,98 +0,0 @@
# XHS-Downloader 辅助工具
配合 [XHS-Downloader](https://github.com/JoeanAmier/XHS-Downloader) 使用的工具脚本,用于下载小红书收藏/点赞笔记并导出为 OpenClaw 记忆库格式。
## 依赖
需要先安装 XHS-Downloader
```bash
git clone https://github.com/JoeanAmier/XHS-Downloader.git
cd XHS-Downloader
pip install -r requirements.txt
```
## 使用流程
### 1. 获取收藏/点赞链接(使用油猴脚本)
手动复制链接效率低,推荐使用 XHS-Downloader 提供的油猴脚本批量提取:
**安装脚本:**
1. 安装 [Tampermonkey](https://www.tampermonkey.net/) 浏览器扩展
2. 安装用户脚本:[XHS-Downloader.js](https://raw.githubusercontent.com/JoeanAmier/XHS-Downloader/refs/heads/master/static/XHS-Downloader.js)
**提取链接:**
1. 打开 [小红书网页版](https://www.xiaohongshu.com) 并登录
2. 进入个人主页 → **收藏****点赞** 页面
3. 点击 Tampermonkey 图标,选择:
- `提取收藏作品链接`
- `提取点赞作品链接`
4. 脚本会自动滚动页面加载全部内容
5. 提取完成后链接自动复制到剪贴板
**保存链接:**
将剪贴板内容粘贴到 `links.md` 文件:
```
https://www.xiaohongshu.com/explore/xxx?xsec_token=...
https://www.xiaohongshu.com/explore/yyy?xsec_token=...
```
> **注意**:自动滚动功能默认关闭,需在脚本设置中手动开启。开启后可能触发风控,建议适度使用。
### 2. 批量下载
```bash
# 在 XHS-Downloader 目录下运行
python batch_download.py links.md
```
下载的数据会保存到 `Volume/Download/ExploreData.db`
### 3. 导出记忆库
**方式 A导出为单文件**
```bash
python export_memory.py
# 生成 xhs_memory.md
```
**方式 B导出为多文件推荐用于 OpenClaw**
```bash
python export_to_workspace.py
# 生成到 ~/.openclaw/workspace/xhs-memory/
```
### 4. 配置 OpenClaw 记忆搜索
编辑 `~/.openclaw/openclaw.json`,添加:
```json
{
"memorySearch": {
"extraPaths": [
"~/.openclaw/workspace/xhs-memory"
]
}
}
```
或者如果使用单文件导出,将 `xhs_memory.md` 放到 workspace 目录下。
## 脚本说明
| 脚本 | 功能 |
|------|------|
| `batch_download.py` | 批量下载笔记并记录到数据库 |
| `export_memory.py` | 导出为单个 Markdown 文件 |
| `export_to_workspace.py` | 导出为多个独立文件(按日期+标题命名) |
## 致谢
- [XHS-Downloader](https://github.com/JoeanAmier/XHS-Downloader) - GPL-3.0 License

View File

@@ -1,48 +0,0 @@
#!/usr/bin/env python
"""
批量下载小红书笔记
用法:
python batch_download.py [links_file]
默认读取当前目录的 links.md 文件
"""
import asyncio
import sys
from pathlib import Path
try:
from source import XHS
except ImportError:
print("错误: 请在 XHS-Downloader 项目目录下运行此脚本")
print("或安装依赖: pip install -e /path/to/XHS-Downloader")
sys.exit(1)
async def main():
# 读取链接文件
links_file = Path(sys.argv[1]) if len(sys.argv) > 1 else Path("links.md")
if not links_file.exists():
print(f"错误: 链接文件不存在: {links_file}")
print("用法: python batch_download.py [links_file]")
sys.exit(1)
links = links_file.read_text().strip()
link_count = len([l for l in links.split() if l.startswith("http")])
print(f"开始下载,共 {link_count} 个链接...")
async with XHS(
work_path="./Volume",
folder_name="Download",
record_data=True, # 记录作品数据到数据库
download_record=True, # 跳过已下载
author_archive=True, # 按作者分文件夹
) as xhs:
result = await xhs.extract(links, download=True)
print(f"完成!处理了 {len(result)} 个作品")
if __name__ == "__main__":
asyncio.run(main())

View File

@@ -1,67 +0,0 @@
#!/usr/bin/env python
"""
从 XHS-Downloader 数据库导出笔记到单个 Markdown 文件
用法:
python export_memory.py [db_path] [output_file]
默认:
db_path: Volume/Download/ExploreData.db
output_file: xhs_memory.md
"""
import sqlite3
import sys
from pathlib import Path
from datetime import datetime
def export_memory(db_path: Path = None, output_file: Path = None):
db_path = db_path or Path("Volume/Download/ExploreData.db")
output_file = output_file or Path("xhs_memory.md")
if not db_path.exists():
print(f"错误: 数据库不存在: {db_path}")
return False
conn = sqlite3.connect(db_path)
cursor = conn.cursor()
# 查询所有作品
cursor.execute("""
SELECT 作品标题, 发布时间, 作品链接, 作品描述, 作者昵称, 作品标签
FROM explore_data
ORDER BY 发布时间 DESC
""")
rows = cursor.fetchall()
conn.close()
if not rows:
print("数据库为空")
return False
# 生成 Markdown
output = f"# 小红书收藏/点赞笔记 Memory\n\n"
output += f"> 导出时间: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}\n"
output += f"> 共 {len(rows)} 条笔记\n\n---\n\n"
for i, (title, time, link, desc, author, tags) in enumerate(rows, 1):
output += f"## {i}. {title or '无标题'}\n\n"
output += f"- **作者**: {author or '未知'}\n"
output += f"- **时间**: {time or '未知'}\n"
output += f"- **链接**: {link or ''}\n"
if tags:
output += f"- **标签**: {tags}\n"
output += f"\n### 内容\n\n{desc or '无内容'}\n\n---\n\n"
# 保存文件
output_file.write_text(output, encoding="utf-8")
print(f"导出完成: {output_file.absolute()}")
print(f"{len(rows)} 条笔记")
return True
if __name__ == "__main__":
db_path = Path(sys.argv[1]) if len(sys.argv) > 1 else None
output_file = Path(sys.argv[2]) if len(sys.argv) > 2 else None
export_memory(db_path, output_file)

View File

@@ -1,101 +0,0 @@
#!/usr/bin/env python
"""
将小红书笔记按单独文件导出到 OpenClaw workspace
用法:
python export_to_workspace.py [db_path] [output_dir]
默认:
db_path: Volume/Download/ExploreData.db
output_dir: ~/.openclaw/workspace/xhs-memory
导出格式类似 gpt-history每条笔记一个文件文件名格式: YYYY-MM-标题.md
"""
import sqlite3
import re
import sys
from pathlib import Path
def sanitize_filename(name: str, max_len: int = 50) -> str:
"""清理文件名,移除非法字符"""
name = re.sub(r'[<>:"/\\|?*\n\r\t]', '', name)
name = re.sub(r'\s+', '-', name.strip())
name = re.sub(r'-+', '-', name)
name = name.strip('-')
if len(name) > max_len:
name = name[:max_len].rstrip('-')
return name or "无标题"
def export_to_workspace(db_path: Path = None, output_dir: Path = None):
db_path = db_path or Path("Volume/Download/ExploreData.db")
output_dir = output_dir or Path.home() / ".openclaw/workspace/xhs-memory"
output_dir.mkdir(parents=True, exist_ok=True)
if not db_path.exists():
print(f"错误: 数据库不存在: {db_path}")
return False
conn = sqlite3.connect(db_path)
cursor = conn.cursor()
cursor.execute("""
SELECT 作品标题, 发布时间, 作品链接, 作品描述, 作者昵称, 作品标签
FROM explore_data
ORDER BY 发布时间 DESC
""")
rows = cursor.fetchall()
conn.close()
if not rows:
print("数据库为空")
return False
count = 0
for title, time, link, desc, author, tags in rows:
# 解析时间: 2026-01-25_18:17:43 -> 2026-01
if time:
date_prefix = time[:7] # YYYY-MM
full_date = time.replace('_', ' ')
else:
date_prefix = "unknown"
full_date = "未知"
# 生成文件名
safe_title = sanitize_filename(title or "无标题")
filename = f"{date_prefix}-{safe_title}.md"
filepath = output_dir / filename
# 避免重复文件名
counter = 1
while filepath.exists():
filename = f"{date_prefix}-{safe_title}-{counter}.md"
filepath = output_dir / filename
counter += 1
# 生成内容
content = f"# {title or '无标题'}\n\n"
content += f"**来源**: 小红书收藏/点赞\n\n"
content += f"**日期**: {full_date}\n\n"
content += f"**作者**: {author or '未知'}\n\n"
content += f"**链接**: {link or ''}\n\n"
if tags:
content += f"**标签**: {tags}\n\n"
content += "---\n\n"
content += "## 内容\n\n"
content += f"{desc or '无内容'}\n"
filepath.write_text(content, encoding="utf-8")
count += 1
print(f"导出完成: {output_dir}")
print(f"共生成 {count} 个文件")
return True
if __name__ == "__main__":
db_path = Path(sys.argv[1]) if len(sys.argv) > 1 else None
output_dir = Path(sys.argv[2]) if len(sys.argv) > 2 else None
export_to_workspace(db_path, output_dir)

View File

@@ -0,0 +1,86 @@
---
name: post-to-xhs
argument-hint: "[标题或内容描述]"
description: |
发布内容到小红书,支持图文笔记和视频笔记。自动判断发布类型,校验标题和素材,用户确认后发布。
当用户想在小红书发布内容时使用——包括发笔记、发图文、发视频、上传图片、写一篇小红书、把内容发到红书上、种草笔记、好物分享等,即使用户只说"帮我发一下"但上下文明确是小红书也应触发。
---
## 输入判断
根据用户提供的素材判断发布类型:
- 提供了视频文件 → 视频笔记
- 提供了图片 → 图文笔记
- 仅提供文本 → 提示用户至少提供图片或视频
## 约束
- 标题最多 20 个中文字或英文单词(小红书平台限制,超长会被截断)
- 图文笔记至少 1 张图片(小红书不允许纯文本笔记)
- 视频笔记仅支持本地视频文件绝对路径MCP 服务需要读取本地文件)
- 图片和视频不能混用,只能二选一(小红书平台限制)
- 正文中不要包含 # 标签(标签通过 `tags` 参数单独传递MCP 服务会自动处理格式)
- 发布前展示完整内容让用户确认(发布后无法撤回)
## 执行流程
### 1. 收集发布信息
确保以下内容齐全:
- `title`(必填)— 标题
- `content`(必填)— 正文
- 图片列表或视频路径(必填其一)
- `tags`(可选)— 话题标签
- `schedule_at`(可选)— 定时发布ISO8601 格式
- `is_original`(可选,仅图文)— 声明原创
- `visibility`(可选)— 公开可见 | 仅自己可见 | 仅互关好友可见
信息不完整时,向用户询问缺少的部分。
### 2. 内容校验
- 检查标题长度≤20 中文字)
- 检查图片/视频文件路径是否为绝对路径
- 如用户提供 URL 内容,先用 WebFetch 提取文本和图片
### 3. 确认发布
向用户展示完整的发布内容预览:
- 标题、正文、标签
- 图片列表或视频路径
- 定时时间、可见范围(如有)
等待用户确认后才执行发布。
### 4. 发布
**图文笔记** — 调用 `publish_content`
- `title`string必填
- `content`string必填
- `images`string[],必填)— 图片路径或 URL
- `tags`string[],可选)
- `schedule_at`string可选
- `is_original`bool可选
- `visibility`string可选
**视频笔记** — 调用 `publish_with_video`
- `title`string必填
- `content`string必填
- `video`string必填— 本地视频绝对路径
- `tags`string[],可选)
- `schedule_at`string可选
- `visibility`string可选
### 5. 报告结果
发布成功后,告知用户笔记 ID 和发布状态。
## 失败处理
| 场景 | 处理 |
|---|---|
| 未登录 | 引导使用 xhs-login |
| 标题超长 | 提示用户缩短标题 |
| 图片路径无效 | 提示检查路径是否正确 |
| 视频使用了相对路径 | 提示改为绝对路径 |
| 发布失败 | 展示错误信息,建议检查内容或重试 |

View File

@@ -0,0 +1,143 @@
---
name: setup-xhs-mcp
description: |
安装部署 xiaohongshu-mcp 服务并配置 MCP 连接,引导用户完成从零到可用的全流程。
当用户第一次使用小红书功能、提到安装/部署/配置小红书、环境搭建、MCP 服务连接失败、或 check_login_status 等 MCP 工具不可用时使用。
---
项目仓库https://github.com/xpzouying/xiaohongshu-mcp
## 执行流程
### 1. 检测服务状态
检查 xiaohongshu-mcp 是否已在运行注意MCP 端点只接受 POSTGET 会返回 405不能用 `-f` 判断):
```bash
curl -so /dev/null http://localhost:18060/mcp && echo "running" || echo "not running"
```
- 已运行 → 记录地址 `http://localhost:18060/mcp`,跳到步骤 3
- 未运行 → 询问用户:服务是否部署在其他地址/端口?
- 用户提供地址 → 验证可达后跳到步骤 3
- 未部署 → 进入步骤 2
### 2. 部署服务
确认操作系统macOS / Linux / Windows和是否已安装 Docker。
#### 方式一Docker Compose推荐
Docker 镜像内置 Chrome 和中文字体,无需额外配置。
```bash
# 下载 docker-compose.yml
wget https://raw.githubusercontent.com/xpzouying/xiaohongshu-mcp/main/docker/docker-compose.yml
# 启动服务
docker compose up -d
# 查看日志
docker compose logs -f
```
镜像源:
- Docker Hub默认`xpzouying/xiaohongshu-mcp`
- 阿里云(国内推荐):`crpi-hocnvtkomt7w9v8t.cn-beijing.personal.cr.aliyuncs.com/xpzouying/xiaohongshu-mcp`
切换方法:编辑 docker-compose.yml注释默认 image 行,取消注释阿里云 image 行。
数据持久化:
- `./data` — cookies 登录状态
- `./images` — 发布图片时的挂载目录
#### 方式二:下载二进制
从 GitHub Releases 下载https://github.com/xpzouying/xiaohongshu-mcp/releases/latest
```bash
curl -s https://api.github.com/repos/xpzouying/xiaohongshu-mcp/releases/latest | grep browser_download_url
```
注意:二进制方式需要本机已安装 Chrome 或 Chromium。
#### 方式三:源码编译
不推荐,仅适合 Go 开发者。参考项目仓库 README。
部署完成后用 curl 确认服务已启动,然后进入步骤 3。
### 3. 检测 MCP 连接配置
检查当前客户端是否已配置 xiaohongshu MCP 连接。
**Claude Code**:读取 `~/.claude/settings.json` 和项目级 `.claude/settings.json`,查找 `mcpServers` 中是否有 `xiaohongshu` 配置。
- 已配置且地址正确 → 跳到步骤 5
- 已配置但地址不匹配 → 修正地址
- 未配置 → 进入步骤 4
### 4. 配置 MCP 连接
询问用户:
**连接地址**:如果步骤 1 已确认可达的地址,用该地址作为默认值,否则默认 `http://localhost:18060/mcp`
**使用的客户端**
**Claude Code**
```bash
claude mcp add xiaohongshu --transport http <地址>
```
或写入配置文件:
- 全局:`~/.claude/settings.json`
- 项目级:`.claude/settings.json`
```json
{
"mcpServers": {
"xiaohongshu": {
"url": "http://localhost:18060/mcp"
}
}
}
```
**Cursor**`.cursor/mcp.json`
```json
{
"mcpServers": {
"xiaohongshu": {
"url": "http://localhost:18060/mcp"
}
}
}
```
**其他客户端**:告知用户 MCP 服务地址,让用户按客户端文档自行配置。
### 5. 验证与提示
1. **提示用户重启当前会话** — MCP 配置变更后需重启客户端才能加载新的 MCP 工具
2. 重启后调用 `check_login_status` 验证连接正常
3. 验证成功 → 引导用户使用 `/xhs-login` 完成扫码登录
## 环境变量(可选)
- `XHS_PROXY` — HTTP/HTTPS/SOCKS5 代理地址
- `ROD_BROWSER_BIN` — 自定义 Chromium 路径
- `HEADLESS` — 无头模式开关
## 失败处理
| 场景 | 处理 |
|---|---|
| Docker 未安装 | 建议安装 Docker 或改用二进制方式 |
| 国内拉取镜像慢 | 切换到阿里云镜像源 |
| 端口 18060 被占用 | 检查已有进程,或更换端口 |
| Chrome 未安装(二进制方式) | 引导安装 Chrome 或改用 Docker 方式 |
| 配置写入后工具仍不可用 | 提示重启客户端会话 |
| 已有配置但地址错误 | 修正地址并重启 |

View File

@@ -1,212 +0,0 @@
---
name: xhs-content-creator
description: |
小红书爆款内容创作器。基于知识库中沉淀的爆款逻辑、用户身份信息和场馆资料,自动生成高质量小红书帖子。
完整流程:读取 wiki 知识库 → 可选搜索竞品 → 生成内容 → 审核优化 → 沉淀到知识库。
触发场景(即使用户没有明确说"小红书",只要意图是创作社交媒体内容也应触发):
- "帮我写一篇小红书"
- "生成小红书内容"
- "写篇帖子/笔记"
- "创作一篇关于XX的内容"
- "帮我写个引流帖"
- "出一篇关于XX的文案"
- 用户描述了想表达的主题/卖点,期望产出可发布的内容
不触发:
- 纯搜索/拉取小红书数据(用 xiaohongshu skill
- 分析已有笔记质量(用 xiaohongshu-note-analyzer skill
- 知识库的 ingest/query/lint 操作
---
# 小红书爆款内容创作器
用户只需说出想表达的主题,本 skill 自动完成:知识库调研 → 内容生成 → 质量审核 → 知识库沉淀。
## 执行流程
按以下 5 个阶段顺序执行。每个阶段完成后简要告知用户进度。
---
### 阶段 1读取知识库上下文
这一步的目的是让你充分理解用户的身份、过往内容风格、已沉淀的爆款规律,避免生成泛泛而谈的内容。
1. 读取项目根目录的 `CLAUDE.md`,了解知识库结构和页面规范
2. 读取 `wiki/index.md`,扫描所有已有的 source、topic、entity、idea 页面
3. 根据用户本次创作主题,读取相关的 wiki 页面:
- `wiki/topics/` 下与主题相关的爆款逻辑分析
- `wiki/sources/` 下的历史素材摘要
- `wiki/entities/` 下的用户身份、场馆、品牌信息
- `wiki/ideas/` 下是否有相关的已有构思
- `wiki/meta/` 下的方法论和风格指南
从这些页面中提取并记住以下关键信息(后续阶段会用到):
- **用户身份**:职业、资质认证、从业经验
- **场馆/品牌信息**:名称、地址、特色、定位
- **爆款规律**:标题公式、正文结构模式、标签策略、互动触发技巧
- **历史创作**:过往的选题和风格,避免重复
如果 wiki 中缺少用户身份或场馆信息(比如 entities 目录为空),直接询问用户补充关键信息,并建议后续创建 entity 页沉淀。
---
### 阶段 2确认创作方向
和用户对齐内容策略,避免写完才发现方向不对。
根据知识库中的爆款分析(如果有),向用户展示适合本次主题的内容类型选项:
| 类型 | 特征 | 适合场景 |
|---|---|---|
| 经验复盘型 | 赞藏评均衡,评论互动强 | 引流获客、建立信任 |
| 模板/清单型 | 高赞高藏,天花板高 | 涨粉、扩大曝光 |
| 方法论干货型 | 高收藏,同行传播 | 打造行业 IP |
| 避坑/对比型 | 痛点驱动,讨论多 | 引发互动、吸引精准客户 |
让用户选择或确认。如果用户已经明确说了类型(比如"写篇复盘帖"),直接跳过选择。
同时确认:
- 这篇内容的核心卖点/想表达的重点
- 目标读者是谁(潜在客户 vs 同行)
---
### 阶段 3生成内容
这是核心输出阶段。基于阶段 1 的知识库上下文和阶段 2 的方向确认,生成完整帖子。
#### 标题生成
从 wiki 中提取的爆款标题公式中选择最适合本次内容类型的公式,生成 2-3 个备选标题。
标题要求:
- 20 字以内
- 必须包含核心关键词
- 必须有情绪触发点或价值点
- 包含地域词(如果是同城引流内容)
#### 正文生成
遵循以下结构原则(来自爆款分析的共性规律):
1. **开头即钩子**:前 2 句制造"跟我有关"的感觉,用故事或痛点切入,不用"大家好我是XX"
2. **结构可扫读**:用 emoji 编号(❶❷❸)+ 短段落,不写大段文字
3. **有具体案例**:不讲道理讲经历,不说术语说感受
4. **真实感 > 专业感**:用第一人称,带入个人经历和真实数据
5. **结尾留互动空间**:提问式引导评论,但不用"一键三连"这类硬引导
正文字数300-600 字(小红书最佳区间)。
自动融入用户身份和场馆信息,但要自然 — 品牌名只在结尾出现一次,认证资质作为背景信息融入叙述,不要堆砌。
#### 标签生成
15 个左右标签,覆盖四个维度:
- 核心词标签(行业 + 细分)
- 地域词标签(城市 + 区域 + 地标)
- 场景词标签(痛点场景、使用场景)
- 泛赛道标签(跨到更大的流量池,如女性创业、实体门店)
#### 输出格式
```
## 备选标题
A: [标题A]
B: [标题B]
C: [标题C]
推荐:[推荐哪个,为什么]
## 正文
[完整正文,可直接复制发布]
## 标签
[所有标签,以 # 分隔]
```
---
### 阶段 4内容审核与优化
生成初稿后,调用 xiaohongshu-note-analyzer skill 进行 6 维度审核:
```
使用 Skill tool 调用 xiaohongshu-note-analyzer传入生成的标题和正文
```
审核维度:
1. 关键词分析 — 核心词布局、标签优化
2. 标题/首段吸引力 — 爆款公式匹配度
3. 敏感内容风险 — 违规词、限流风险
4. 商业化程度 — 自然度评分
5. 互动触发潜力 — 讨论点、收藏价值
6. 内容结构 — 排版节奏
根据审核结果,自动修改有问题的部分:
- 🔴 高危敏感词:直接替换
- 🟠 中危问题:调整表述
- 标题吸引力 < 7/10重写标题
- 自然度 < 7/10降低商业感
- 互动触发缺失:补充结尾互动引导
将审核报告和最终优化版一并展示给用户。
---
### 阶段 5沉淀到知识库
用户确认内容满意后(或用户说"就这样"、"可以了"、"保存"),将内容存入知识库。
1. **创建 idea 页**:保存到 `wiki/ideas/` 目录
文件名:`xhs-{主题关键词}.md`
```yaml
---
type: idea
created: YYYY-MM-DD
updated: YYYY-MM-DD
tags: [相关标签]
sources: [引用的 wiki 页面路径]
status: ready
---
```
页面内容包含:
- 最终标题
- 完整正文
- 标签列表
- 审核评分摘要
- 创作思路备注(用了哪个标题公式、参考了哪些爆款规律)
2. **更新 `wiki/index.md`**:在 Ideas 区块添加条目
3. **追加 `wiki/log.md`**`## [YYYY-MM-DD] create | 小红书内容:{标题}`
---
## 竞品搜索(可选增强)
如果用户希望参考竞品(比如说"看看别人怎么写的"、"搜一下类似的"),或者 wiki 中缺少该主题的爆款分析:
1. 使用 Skill tool 调用 xiaohongshu skill搜索相关关键词
2. 拉取 Top 3-5 的帖子详情
3. 快速分析竞品的标题套路、正文结构、互动数据
4. 将分析结果临时参考用于生成,并建议用户是否要 ingest 到知识库
不要每次都自动搜索 — 只在用户要求或知识库中明显缺少相关主题分析时才触发。
---
## 注意事项
- 始终优先使用 wiki 中已沉淀的爆款规律,它们是基于真实数据分析得出的
- 内容要有真实感和个人色彩,不要写成通用模板
- 认证资质(如斯多特认证)用英文原名更有辨识度(如 STOTT PILATES
- 地址信息放在结尾的 📍 区块,不要散落在正文中
- 如果用户只是随口说了个想法还不想深入,先帮 ta 理清思路再动手写

View File

@@ -0,0 +1,41 @@
---
name: xhs-content-plan
description: |
小红书内容策划助手:搜索分析热门内容和竞品,帮助规划内容方向、选题、标签策略。
当用户想做小红书运营规划时使用——内容策划、选题灵感、竞品分析、爆款分析、热门话题研究、怎么做小红书、涨粉策略等。
---
## 执行流程
### 1. 明确策划需求
向用户了解:
- 目标领域/赛道(如:美妆、旅行、美食)
- 策划目的:选题灵感 / 竞品分析 / 热门趋势
### 2. 搜索分析
根据需求调用 `search_feeds` 搜索相关内容:
- 使用不同关键词多次搜索覆盖领域
- 利用 `sort_by` 筛选:最多点赞(爆款)、最新(趋势)
对高互动笔记,调用 `get_feed_detail` 获取详情,分析:
- 标题写法和关键词
- 内容结构和篇幅
- 话题标签使用
- 评论区用户关注点
如需分析特定博主,调用 `user_profile` 查看其内容风格和数据表现。
### 3. 输出策划建议
整理分析结果,为用户提供:
- 热门选题方向
- 标题参考模板
- 推荐话题标签
- 内容结构建议
## 约束
- 这是只读分析 skill不执行任何发布或互动操作
- 搜索操作需要已登录状态

View File

@@ -0,0 +1,44 @@
---
name: xhs-explore
description: |
浏览小红书推荐流、查看笔记详情和评论。
当用户想看推荐内容、刷首页、查看某条笔记的详情/评论、或已有 feed_id 想获取完整内容时使用。
---
## 输入判断
- 用户想浏览推荐 → 步骤 1
- 用户提供了 feed_id → 步骤 2
## 执行流程
### 1. 获取推荐流
调用 `list_feeds`(无参数),返回首页推荐笔记列表。
展示每条笔记的标题、作者、互动数据,附带 `feed_id``xsec_token`
### 2. 查看笔记详情
调用 `get_feed_detail`
- `feed_id`string必填
- `xsec_token`string必填
- `load_all_comments`bool可选默认 false仅返回前 10 条评论)
- `limit`int可选load_all_comments=true 时生效,默认 20
- `click_more_replies`bool可选是否展开二级回复
- `reply_limit`int可选跳过回复数超过此值的评论默认 10
- `scroll_speed`string可选slow | normal | fast
展示:笔记内容、图片、作者信息、互动数据、评论列表。
提示用户可以:
- 点赞/收藏(使用 xhs-interact
- 发表评论(使用 xhs-interact
- 查看作者主页(使用 xhs-profile
## 失败处理
| 场景 | 处理 |
|---|---|
| 未登录 | 引导使用 xhs-login |
| 笔记已删除或不可见 | 告知用户该笔记无法访问 |

View File

@@ -0,0 +1,70 @@
---
name: xhs-interact
description: |
对小红书笔记进行互动:点赞/取消点赞、收藏/取消收藏、发表评论、回复评论。
当用户想对小红书笔记进行互动时使用——赞一下、收藏一下、留个评论、回复某条评论、取消点赞、取消收藏等。
---
## 输入判断
根据用户意图路由:
- 点赞/取消点赞 → 点赞流程
- 收藏/取消收藏 → 收藏流程
- 发表评论 → 评论流程
- 回复评论 → 回复流程
## 约束
- 评论和回复执行前展示内容让用户确认(评论以用户身份公开发表,无法撤回)
- 点赞和收藏可直接执行操作可逆MCP 服务有幂等处理)
- 所有操作都需要 `feed_id` + `xsec_token`(来自搜索或详情结果,编造会导致报错)
## 执行流程
### 点赞
调用 `like_feed`
- `feed_id`string必填
- `xsec_token`string必填
- `unlike`bool可选— true 取消点赞,默认 false 点赞
已点赞时再点赞会自动跳过,反之同理。
### 收藏
调用 `favorite_feed`
- `feed_id`string必填
- `xsec_token`string必填
- `unfavorite`bool可选— true 取消收藏,默认 false 收藏
已收藏时再收藏会自动跳过,反之同理。
### 发表评论
调用 `post_comment_to_feed`
- `feed_id`string必填
- `xsec_token`string必填
- `content`string必填— 评论内容
发送前展示评论内容让用户确认。
### 回复评论
调用 `reply_comment_in_feed`
- `feed_id`string必填
- `xsec_token`string必填
- `comment_id`string可选— 目标评论 ID
- `user_id`string可选— 目标评论作者 ID
- `content`string必填— 回复内容
`comment_id``user_id` 至少提供一个。
发送前展示回复内容让用户确认。
## 失败处理
| 场景 | 处理 |
|---|---|
| 未登录 | 引导使用 xhs-login |
| 缺少 feed_id/xsec_token | 提示先搜索或浏览获取笔记信息 |
| 笔记不可评论 | 告知用户该笔记已关闭评论 |

View File

@@ -0,0 +1,55 @@
---
name: xhs-login
description: |
管理小红书登录状态:检查是否已登录、二维码扫码登录、重置登录切换账号。
当用户提到登录、扫码、账号、切换账号、退出登录、登录状态检查,或其他 skill 报告"未登录"需要先登录时使用。
---
## 执行流程
### 1. 检查登录状态
调用 `check_login_status`(无参数),返回是否已登录及用户名。
- 已登录 → 告知用户当前登录账号
- 未登录 → 进入步骤 2
### 2. 扫码登录
调用 `get_login_qrcode`无参数。MCP 工具返回两部分内容:
- 文本:超时提示(含截止时间)
- 图片PNG 格式二维码MCP image content typeBase64 编码)
**展示二维码**MCP 返回的图片会通过客户端渲染给用户。如果客户端无法直接展示图片(如纯文本终端),则将 Base64 数据保存为临时 PNG 文件,告知用户文件路径让其手动打开:
```bash
# fallback: 保存二维码到临时文件
echo "<base64_data>" | base64 -d > /tmp/xhs-qrcode.png
open /tmp/xhs-qrcode.png # macOS
xdg-open /tmp/xhs-qrcode.png # Linux
```
提示用户:
- 打开小红书 App 扫描二维码
- 二维码有效期有限,过期需重新获取
扫码完成后,调用 `check_login_status` 确认登录成功。
### 3. 重新登录 / 切换账号
当用户要求重新登录或切换账号时:
1. 调用 `delete_cookies`(⚠️ 需用户确认)— 清除当前登录状态
2. 调用 `get_login_qrcode` — 获取新二维码
3. 引导用户扫码
## 约束
- `delete_cookies` 会清除登录状态,执行前必须确认
- 登录需要用户手动用手机 App 扫码,无法自动完成
## 失败处理
| 场景 | 处理 |
|---|---|
| MCP 工具不可用 | 引导用户使用 `/setup-xhs-mcp` 完成部署和连接配置 |
| 二维码超时 | 重新调用 `get_login_qrcode` |

View File

@@ -0,0 +1,29 @@
---
name: xhs-profile
description: |
查看小红书用户主页:基本信息、粉丝/关注/获赞数据、发布的笔记列表。
当用户想查看某个博主、作者、用户的主页信息和作品时使用。
---
## 执行流程
### 1. 获取用户信息
调用 `user_profile`
- `user_id`string必填— 用户 ID来自笔记详情或搜索结果
- `xsec_token`string必填
### 2. 展示结果
- 基本信息:昵称、头像、简介、性别、地区
- 数据:粉丝数、关注数、获赞与收藏数
- 最近发布的笔记列表(含 feed_id 和 xsec_token
提示用户可以查看某条笔记详情或进行互动。
## 失败处理
| 场景 | 处理 |
|---|---|
| 未登录 | 引导使用 xhs-login |
| 用户不存在 | 告知用户该主页无法访问 |

View File

@@ -0,0 +1,44 @@
---
name: xhs-search
argument-hint: "[搜索关键词]"
description: |
搜索小红书笔记,支持关键词搜索和多维度筛选(排序、内容类型、时间范围、位置等)。
当用户想在小红书上搜索、查找内容时使用——包括搜笔记、找攻略、看看小红书上有没有某某内容、搜一下、查一查等场景。
---
## 执行流程
### 1. 确认搜索条件
从用户输入中提取:
- `keyword`(必填)— 搜索关键词
- `filters`(可选)— 筛选条件
### 2. 调用搜索
调用 `search_feeds`
- `keyword`string必填
- `filters`object可选
- `sort_by`:综合 | 最新 | 最多点赞 | 最多评论 | 最多收藏
- `note_type`:不限 | 视频 | 图文
- `publish_time`:不限 | 一天内 | 一周内 | 半年内
- `search_scope`:不限 | 已看过 | 未看过 | 已关注
- `location`:不限 | 同城 | 附近
### 3. 展示结果
将搜索结果整理为列表展示,每条包含:
- 标题、作者
- 点赞数、评论数、收藏数
- `feed_id``xsec_token`(后续操作需要)
提示用户可以:
- 查看某条笔记详情(使用 xhs-explore
- 对笔记进行互动(使用 xhs-interact
## 失败处理
| 场景 | 处理 |
|---|---|
| 未登录 | 引导使用 xhs-login 登录 |
| 无搜索结果 | 建议调整关键词或筛选条件 |

View File

@@ -1 +0,0 @@
../../.agents/skills/xiaohongshu

View File

@@ -1 +0,0 @@
../../.agents/skills/xiaohongshu-note-analyzer

View File

@@ -17,6 +17,6 @@
"repelStrength": 10,
"linkStrength": 1,
"linkDistance": 250,
"scale": 1.992301859915002,
"scale": 2.506918337983666,
"close": false
}

View File

@@ -178,21 +178,32 @@
},
"active": "07a6f5425ad166a7",
"lastOpenFiles": [
"wiki/log.md",
"wiki/meta/index.md",
"wiki/sources/xhs-三公里社群渗透方法论.md",
"wiki/entities/focus-core.md",
"wiki/ideas/品牌介绍帖-focus-core.md",
"wiki/raw/普拉提引流调研报告.md",
"wiki/topics/普拉提一人一馆-内容矩阵策划.md",
"wiki/topics/普拉提场馆引流-爆款逻辑.md",
"wiki/entities/and-her-pilates.md",
"wiki/sources/xhs-普拉提IP打造-案例拆解法.md",
"wiki/sources/xhs-普拉提私教-竞品爆款分析.md",
"wiki/entities/放羊的杨.md",
"wiki/raw/xhs-产后恢复引流帖-v2.md",
"wiki/raw",
"wiki/sources/xhs-普拉提引流-top5爆款.md",
"wiki/entities/贝贝聊IP.md",
"wiki/meta/log.md",
"wiki/meta",
"raw",
"wiki/log.md",
"wiki/entities/cathy-普拉提.md",
"wiki/ideas/案例拆解内容模型.md",
"wiki/sources/xhs-三公里社群渗透方法论.md",
"wiki/entities/贝贝聊IP.md",
"wiki/sources/xhs-普拉提IP打造-案例拆解法.md",
"wiki/entities/focus-core.md",
"wiki/sources/xhs-普拉提引流-top5爆款.md",
"CLAUDE.md",
"wiki/index.md",
"assets",
"wiki/topics",
"wiki/sources",
"wiki/meta",
"wiki/ideas",
"wiki/entities",
"wiki"

View File

@@ -1 +0,0 @@
../.agents/skills/xiaohongshu

View File

@@ -1 +0,0 @@
../.agents/skills/xiaohongshu-note-analyzer

View File

@@ -0,0 +1,51 @@
---
type: entity
created: 2026-04-19
updated: 2026-04-19
tags: [普拉提, 品牌, 武汉, 一人一馆, 竞品]
sources: [wiki/sources/xhs-普拉提私教-竞品爆款分析]
---
# AND HER PILATES
## 基本信息
- **类型**:普拉提私教工作室
- **城市**:武汉
- **模式**1v1 预约制,每个时段只接待一位客户
- **器械**:曼丽丘(普拉提界高端器械品牌)
- **认证**:斯多特认证教练(官网可查)
## 品牌定位
> 为想从运动中探寻自由的女性所打造的空间
- 强调「不定义女性力量」,情感价值驱动
- 不只卖课,卖「运动乌托邦」体验
- 附加服务:更衣淋浴、咖啡茶饮、主题拍照角、会员墙
## 课程与定价
- 只做 1v1 私教
- 无储值卡、无大课包
- 课包设置12节建立运动模式、36节强化肌肉效果
- 推荐频率:每周 2-3 次
- **无销售、无套路** — 体验后理性购买
## 小红书数据
- 爆款帖:「关于课程与价格,服务与体验,一篇讲清楚!」
- 数据:**1163赞 / 1011藏 / 74评**
- 图文 11 张,完整介绍品牌理念→器械→课程→价格→服务
## 值得学习的点
1. **透明度极高**:价格、频率、效果预期全部公开,降低决策门槛
2. **情感包装**:不说"私教课",说"专属运动乌托邦"
3. **服务细节展示**:咖啡茶饮、绿植音乐、拍照角 — 体验感 > 功能性
4. **评论区就是客资池**74条评论大多是咨询预约
## 相关页面
- [[wiki/sources/xhs-普拉提私教-竞品爆款分析]]
- [[wiki/ideas/品牌介绍帖-focus-core]]

View File

@@ -0,0 +1,53 @@
---
type: entity
created: 2026-04-19
updated: 2026-04-19
tags: [普拉提, 博主, 一人一馆, 竞品, 人设运营]
sources: [wiki/sources/xhs-普拉提私教-竞品爆款分析]
---
# 放羊的杨-
## 基本信息
- **小红书 ID**XYY18383223241
- **粉丝**11,904
- **获赞与收藏**244,737
- **关注**17
- **IP 属地**:陕西
- **简介**游走50+国的地球观光客 / 普拉提爱好者从业者@遊|普拉提 / 运动|旅行|运动穿搭
## 账号定位
典型的「一人一馆」赛道标杆博主,以 Vlog 日常为主要内容形式。
## 内容矩阵
| 类型 | 代表作 | 赞 | 评 |
|------|--------|---|---|
| 创业Vlog | 没有30+创业 也没有月入10万 | 331 | 59 |
| 日常记录 | 一人一馆 记录生活可以提高行动力 | 62 | 20 |
| 聊天/talk | 一人一馆日常看腻了 又是一期talk局 | 134 | 10 |
| 经验分享 | 聊聊我一人一馆的第三年 | 119 | 17 |
| 工作节奏 | 一天上5节课和8节课的区别 | 74 | 12 |
| 下班日常 | 羊师傅下钟啦 | 77 | 12 |
| 旅行/穿搭 | 最不后悔的事在24岁前环游40国 | 513 | — |
| 干货分享 | 普拉提必读书籍推荐 | 2711 | — |
## 运营特点
1. **人设 > 专业**:旅行经历 + 创业故事让她不只是"普拉提老师"
2. **高频 Vlog**:几乎每篇都是视频,展示真实日常
3. **评论互动强**:日常类内容评论数普遍 10-60 条
4. **粉丝粘性高**24.4万获赞/1.19万粉,每粉赞比 20.6
5. **跨赛道流量**:旅行穿搭类内容拉新,普拉提内容留存
## 对 Focus Core 的启示
- 一人一馆 Vlog 是可持续的内容方向,不需要高制作成本
- 个人故事/经历是差异化壁垒,别人无法复制
- 建议 Focus Core 也建立「专业之外」的人设维度
## 相关页面
- [[wiki/sources/xhs-普拉提私教-竞品爆款分析]]

View File

@@ -0,0 +1,147 @@
---
type: idea
created: 2026-04-19
updated: 2026-04-19
tags: [普拉提, 品牌介绍, 获客, 小红书, focus-core]
sources: [wiki/sources/xhs-普拉提私教-竞品爆款分析, wiki/entities/and-her-pilates]
status: ready
---
# 品牌介绍帖 · Focus Core
## 创作背景
参考 AND HER PILATES 的爆款帖1163赞/1011藏/74评这是普拉提工作室最直接的获客工具。评论区全是「怎么预约」「想了解价格」本质是一篇长效引流的「店面门面」帖。
## 核心 Hook
> 一个人的馆,只为一个人服务。
切入点:用「一人一馆」的稀缺感和「只做私教」的专注度,与大馆团课形成差异。
## 目标受众
- 深圳宝安区及周边女性
- 在大馆上过团课但效果不明显、想试私教的人
- 有明确体态问题(骨盆前倾、圆肩驼背、产后修复)
- 在乎体验感、隐私性,不喜欢被推销
## 标题方案
主推:**关于我的一人一馆,一篇讲清楚**
备选:
- 深圳宝安|一人一馆,只做一对一的普拉提工作室
- 一人一馆是什么体验?关于课程和服务,全部告诉你
- 我的普拉提工作室,没有销售只有专注
## 正文结构(图文帖,建议 8-10 张图)
### 图 1封面
- 馆内全景或器械特写,文字叠加标题
- 视觉要求:干净、有质感、光线好
### 图 2品牌理念
> Focus Core — 专注核心
> 一人一馆,一个时段只服务一位你
> 没有前台、没有销售、没有推销
> 只有教练和你,专注在每一次呼吸和运动里
### 图 3关于我/教练介绍
> 你好,我是 Focus Core 的馆主
> STOTT PILATES 斯多特认证高级教练
> 从业 X 年,累计服务 X+ 位学员
> 我选择一人一馆,是因为…(真实原因/故事)
### 图 4器械与空间
> 全套斯多特器械
> 凯迪拉克床 / 核心床 / 稳踏椅 / 万能椅
> 每一台器械都是为私教课量身配置
> (配器械实拍图)
### 图 5我能帮你解决什么
> ✅ 骨盆前倾 / 圆肩驼背 / 富贵包
> ✅ 产后骨盆修复 / 腹直肌分离
> ✅ 久坐腰痛 / 肩颈僵硬
> ✅ 核心激活 / 运动表现提升
> 私教的好处:根据你的身体状况定制每一节课
### 图 6关于课程
> 只做 1 对 1 私教
> 每节课 60 分钟,包含评估+训练+拉伸
> 12 节课建立运动模式,体态明显改善
> 36 节课深度强化,效果稳定持久
> 建议频率:每周 2-3 次
### 图 7关于价格
> 没有储值卡,没有大课包
> 没有销售套路
> 按需购买12节/36节课包
> 体验课 XX 元/节,欢迎先来感受
> (具体价格根据实际填写)
### 图 8关于体验
> 📍 深圳宝安坪洲地铁站步行3分钟
> 一人一馆,独享空间,完全私密
> 提供更衣室和基础洗护
> 课后可以坐一坐,喝杯水,不急着走
> (配空间细节图)
### 图 9可选学员变化
> 学员 X 节课对比(征得同意后展示)
> 或学员的文字反馈截图
### 图 10可选预约方式
> 想体验可以直接私信我 💬
> 或留言你想改善的问题,我帮你看看
## 正文文案
```
Focus Core 专注核心
一个人的馆,只为一个人服务。
我是 Focus Core 的馆主STOTT PILATES 斯多特认证教练。选择做一人一馆,是因为我相信好的私教课应该是——安静、专注、完全属于你的。
这里没有前台,没有销售,没有推销。
只有教练和你,专注在每一次呼吸和运动里。
▫️ 我能帮你
骨盆前倾 / 圆肩驼背 / 富贵包 / 产后修复 / 久坐腰痛
根据你的身体状况,定制每一节课的内容。
▫️ 关于课程
只做 1v1 私教,每节课 60 分钟
12节课建立运动模式体态会有明显变化
36节课深度强化让改变稳定持久
建议每周 2-3 次
▫️ 关于价格
没有储值卡,没有大课包,没有套路
体验后根据自己情况理性购买即可
▫️ 关于这里
📍 深圳宝安坪洲地铁站步行3分钟
一个时段只接待一位,完全私密
提供更衣室和基础洗护
想来体验,可以直接私信我 💬
或者留言你想改善的问题,我来帮你看看。
```
## 话题标签
`#普拉提` `#普拉提私教` `#一人一馆` `#深圳普拉提` `#宝安普拉提` `#坪洲普拉提` `#体态矫正` `#普拉提工作室` `#深圳` `#私教课`
## 发布建议
1. **图片质量是关键**:封面决定点击率,馆内实拍要有光线和质感
2. **发布后置顶**:这篇帖子会长期吸引搜索流量
3. **评论区及时回复**:有人咨询预约一定第一时间回
4. **可定期更新**:有了学员对比图后补充进去
## 相关页面
- [[wiki/entities/and-her-pilates]] — 参考标杆
- [[wiki/entities/focus-core]] — 场馆信息
- [[wiki/topics/普拉提一人一馆-内容矩阵策划]] — 整体内容策略

View File

@@ -1,7 +1,7 @@
---
type: meta
created: 2026-04-15
updated: 2026-04-16
updated: 2026-04-19
---
# Wiki Index
@@ -14,11 +14,13 @@ updated: 2026-04-16
- [[wiki/sources/xhs-普拉提引流-top5爆款]] — 小红书「普拉提引流」Top5 爆款笔记原始采集472~203赞
- [[wiki/sources/xhs-三公里社群渗透方法论]] — 「如何让你的馆在三公里内所熟知」爆款拆解社区渗透三步法197赞/241藏
- [[wiki/sources/xhs-普拉提IP打造-案例拆解法]] — 「普拉提ip难做❓看看她是怎么做的❓」案例拆解型爆款分析185赞/139藏收藏率75%
- [[wiki/sources/xhs-普拉提私教-竞品爆款分析]] — 「普拉提私教」「一人一馆」赛道竞品爆款数据分析60+笔记含5种标题公式
## Topics
<!-- 主题/选题方向 -->
- [[wiki/topics/普拉提场馆引流-爆款逻辑]] — 5 篇爆款的标题公式、正文结构、标签策略、评论区规律拆解
- [[wiki/topics/普拉提一人一馆-内容矩阵策划]] — 4:2:1内容矩阵流量款/信任款/人设款),每周发布节奏,标签策略
## Entities
<!-- 人物、品牌、产品、账号等实体 -->
@@ -26,8 +28,11 @@ updated: 2026-04-16
- [[wiki/entities/focus-core]] — Focus Core 普拉提工作室:身份、地址、特色、目标客户、内容定位
- [[wiki/entities/贝贝聊IP]] — 小红书IP打造/自媒体运营博主,「案例拆解」内容模型代表
- [[wiki/entities/cathy-普拉提]] — 普拉提博主被贝贝聊IP拆解的起号案例
- [[wiki/entities/and-her-pilates]] — AND HER PILATES武汉普拉提工作室品牌介绍帖标杆1163赞/1011藏/74评
- [[wiki/entities/放羊的杨]] — 放羊的杨-一人一馆赛道标杆博主1.19万粉/24.4万获赞Vlog日常+创业故事
## Ideas
<!-- 创作灵感、选题构思、内容框架 -->
- [[wiki/ideas/案例拆解内容模型]] — 基于贝贝聊IP帖子提炼的「第三方博主拆解」创作框架附6张卡片模板和标题公式
- [[wiki/ideas/品牌介绍帖-focus-core]] — Focus Core 品牌介绍帖完整策划标题方案、10张图结构、正文文案、标签

View File

@@ -1,13 +1,29 @@
---
type: meta
created: 2026-04-15
updated: 2026-04-16
updated: 2026-04-19
---
# Wiki Log
操作日志,按时间倒序。每条以 `## [日期] 动作 | 标题` 格式记录。
## [2026-04-19] ingest | 普拉提私教赛道竞品爆款分析+内容矩阵策划
搜索「普拉提私教」「普拉提体态矫正前后对比」「一人一馆 普拉提」三组关键词采集约60条笔记。
分析5种内容类型的数据表现提炼6种标题公式总结标签策略和内容形式偏好。
详细拆解 AND HER PILATES 品牌介绍爆款帖1163赞/1011藏/74评的结构和评论区信号。
分析「放羊的杨-」一人一馆标杆博主1.19万粉/24.4万获赞)的内容矩阵。
创建:
- source 页xhs-普拉提私教-竞品爆款分析.md
- entity 页and-her-pilates.md武汉品牌介绍帖标杆
- entity 页:放羊的杨.md一人一馆Vlog标杆
- topic 页:普拉提一人一馆-内容矩阵策划.md4:2:1模型+每周发布节奏)
- idea 页:品牌介绍帖-focus-core.md完整帖子策划标题、10张图结构、正文文案、标签
更新 index.md
## [2026-04-16] lint | 修复7处缺陷
- 创建 wiki/meta/ 目录,将 index.md 和 log.md 移入
- 补全 index.md、log.md 缺失的 created/updated 字段

View File

@@ -0,0 +1,135 @@
---
type: raw
created: 2026-04-18
tags: [产后恢复, 普拉提, stott, 引流帖, 小红书]
status: optimized
---
# 产后恢复引流帖 v2优化稿
> 来源:基于馆主原始草稿,经 wiki 爆款逻辑 + 笔记分析器双重优化
> 分析日期2026-04-18
---
## 分析摘要
| 维度 | 评分 | 核心问题 |
| ---------- | ------ | ---------------------------------- |
| 关键词布局 | 8/10 | 核心词覆盖好,缺少泛流量标签 |
| 标题吸引力 | 7.5/10 | 对话体真实感强,但"核心空了"偏专业 |
| 敏感风险 | 🟡低危 | "漏尿"+"统计数据"需注意 |
| 商业自然度 | 7/10 | 评估段落像课程介绍PPT需故事化 |
| 评论触发 | 5/10 | **最大短板**——内容太完整,无留白 |
| 收藏价值 | 8/10 | 三问题科普+解决路径,信息密度够 |
### 关键优化动作
1. **增加自查互动**——加入腹直肌自测动作,引导评论
2. **评估段落故事化**——用真实客户片段替代流程列表
3. **结尾利他钩子**——"私信发你自查清单"替代直接引流
4. **精简篇幅**——从800字压缩到600字以内
5. **补充泛流量标签**——#宝妈日常 #女性健康 #产后运动
---
## 最终优化稿
🤱 "教练,我生完一年了,打个喷嚏还是会漏…"
来找我的产后妈妈,十个有八个说过类似的话
她们的故事几乎一样——
肚子看着回去了,人也能跑了
但身体就是「空了一块」,撑不住
久站腰酸、抱娃手废
弯腰捡东西腰就闪到
蹦一下漏一点(妈妈们懂的😭)
肚子松松垮垮,怎么练都收不紧
不是不努力——瑜伽、跑步、keep都试了
但这三个问题还是没好 ↓
产后核心的三个「隐形损伤」
❶ 腹直肌分离
孕期腹部被撑开,左右腹直肌从中间分开
生完不会自动合回去
普通卷腹、仰卧起坐?反而让分离更严重
❷ 盆底肌松弛
孕期盆底肌承受了巨大压力
产后咳嗽漏尿、跳绳漏尿,不是矫情
是盆底肌在求救
❸ 腰椎不稳
骨盆前倾 + 腹部失活 = 核心兜不住脊柱
久坐久站就腰痛,抱娃更明显
这三件事大多数妈妈同时中招
而且不是「练多了就好」——练错了反而更严重
你可以先自测:平躺放松,手指放肚脐上方,微微抬头——指尖能陷进去超过两指宽,大概率有分离。测完来评论区说说你的情况?
普拉提为什么能解这个?
因为它从最深层开始——
先激活盆底肌 → 再唤醒腹横肌 → 最后重建整体稳定
不是让你出汗、让你瘦
是从里面一层一层重新稳起来
但关键是——不是所有教练都能带产后
为什么我说,不是所有普拉提教练都能带产后?
市面上3天拿证、7天上岗的培训太多了
大部分只教动作,不教「为什么做这个动作」
我的认证体系是 STOTT PILATES斯多特
全球四大普拉提体系之一
它的特点是以现代解剖学和康复医学为基础
不只是教你摆姿势,而是要求教练能做身体评估、能设计个性化方案
✅ 系统学过解剖学、生物力学
✅ 腹直肌分离几指、盆底肌什么分级——评估完才决定怎么练
✅ 证书编号官网可查,造不了假
产后恢复涉及盆底、脊柱、腹壁重建
这件事,值得你找一个受过系统训练的人来带
💬 来我这里的妈妈,第一次都不是来训练的
上周有个妈妈,生完两年了,练了一年多瑜伽
来了一评估——腹直肌分离还有2.5指,盆底肌几乎激活不了
我们没有上来就练
而是从呼吸模式开始,重新教她的身体「怎么发力」
每个人起点不同,方案就不同
没有标准课程,只有适合你现在状态的那一个方案
这才是1对1的意义
📍 深圳宝安 · 坪洲站步行2分钟
一人一时段 · 私密安静 · 停车方便
不推销、不办年卡 🤍
你是产后多久?现在最困扰的是什么问题?评论区聊聊👇
#产后恢复 #盆底肌修复 #腹直肌分离 #产后普拉提 #深圳产后恢复 #STOTT普拉提 #斯多特认证 #宝安普拉提 #普拉提私教 #核心修复 #产后漏尿 #产后体态 #坪洲 #深圳宝妈 #一对一私教 #产后康复 #盆底肌训练 #深圳普拉提 #宝妈日常 #女性健康 #产后运动
---
## 与原稿对比
| 改动点 | 原稿 | 优化稿 | 依据 |
| -------- | ------------------ | ---------------------------------- | --------------------------------- |
| 标题 | "核心还是空的" | "打个喷嚏还是会漏" | 症状更通俗,搜索覆盖更广 |
| 自查互动 | 无 | 加入腹直肌自测+评论引导 | wiki规律干货完整→评论少需留白 |
| 评估段落 | 4个箭头流程列表 | 真实客户故事(生完两年+分离2.5指) | 降低PPT感提升真人分享感 |
| 结尾钩子 | "私信我产后两个字" | "私信发你自查清单"+开放提问 | 利他前置,给私信一个理由 |
| 篇幅 | ~800字 | ~600字 | 小红书最佳完读长度400-600字 |
| 标签 | 18个 | 21个补充3个泛流量标签 | 拉宽非精准流量入口 |
| 敏感处理 | "十个有八个" | 保留但建议发布时观察 | 无来源统计有审核风险 |

View File

@@ -0,0 +1,168 @@
---
🎯 普拉提一人一馆 · 小红书获客内容策划报告
---
一、赛道数据概览
我分析了「普拉提私教」「普拉提体态矫正」「一人一馆」三个关键词下的热门笔记,核心发现:
┌──────────────────┬──────────────┬────────────┬────────────────────────┐
│ 内容类型 │ 典型爆款点赞 │ 收藏量 │ 特点 │
├──────────────────┼──────────────┼────────────┼────────────────────────┤
│ 体态改善教学 │ 2000-4400+ │ 2000-4700+ │ 赛道最大流量池 │
├──────────────────┼──────────────┼────────────┼────────────────────────┤
│ 工作室品牌介绍 │ 1000+ │ 1000+ │ 精准获客,评论全是咨询 │
├──────────────────┼──────────────┼────────────┼────────────────────────┤
│ 学员前后对比 │ 50-500 │ 12-50 │ 引发讨论+信任背书 │
├──────────────────┼──────────────┼────────────┼────────────────────────┤
│ 私教课堂实录 │ 200-500 │ 400-490 │ 建立专业感 │
├──────────────────┼──────────────┼────────────┼────────────────────────┤
│ 一人一馆日常Vlog │ 60-330 │ 20-140 │ 建立人设+情感连接 │
└──────────────────┴──────────────┴────────────┴────────────────────────┘
---
二、竞品博主分析
🌟 「放羊的杨-」— 一人一馆标杆
- 粉丝1.19万 | 获赞与收藏24.4万
- IP定位游走50+国的旅行者 + 普拉提从业者
- 内容矩阵Vlog日常一天上5节/8节的区别、创业故事第三年回顾、教学分享、旅行穿搭
- 启示:人设先行,有温度的生活感比纯教学更圈粉
🌟 「欢欢」— 教学类爆款制造机
- 爆款:「美背普拉提|纠正头前引+富贵包+驼背」4397赞, 4670收藏
- 爆款「4组肩胛进阶训练」218赞, 197收藏
- 启示:体态问题 + 具体动作 + emoji标记 = 高收藏
🌟 「AND HER PILATES」— 品牌获客范本
- 爆款「关于课程与价格服务与体验一篇讲清楚」1163赞, 1011收藏, 74评论
- 评论区清一色「怎么预约体验课」「想了解价格」→ 精准客资
- 启示:透明+专业+氛围感 = 最强获客帖
---
三、内容矩阵规划每周7天发布计划
根据分析,建议你的内容按 4:2:1 比例分配:
🔴 A类 · 流量款4篇/周)— 拉新曝光
▎ 目标:触达目标人群,获取搜索流量
选题方向:
1. 体态问题解决方案(赛道最大流量池)
- 「3个动作改善骨盆前倾普拉提私教教学」
- 「圆肩驼背?一节课的改善思路」
- 「告别富贵包|颈椎正位训练」
- 「小腿外翻/X型腿这样练真的有变化」
- 「久坐族必练腰痛缓解3个动作」
2. 产后/办公室人群痛点
- 「产后骨盆修复真实学员6节课对比」
- 「上班族肩颈僵硬?普拉提拯救低头族」
- 「妈妈也要好体态!产后腹直肌修复」
🟡 B类 · 信任款2篇/周)— 转化意向
▎ 目标:建立专业信任,激发咨询欲
选题方向:
1. 学员前后对比/故事
- 「10节课的变化学员体态对比记录」
- 「从不敢穿吊带到自信露肩|学员故事」
- 「坚持12节课后她说了这样一句话…」
2. 专业知识科普
- 「普拉提私教和团课到底差在哪?」
- 「第一次上普拉提私教需要准备什么?」
- 「普拉提为什么要坚持至少12节
3. 工作室/服务介绍
- 「关于我的课程与价格一篇讲清楚」参考AND HER爆款
- 「一人一馆体验课实录60分钟都在做什么」
🟢 C类 · 人设款1篇/周)— 建立情感连接
▎ 目标:让粉丝记住你这个人,而不只是"一个普拉提号"
选题方向:
1. 一人一馆日常Vlog
- 「Vlog一人一馆的一天」
- 「一人一馆第X年聊聊心里话」
- 「周末上完最后一节课的碎碎念」
2. 创业故事/成长
- 「为什么选择一人一馆?」
- 「从学员到教练|我的普拉提故事」
- 「一个人开馆最难的不是没客户,是…」
---
四、爆款标题公式
根据高赞笔记总结的5种标题模型
┌────────────────────┬──────────────────────────────────┬────────┐
│ 公式 │ 示例 │ 适用 │
├────────────────────┼──────────────────────────────────┼────────┤
│ 痛点+数量+解决方案 │ 「3个动作改善骨盆前倾」 │ 教学类 │
├────────────────────┼──────────────────────────────────┼────────┤
│ 前后对比+数字 │ 「10节课的变化体态对比」 │ 案例类 │
├────────────────────┼──────────────────────────────────┼────────┤
│ 疑问句引好奇 │ 「这钱花的值吗15节私教效果」 │ 对比类 │
├────────────────────┼──────────────────────────────────┼────────┤
│ 场景+emoji │ 「美背🩵普拉提|纠正圆肩驼背」 │ 教学类 │
├────────────────────┼──────────────────────────────────┼────────┤
│ 反差/情绪 │ 「谁懂啊‼️这才是腹部炸裂的动作」 │ 流量类 │
└────────────────────┴──────────────────────────────────┴────────┘
---
五、推荐话题标签
核心标签(每篇必带):
- #普拉提 #普拉提私教 #一人一馆
流量标签(轮换使用):
- #体态矫正 #圆肩驼背 #骨盆前倾 #富贵包
- #产后修复 #腹直肌分离
- #私教课 #普拉提工作室
地域标签(关键!本地获客):
- #你的城市名 #城市名普拉提 #城市名+区域名
▎ ⚠️ 重要提醒:地域标签是本地生活获客的核心,一定要带!
---
六、具体行动建议
1. 先发 1 篇品牌介绍帖(参考 AND HER 的结构)
- 品牌理念 → 器械/认证 → 课程说明 → 价格透明 → 服务细节 → 预约方式
- 这篇是"店面门面",长期吸引咨询
2. 前两周集中发体态改善教学
- 先积累基础流量和关注
- 圆肩、骨盆前倾、富贵包是最高频搜索词
3. 每上完课就拍学员对比照(征得同意)
- 前后对比是最强信任素材
- 建立长期素材库
4. 视频 > 图文
- 搜索结果中视频笔记占比 60%+,且高赞笔记大多是视频
- 教学动作用视频展示效果远好于图文
5. 评论区互动引导私信
- 在笔记末尾引导「想体验私聊我」
- 评论区有咨询及时回复

View File

@@ -0,0 +1,101 @@
---
type: source
created: 2026-04-19
updated: 2026-04-19
tags: [普拉提, 竞品分析, 爆款数据, 小红书运营, 一人一馆]
sources: []
---
# 小红书「普拉提私教」竞品爆款分析
采集时间2026-04-19
搜索关键词:「普拉提私教」「普拉提体态矫正前后对比」「一人一馆 普拉提」
共采集约 60 条笔记,以下为数据提炼。
---
## 一、赛道数据概览
| 内容类型 | 典型爆款点赞 | 收藏量 | 赞藏比 | 特点 |
|---------|------------|--------|--------|------|
| 体态改善教学 | 2000-4400+ | 2000-4700+ | ~1:1 | 赛道最大流量池,搜索流量为主 |
| 工作室品牌介绍 | 1000+ | 1000+ | ~1:0.87 | 精准获客,评论全是咨询 |
| 学员前后对比 | 50-500 | 12-50 | ~1:0.3 | 引发讨论+信任背书 |
| 私教课堂实录 | 200-500 | 400-490 | ~1:1 | 建立专业感,高收藏 |
| 一人一馆日常Vlog | 60-330 | 20-140 | ~1:0.4 | 人设+情感连接,评论互动强 |
## 二、高赞笔记清单
### 体态教学类(流量天花板)
| 标题 | 博主 | 赞 | 藏 | 评 | 类型 |
|------|------|---|---|---|------|
| 美背普拉提|纠正头前引+富贵包+驼背 | 欢欢 | 4397 | 4670 | 59 | 视频 |
| Reformer 5个动作改善圆肩驼背 | pilateswithannabel | 2487 | 2945 | 14 | 视频 |
| 困扰多年的骨盆前倾终于改善了(口令版) | 只只知知Myra | 2116 | 2225 | 14 | 视频 |
| 普拉提私教 0基础X型腿足外翻调整思路 | may练普拉提 | 2023 | 2146 | 35 | 视频 |
| 开始普拉提的正确姿势和方法|颈椎正位 | Liviana | 1254 | 1495 | 4 | 视频 |
### 品牌/获客类(精准转化)
| 标题 | 博主 | 赞 | 藏 | 评 | 类型 |
|------|------|---|---|---|------|
| 关于课程与价格,服务与体验,一篇讲清楚! | AND HER PILATES | 1163 | 1011 | 74 | 图文 |
| 做一家专业的普拉提工作室!在重庆光环 | 欢欢 | 430 | 353 | 36 | 图文 |
| 普拉提场馆IP打造 拓客转化太香了 | 能量学姐 | 203 | 158 | 0 | 图文 |
| 一人一馆适合i人的普拉提馆 | RUI PILATES | 242 | 186 | 59 | 图文 |
### 一人一馆日常类(人设建设)
| 标题 | 博主 | 赞 | 藏 | 评 | 类型 |
|------|------|---|---|---|------|
| 没有30+创业 也没有月入10万 | 放羊的杨- | 331 | 141 | 59 | 视频 |
| 小馆的高客单本质:永远去解决更复杂的问题 | SUMMER头子 | 191 | 132 | 5 | 视频 |
| 聊聊我一人一馆的第三年 | 放羊的杨- | 119 | 29 | 17 | 视频 |
| 一人一馆终究还是迎来了闭店潮! | 教普拉提的小A | 94 | 45 | 26 | 视频 |
| 一人一馆的弊端|每种选择都要有所取舍 | 陈玲敏Alita | 222 | 139 | 26 | 图文 |
### 课堂实录/教学分享类
| 标题 | 博主 | 赞 | 藏 | 评 | 类型 |
|------|------|---|---|---|------|
| 记录一节完整的普拉提私教课程 | 云云 | 496 | 491 | 5 | 视频 |
| 普拉提教练vlog给脊柱一个机会让它呼吸 | 黑小米 | 397 | 486 | 8 | 视频 |
| 普拉提私教体验课实录|原来体验课是这样的 | ZONE PILATES | 244 | 173 | 7 | 视频 |
| 国际认证教练教你三个动作改善骨盆前倾 | Yori应 | 265 | 282 | 2 | 视频 |
| 普拉提教学 手把手教你简单有效的辅助方法 | 杜鹏 Allen | 143 | 147 | 13 | 视频 |
## 三、爆款标题公式总结
| 公式 | 示例 | 适用场景 |
|------|------|---------|
| 痛点+数量+解决方案 | 「3个动作改善骨盆前倾」 | 教学类 |
| 前后对比+数字 | 「10节课的变化体态对比」 | 案例类 |
| 疑问句引好奇 | 「这钱花的值吗15节私教效果」 | 对比类 |
| 场景+emoji | 「美背🩵普拉提|纠正圆肩驼背」 | 教学类 |
| 反差/情绪 | 「谁懂啊‼️这才是腹部炸裂的动作」 | 流量类 |
| 一句话讲清楚 | 「关于课程与价格,一篇讲清楚!」 | 品牌介绍类 |
## 四、内容形式偏好
- 视频笔记占比约 **60%+**,且高赞笔记大多是视频
- 体态教学类几乎全部是视频(动作展示需要动态)
- 品牌介绍类以图文为主(信息密度高,适合反复查看)
- 一人一馆日常以 Vlog 为主(人设感强)
## 五、话题标签频率
高频标签:`#普拉提` `#普拉提私教` `#体态矫正` `#圆肩驼背` `#骨盆前倾`
中频标签:`#普拉提工作室` `#富贵包` `#产后修复` `#一人一馆`
地域标签:几乎所有获客型笔记都带城市+区域标签
## 六、评论区信号(品牌介绍帖)
AND HER PILATES 的「关于课程与价格」帖评论区典型内容:
- 「请问怎么预约体验课?」
- 「后台咨询了体验课,麻烦回复一下」
- 「想了解,感觉环境很喜欢」
- 「环境很美,价格应该也不便宜吧」
- 「写的又详细又中肯」
**品牌介绍帖是最直接的获客工具**,评论区就是客资池。

View File

@@ -0,0 +1,95 @@
---
type: topic
created: 2026-04-19
updated: 2026-04-19
tags: [普拉提, 内容策划, 小红书运营, 获客, 一人一馆]
sources: [wiki/sources/xhs-普拉提私教-竞品爆款分析, wiki/sources/xhs-普拉提引流-top5爆款]
---
# 普拉提一人一馆 · 小红书内容矩阵策划
基于 2026-04-19 竞品爆款分析,为 Focus Core 制定的内容发布策略。
---
## 一、内容矩阵 4:2:1 模型
每周 7 篇,按流量款:信任款:人设款 = 4:2:1 分配。
### A类 · 流量款4篇/周)— 拉新曝光
| 选题方向 | 示例标题 | 参考爆款 |
|---------|---------|---------|
| 体态问题解决方案 | 3个动作改善骨盆前倾普拉提私教教学 | 欢欢 4397赞 |
| 圆肩驼背改善 | 告别圆肩驼背Reformer 美背训练 | pilateswithannabel 2487赞 |
| 产后/办公室痛点 | 久坐族肩颈僵硬?普拉提拯救低头族 | Liviana 1254赞 |
| 局部问题针对 | X型腿/足外翻?这样练真的有变化 | may练普拉提 2023赞 |
**关键要素**
- 视频为主(动作展示需要动态)
- 标题带数字+具体问题
- 高搜索词:骨盆前倾、圆肩驼背、富贵包、产后修复
### B类 · 信任款2篇/周)— 转化意向
| 选题方向 | 示例标题 | 参考 |
|---------|---------|------|
| 学员前后对比 | 10节课的变化学员体态对比记录 | 前后对比类笔记 |
| 品牌/服务介绍 | 关于我的课程与价格,一篇讲清楚 | AND HER 1163赞 |
| 知识科普 | 普拉提私教和团课到底差在哪? | — |
| 体验课实录 | 一人一馆体验课实录60分钟都在做什么 | ZONE PILATES 244赞 |
**关键要素**
- 图文为主(信息密度高)
- 学员案例需征得同意
- 品牌介绍帖是长期获客工具
### C类 · 人设款1篇/周)— 情感连接
| 选题方向 | 示例标题 | 参考 |
|---------|---------|------|
| 日常Vlog | 一人一馆的一天 | 放羊的杨- 系列 |
| 创业故事 | 为什么选择一人一馆? | 放羊的杨- 331赞 |
| 心里话 | 一个人开馆最难的不是没客户,是… | 一人一馆弊端帖 222赞 |
**关键要素**
- 视频 Vlog 为主
- 展示真实生活状态
- 建立「专业之外」的人设维度
---
## 二、话题标签策略
### 每篇必带(核心标签)
`#普拉提` `#普拉提私教` `#一人一馆`
### 轮换使用(流量标签)
- 体态类:`#体态矫正` `#圆肩驼背` `#骨盆前倾` `#富贵包`
- 人群类:`#产后修复` `#腹直肌分离` `#上班族`
- 业态类:`#私教课` `#普拉提工作室`
### 必带(地域标签 — 本地获客核心)
`#深圳普拉提` `#宝安普拉提` `#坪洲普拉提` `#深圳` `#宝安`
---
## 三、发布节奏建议
| 日 | 一 | 二 | 三 | 四 | 五 | 六 |
|---|---|---|---|---|---|---|
| C人设 | A流量 | B信任 | A流量 | A流量 | B信任 | A流量 |
- 工作日发布教学类(上班族刷小红书高峰)
- 周末发人设类用户有时间看Vlog
- 品牌介绍帖择时发布后置顶
---
## 相关页面
- [[wiki/sources/xhs-普拉提私教-竞品爆款分析]] — 竞品数据来源
- [[wiki/entities/focus-core]] — 场馆信息
- [[wiki/entities/and-her-pilates]] — 品牌介绍帖标杆
- [[wiki/entities/放羊的杨]] — 一人一馆日常标杆
- [[wiki/ideas/品牌介绍帖-focus-core]] — 首篇品牌介绍帖策划