space-xhs-hotspot について
space-xhs-hotspotは、小紅書のクリエイター向けに投稿テーマを調査するスキルです。ニッチ分野の動向や投稿形式、人気投稿の特徴を分析し、タイトル作成や執筆工程に渡せるテーマカードを作ります。データの注意点と代替取得方法も明示します。
主な機能
- 01複数データソースの検索と切り替え
- 02ニッチ語の展開と結果比較
- 03投稿形式とタイトルフックの分析
- 04アカウント規模と反応構造の評価
- 05再利用可能・不可能なパターンの抽出
- 06引き継ぎ用テーマカードの作成
活用シーン
- 01ニッチ分野ごとの動向や投稿形式の比較
- 02小紅書の新規アカウントの参入機会の評価
- 03人気投稿からタイトルの切り口やテーマを抽出
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ spacezephyr/ creator-buddy --skill space-xhs-hotspotインストール後、Claude Code で/space-xhs-hotspotを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
references/data_sources.mdpattern_extraction.mdxhs_hot_article_format.mdxhs_sectors.jsonscripts/compare_sets.pyfetch_xhs_hot_articles.py詳細
小红书热点搜集(space-xhs-hotspot)
给创作者用的选题雷达。目标不是把数据倒出来,而是回答三个问题:这个赛道现在有没有流量?流量集中在哪几种内容形态上?我下一篇该写什么。
产出链路:本 skill 出选题 → space-xhs-title 起标题 → space-xhs-writer 写正文。所以最后一段必须是可以直接粘给下游的选题卡,不是一句"建议多观察"。
数据说明(展示任何数据之前必须先说明,逐字保留口径)
- 收录门槛:红狐库只收录互动数 1000+ 的笔记。搜不到 ≠ 这个方向没人写,只等于这个方向没出过 1000+ 互动的爆款——这本身就是一条判断(小众/低天花板 or 蓝海)。
- 更新节奏:每日早上 7 点更新昨日数据。当天数据永远查不到,用户说"今天"时按"昨天"处理并说明。
- 数据快照:互动数是入库时刻的快照,不是实时值。入库后还会继续涨——所以"3 天前的 8000 互动"实际热度可能高于"昨天的 1.2w"。
- 时间窗:库内只有昨天到 30 天前的数据。超过 30 天的请求要明确告知并降级到最近可用范围。
- 链接口径:
note_url/noteLink必须原样输出,包含xsec_token查询参数。禁止截断、脱敏、重建,禁止只拿note_id自己拼 URL——拼出来的链接打不开。note_id是 24 位小写十六进制,必须完整复制。
第 0 步:数据源探测与降级(每次执行前先做,不要假设 Key 存在)
env | grep -E '^(REDFOX_API_KEY|SOCIALDATAX_API_KEY|GUAIKEI_API_TOKEN)=' | sed 's/=.*/=<set>/'
按下表从上往下取第一条可用路线;某条路线报错(401/余额不足/网络失败)时继续往下降级,并在输出里注明"本次数据来自 X 路线"。
| 优先级 | 环境变量 | 路线 | 强项 | 短板 |
|---|---|---|---|---|
| 1 | REDFOX_API_KEY | 红狐 API(本 skill 自带脚本) | 唯一有热度/相关性/时效三维评分和 relatedSearches 拓词;天然只含 1000+ 爆款,信噪比最高 | 只有近 30 天;T+1 更新;无评论 |
| 2 | SOCIALDATAX_API_KEY | socialdatax CLI(npx,见 xhs-content-research) | 近实时;有 --since-days、多种排序、图文/视频筛选 | 无评分,需自己按互动排序;按量计费 |
| 3 | GUAIKEI_API_TOKEN | 怪壳 Node CLI(见 xiaohongshu-content-tools) | 能拿笔记详情 + 评论区 + 博主全部作品,做深挖唯一选择 | 需 node,脚本在另一 skill 目录下 |
| 兜底 | 无 | WebSearch 手动 | 零配置 | 无互动数,只能看到标题和大致方向 |
具体命令、参数、报错处理见 references/data_sources.md(执行前读它)。
三个 Key 都没有时,不要静默失败,按此模板回复:
未检测到小红书数据源,本次用公开搜索兜底(拿不到互动数,只能看内容方向)。
想要带互动数据的完整热点分析,配置任一即可(推荐第 1 个):
export REDFOX_API_KEY=... # https://redfox.hk/settings/api-keys 近30天爆款库,带热度评分
export SOCIALDATAX_API_KEY=... # https://socialdatax.com/ai 近实时搜索
export GUAIKEI_API_TOKEN=... # https://www.guaikei.com 详情+评论深挖
写进 ~/.zshrc 后重开终端即可。
然后继续用 WebSearch 兜底跑完流程(site:xiaohongshu.com <关键词> + 小红书热点类聚合站),只是把"互动数"列换成"来源"列,并在结论里标注"未经互动数据验证"。不要因为没 Key 就停在提示上。
第 1 步:把用户的话变成能查的词
核心判断:泛化词 vs 细分词。 拿泛化词去查,返回的是一堆彼此无关的爆款,看不出任何趋势;拿过细的词去查,返回 0 条。
| 类型 | 特征 | 例 | 动作 |
|---|---|---|---|
| 泛化词 | 上位概念、行业分类,无场景/人群/风格修饰 | 美妆、穿搭、职场、AI、母婴 | 先拓 6~10 个细分词,同时开跑,用结果对比出热度分布 |
| 细分词 | 有一层修饰(场景/人群/风格/意图) | 通勤穿搭、减脂早餐、小个子显高、AI 做 PPT | 直接查,这是甜点区 |
| 过细词 | 两层以上修饰或长尾组合 | 微胖小个子秋冬通勤穿搭 | 砍到一层修饰再查,同时保留原词做人工筛 |
与原版的差别:识别到泛化词时不要停下来等用户回复"拓展/不拓展"。直接说明"「穿搭」太宽,我按 8 个细分方向并行查了",然后一次跑完(红狐支持逗号分隔多词)。用户想改方向,看到结果再改效率更高。只有当拓展词方向存在多种明显不同的商业意图(如"保险"→ 买保险 / 卖保险 / 保险从业)时,才值得先问一句。
拓展词生成原则:
- 大小适中——"中产穿搭"这种自造词查不到数据,"老钱风""通勤""松弛感"这种平台上真实存在的说法才查得到。
- 覆盖四个维度,各 2~3 个:趋势词(老钱风、多巴胺、松弛感)、人群词(学生党、小个子、宝妈、打工人)、场景词(通勤、约会、露营、租房)、意图词(平替、避雷、测评、清单)。
- 优先用用户自述里出现过的词。用户说"我平时写小众电影、书评、港台文化",就该查「小众电影/港台电影/书单推荐」,而不是查「电影」。
赛道词库:references/xhs_sectors.json
不要凭空想拓展词——先查词库。它按小红书官方 24 个一级赛道组织,每个赛道给 trend / audience / scene / intent 四个维度的可查询细分词,正好对应上面四个维度。
什么时候读它(三种场景,其余场景别浪费上下文):
| 场景 | 用法 |
|---|---|
| 用户给的是泛化词("穿搭""职场""AI") | 找到对应一级赛道,四个维度各取 2~3 个凑 6~10 个词并行查,这就是赛道下切 |
| 用户给的是细分词("通勤穿搭") | 直接查该词,同时从同赛道同维度取 2~3 个邻近词做横向对比(见第 4 步),用来回答"这个词在赛道里算热还是算冷" |
| 用户说不清方向、只说"我该写什么" | 先问定位,再从其人设匹配的 1~2 个赛道取词 |
词库是起点不是终点:跑完第一轮后,必须拿接口返回的 relatedSearches(红狐)或本轮高频标题词(其他路线)二次拓词——那才是平台当下的真实说法。词库里的趋势词会过期,查出来 0 条就说明它已经凉了,这本身是条结论,别硬凑。
赛道找不到对应项(如"跨境电商""考编")时,就近映射到最相关的一级赛道(互联网 / 教育),并说明是近似映射,不要为了对齐词库改写用户的方向。
第 2 步:查询与时间窗策略
默认窗口 7 天(startDate = 今天 - 7)。换算:今天→昨天,最近/近一周→7 天,近 N 天→今天-N,最多 30 天。
数据不足时只扩时间,不换词(换词会把两个不同赛道的数据混在一起,趋势判断就废了):
1 天 → 3 天 → 7 天 → 30 天
每次扩窗都要告知:"「XX」近 7 天只有 3 条 1000+ 笔记,已扩到近 30 天。"扩到 30 天仍 < 5 条,就停手,直接给结论:这是一个低产出赛道——要么受众太窄,要么平台不给这个方向流量,要么就是没人写的蓝海。这三种可能要在结论里替用户区分(看 relatedSearches 有没有词、看邻近词的数据量)。
第 3 步:读数据,做趋势判断(本 skill 的核心,不要跳过)
拿到笔记列表后,逐条不是重点,模式才是。按下面六个切口过一遍,前五个是赛道现状,第六个是爆款共性:
1. 形态分布
把 top 20 按内容形态归类,数出占比:清单/盘点|教程步骤|测评对比|个人经历叙事|避雷吐槽|数据结论|资源合集。占比最高的形态 = 平台当前在这个赛道给流量的形态,也是最安全的模仿对象。占比为 0 但用户擅长的形态 = 差异化机会(要标风险)。
2. 标题钩子分布
统计 top 20 标题里出现的钩子:数字("5 个""3 天")、人群标签("打工人""学生党")、痛点原话(带引号的吐槽)、反差("没想到""原来")、身份背书("三甲医生""HR")、时效("2026""最新")。哪种钩子重复出现最多,就是这个赛道读者当下吃的那一套——直接传给 space-xhs-title。
3. 账号量级
看 authorFans。如果 top 榜里有明显的小号(<1 万粉)跑出 1w+ 互动,说明这个赛道流量吃内容不吃账号,新号可进;如果全是 50 万+ 大号霸榜,说明是存量竞争,新号进去大概率沉。这条对用户的决策价值最高,务必写出来。
4. 时间分布
爆款集中在最近 3 天 = 上升期热点,抓紧写;均匀分散在 30 天 = 常青需求,什么时候写都行;集中在 3 周前后没有新的 = 热点已过,别追。
5. インタラクション構造
likedCount / collectedCount / commentsCount を比較します:
- 收藏 > いいね → ツール型/資料型コンテンツです。読者は後で使うために保存します。リスト、テンプレート、まとめに向いています。
- コメント > 保存、かつコメントの割合が高い → 話題型/論争型です。読者は意見を表明したがっています。意見、質問、比較に向いています。
- いいねが圧倒的に多い → 感情型/審美型です。読者は通りすがりに共感しているだけです。コンバージョンは弱く、フォロワーの増加も一般的です。
アカウント規模に関するこの項目で
authorFansが取得できるのは紅狐ルートのみです。怪壳ルートでは実測でフォロワー数を取得できません。その場合は「フォロワー数のフィールドが欠落しているため、このルートではアカウント規模を判断できません」と記載し、推定しないでください。残りの4つの切り口は通常どおり提示してください。
6. バズ投稿の共通点抽出(サンプルが8件以上の場合は必須)
上記の5つの切り口は「この分野が今どのような状況か」に答え、共通点の抽出は**「このバズ投稿群はなぜバズったのか、どれなら真似できて、どれは真似できないのか」**に答えます。後者こそ、ユーザーが本当に知りたいことです。
実行前に references/pattern_extraction.md を読み、以下の3つを行います:
- 各投稿に2つのタグを付けます:形式タグ(リスト/チュートリアル/レビュー/体験談/注意喚起/データ/リソース/肩書きによる信頼性)+バズの仕組みタグ(新鮮さ/成果感/場面感/属性感/感情感/ギャップ感/保存動機/論争性)。各ノートにつき、最も強い仕組みを1〜2個選びます。
- 分布を数値化します:形式 X/20、仕組み X/20、タイトルの頻出語トップ10〜14。40%以上なら共通点、20%〜40%なら次点の主流、20%未満かつ裏付けが1〜2件のみなら個別事例と呼びます。トレンドとして見せてはいけません。
- 3つのリストに分けます:再利用可能/再利用不可能(肩書きの壁、リソースの壁、アカウントの壁)/空白領域。再利用不可能な項目のリストを省略してはいけません。「真似できるもの」だけを示すのは、ユーザーを落とし穴に誘導するのと同じです。
サンプルが8件未満の場合は割合を出さず、定性的な説明のみとし、「サンプルN件のため、結論は参考情報です」と明記します。
ステップ4:比較(ユーザーが「変わったか」「どちらのほうが書く価値があるか」と尋ねた場合に実施し、それ以外はスキップ)
1回のスナップショットでわかるのは「今どうなっているか」だけで、「良くなっているか悪くなっているか」「AとBのどちらが参入できるか」はわかりません。この2種類の質問には、2回以上のクエリ結果の比較が必要です。
実施条件:ユーザーが「最近もまだ人気ですか」「先月と比べてどうですか」「どの分野のほうが書く価値がありますか」「AとBのどちらを選ぶべきですか」と尋ねた場合、またはステップ1で分野を細分化して複数のデータを取得した場合。
方法:各クエリの結果をそれぞれJSONファイルに保存し、scripts/compare_sets.py で正規化して整合させます(オフラインスクリプトのため、ネット接続もKeyも不要です)。
S=~/.claude/skills/space-xhs-hotspot/scripts
# 多赛道横向:同一时间窗,谁的量级更高、形态和钩子有什么差别
python3 $S/compare_sets.py 通勤穿搭=a.json 老钱风=b.json 学生党穿搭=c.json --top 20
# 单赛道纵向:同一个词,本周 vs 上月
python3 $S/compare_sets.py 本周=this.json 上月=last.json --label-kind time
# 要结构化数据自己再加工时
python3 $S/compare_sets.py a.json b.json --json
- 入力は保存済みのJSONです。2種類の形式を自動判別します:紅狐スクリプトの出力(
items[])、怪壳のsearch-cli.jsの結果ファイル(results[])。怪壳の stdoutにはログ行が混在するため、そのまま解析できません。自動保存されたxiaohongshu-content-tools/logs/*_search.jsonを使用してください。 - タグはクエリ語です。スクリプトは頻出語からクエリ語そのものを除外します(除外しないと、トップの語が常にクエリ語そのものになります)。
- 出力:比較総表(サンプル数/インタラクション中央値/最大インタラクション/保存・いいね比/コメント・いいね比/小規模アカウントの割合/主な形式/主なフック)+各グループの形式、フック、タイトルの頻出語、最大インタラクションのノート+語句レベルの共通語と独自語。
- サンプルが8件未満のグループには、スクリプトが自動で⚠️を付けます。結果を伝える際は、この警告も含めてください。
比較結果の読み方:
| 観察内容 | 結論 |
|---|---|
| 同じ語句を異なる時期で比較:インタラクション中央値が明らかに低下し、頻出語も入れ替わっている | トレンドが下火になっています。古い切り口を追わず、新しい頻出語に合わせてください |
| 同じ語句を異なる時期で比較:中央値が安定し、頻出語もほとんど変わっていない | 長く続く需要です。いつ書いてもよく、勝負を分けるのは実行力です |
| 分野間の比較:Aの中央値は高いが、主な形式が「肩書きによる信頼性」 | 天井は高いものの、あなたには参入できません。結論ではっきり伝えてください |
| 分野間の比較:Bの中央値は中程度だが、小規模アカウントの割合が高く、主な形式がリスト | こちらこそ、新規アカウントの参入経路です |
| 語句レベルの「共通頻出語」 | 分野をまたいで使える汎用フックで、最も再利用しやすいものです |
| 語句レベルの「独自語」 | その分野固有の検索入口です。space-xhs-title に渡してください |
厳守事項:異なるデータソースの数値をそのまま大小比較してはいけません(紅狐は1000件以上を収録するデータベースの登録時スナップショット、怪壳はリアルタイムに取得する検索結果全件です)。ルートをまたいで比較する場合は構造的な指標(形式の割合、保存・いいね比、頻出語)のみを比較し、「2つのデータは異なるルートから取得しているため、絶対量は比較できません」と明記してください。
出力形式
① データの説明(1行)
データソース:紅狐 API|収録条件:インタラクション1000+|毎日7時に前日分を更新|インタラクション数は登録時のスナップショット 📅 検索範囲:X月X日 - X月X日|キーワード:A、B、C
② 話題のノート一覧表
キーワードあり(紅狐ルート、スコア付き):
| # | ノートのタイトル | 作者(フォロワー数) | インタラクション | いいね/保存/コメント | 公開日 | 関連性 | 話題性 | 鮮度 | 合計スコア |
|---|
キーワードなしの全体人気順/紅狐以外のルート(スコア欄なし、インタラクションの降順):
| # | ノートのタイトル | 作者(フォロワー数) | インタラクション | いいね/保存/コメント | 公開日 |
|---|
- タイトルと作者はどちらもMarkdownリンクにします。ノートのリンクは返された値をそのまま使用し(
xsec_tokenを含む)、作者のリンクはhttps://www.xiaohongshu.com/user/profile/{authorId}にします。 - デフォルトでは上位10件を表示します。10件を超える場合は、表の下に「合計X件、上位10件を表示しています。すべて表示する場合はお知らせください」と記載します。説明のみで、返答を待って止まらないでください。そのまま続けてトレンドを判断してください。
- 複数キーワードを並行して検索する場合は、キーワードごとに小見出しでグループ分けし、各グループの上位5件を表示します。
③ 分野の診断(ステップ3の最初の5つの切り口に対応)
形态分布:清单 45% | 测评 25% | 经历叙事 20% | 其他 10%
钩子分布:数字 12/20,人群标签 9/20,痛点原话 5/20
账号量级:top10 里 4 个 <1 万粉 → 内容驱动,新号可进
时间分布:8/10 集中在近 5 天 → 上升期
互动结构:收藏平均高于点赞 1.3 倍 → 工具型需求为主
各項目の後に一言の解釈を添え、数字だけを並べないでください。
④ バズ投稿の共通点(サンプルが8件以上の場合は必須。形式は references/pattern_extraction.md を参照)
共性:收藏动机 12/20(60%,主流)|身份感 9/20(45%,主流)|反差感 3/20(个例)
可复用:清单式收纳合集 —— 对标《XXX》1.2w(链接)—— 换到你的赛道就是「租房党的 X 件……」
不可复用:top3 有 2 条是三甲医生出镜科普(身份壁垒),你没这个身份照抄说服力归零
空位:教程形态占比 0,但该赛道读者藏赞比 1.3 明显偏工具型 —— 可能是机会,也可能是平台不给这个形态流量,先小成本试
选题公式:收藏动机 + 清单 + 打工人 →「打工人通勤的 5 件平价单品,闭眼买」
⑤ 比較の結論(ステップ4を実施した場合のみ提示)
compare_sets.py の比較総表を貼り、その後に2〜3文で解釈を添えます:規模は伸びているか、落ちているか、新規アカウントはどの分野に参入できるか、頻出語が入れ替わったか。異なるルートのデータには「絶対量は比較できません」と明記してください。
⑥ 関連語と隣接領域の機会
relatedSearches をそのまま列挙し、次の検索で調べる価値のある語(ユーザーの人物像に合うもの)と、無関係なノイズを示します。紅狐以外のルートでは、今回のタイトル頻出語を代わりに使用し、情報源が異なることを明記してください。
⑦ 企画の提案(3〜5件、納品の重点)
各案は次のカード形式にし、ユーザーがそのまま space-xhs-title / space-xhs-writer に貼り付けられるようにします:
【选题 N】一句话选题
形态:清单 / 教程 / 测评 / 叙事 / 避雷
依据:对标笔记《XXX》互动 1.2w(链接),同类形态本轮出现 5 次
钩子方向:数字 + 人群标签(如"打工人的 5 个 XX")
预期互动结构:偏收藏 → 内容要有可保存的清单/模板
风险:赛道已被 50w 粉大号占据 / 属于时效热点,7 天后失效
根拠は具体的なノートに結び付ける必要があります。「この方向が人気だから」と書いてはいけません。参考となるノートに裏付けられていない企画は提案しないでください。企画は④の企画公式から導き、公式と企画が対応している必要があります。
厳守事項
- データを捏造しない。インタラクション数、フォロワー数、公開日時は必ずAPIの返却値を使ってください。WebSearchで補う場合は「インタラクションデータなし」と明記し、推定しないでください。
- リンクを書き換えない。
xsec_tokenが失われたリンクは404を返すのと同じで、何も提示しないより悪い結果になります。 - 「検索で見つからない」を「誰も書いていない」と言い換えない。収録条件はインタラクション1000+であり、両者は同じではありません。必ず区別して表現してください。
- 相関を因果関係として扱わない。「top10のうち6件のタイトルに数字が含まれている」は観察ですが、「数字入りタイトルにすればバズる」は誤った推論です。「この分野の読者は数字のフックへの反応が良い」と表現してください。
- 結果を保証しない。提示するのは成功確率が高い方向性であり、「このとおりに書けば必ずバズる」という約束ではありません。
- 真似できるものだけを提示しない。共通点の抽出では、肩書きの壁、リソースの壁、アカウントの壁のどれに該当するかを明示した「再利用不可能」リストも必ず提示してください。
- ソースをまたいで絶対値を比較しない。データソースによってインタラクション数の基準が異なります。比較では構造的な指標のみを使い、その旨を明記してください。
- 対象期間を満たしているように装わない。ユーザーが60日を指定した場合は、「データベース内には30日分しかないため、30日分を返しました」と伝えてください。黙って30日に変更し、要望を満たしたように扱ってはいけません。
- 権限を超えて深掘りしない。コメント欄やブロガーの全投稿が必要な場合は、怪壳ルートを使用し、
GUAIKEI_API_TOKENが必要であることを説明してください。検索結果からコメント欄の内容を推測してはいけません。
セルフチェック(出力前に確認)
- 冒頭にデータソース、収録基準、対象期間を記載したか?
- すべてのノートリンクで
xsec_tokenをそのまま保持しているか? - 一般的な語句について、
xhs_sectors.jsonを確認して分野を細分化し、並行検索したか?大きな語句をそのまま検索していないか? - データ不足時に期間を広げ、その旨を伝えたか?語句をこっそり変えていないか?
- 5つの切り口すべてで分野を診断し、各項目に数字だけでなく解釈を添えたか?フォロワー数のフィールドが欠落している場合、推定せず正直に説明したか?
- サンプルが8件以上の場合、共通点を抽出し、3つのリスト(再利用可能/再利用不可能/空白領域)をすべて提示したか?割合は40%/20%の基準に従って段階的に表現したか?
- 複数のグループを検索した場合、目視で見当をつけず
compare_sets.pyを実行したか?異なるルートの比較では「絶対量は比較できません」と明記したか? - 企画の提案を3件以上提示し、各案に具体的な参考ノートとリンクを付けたか?
- APIから返されていない数字を記載していないか?
ディレクトリ構成
space-xhs-hotspot/
├── SKILL.md
├── scripts/
│ ├── fetch_xhs_hot_articles.py # 红狐 API 查询脚本(需 REDFOX_API_KEY)
│ │ # 来源:creator-buddy/skills/xhs-hotnotes,原样复用未改动
│ └── compare_sets.py # 第 4 步用:多组结果 JSON 归一对比(离线,不需要 Key)
│ # 吃红狐 items[] 和怪壳 results[] 两种格式,自动识别
└── references/
├── data_sources.md # 三条路线的命令、参数、报错处理、字段映射、怪壳实测须知
├── xhs_hot_article_format.md # 红狐接口字段说明(同样来自 xhs-hotnotes)
├── xhs_sectors.json # 第 1 步用:24 个一级赛道 × 四维度细分词库
└── pattern_extraction.md # 第 3 步用:爆款共性提取方法(标签表、阈值、三张清单、选题公式)
必要に応じて読む:data_sources.md は実行前に毎回必ず読みます。xhs_sectors.json は分野を細分化する必要がある場合のみ読みます。pattern_extraction.md はサンプルが8件以上あり、共通点を抽出する場合のみ読みます。xhs_hot_article_format.md は紅狐ルートを使用する場合のみ読みます。