Ver Fonte

modified: README.md
modified: majiyong/majiyong-closing-report.html
modified: majiyong/majiyong-closing-report.md
renamed: "\343\200\220\346\226\260\351\262\234\350\217\234\351\241\271\347\233\256\343\200\221\351\251\254\350\256\260\346\260\2704\346\234\210\345\256\243\345\217\221\346\225\260\346\215\256\346\261\207\346\200\273(1).xlsx" -> "majiyong/\343\200\220\346\226\260\351\262\234\350\217\234\351\241\271\347\233\256\343\200\221\351\251\254\350\256\260\346\260\2704\346\234\210\345\256\243\345\217\221\346\225\260\346\215\256\346\261\207\346\200\273(1).xlsx"
new file: shuhua/README.md
renamed: data/audit.log -> shuhua/data/audit.log
renamed: data/collect-run.log -> shuhua/data/collect-run.log
renamed: data/comments/1-69f046e0000000003601dac4.json -> shuhua/data/comments/1-69f046e0000000003601dac4.json
renamed: data/comments/10-69f2cc74000000002202a87e.json -> shuhua/data/comments/10-69f2cc74000000002202a87e.json
renamed: data/comments/11-69f2ccc0000000002300649e.json -> shuhua/data/comments/11-69f2ccc0000000002300649e.json
renamed: data/comments/12-69ec2c80000000003502ce48.json -> shuhua/data/comments/12-69ec2c80000000003502ce48.json
renamed: data/comments/13-69ea233a0000000012012805.json -> shuhua/data/comments/13-69ea233a0000000012012805.json
renamed: data/comments/14-69ea23ac000000002003b79f.json -> shuhua/data/comments/14-69ea23ac000000002003b79f.json
renamed: data/comments/15-69ea241900000000230148ed.json -> shuhua/data/comments/15-69ea241900000000230148ed.json
renamed: data/comments/16-69ea2473000000001901e001.json -> shuhua/data/comments/16-69ea2473000000001901e001.json
renamed: data/comments/17-69ea24dd0000000020003804.json -> shuhua/data/comments/17-69ea24dd0000000020003804.json
renamed: data/comments/18-69ea25600000000022029163.json -> shuhua/data/comments/18-69ea25600000000022029163.json
renamed: data/comments/19-69ead97c00000000220255dc.json -> shuhua/data/comments/19-69ead97c00000000220255dc.json
renamed: data/comments/2-69f0308b000000001f001fd1.json -> shuhua/data/comments/2-69f0308b000000001f001fd1.json
renamed: data/comments/20-69ead9ec000000001f030c00.json -> shuhua/data/comments/20-69ead9ec000000001f030c00.json
renamed: data/comments/21-69ec2cfc000000003502d12f.json -> shuhua/data/comments/21-69ec2cfc000000003502d12f.json
renamed: data/comments/22-69ec2d940000000035031aed.json -> shuhua/data/comments/22-69ec2d940000000035031aed.json
renamed: data/comments/23-69eadb84000000001a035923.json -> shuhua/data/comments/23-69eadb84000000001a035923.json
renamed: data/comments/24-69f0471b000000002003b189.json -> shuhua/data/comments/24-69f0471b000000002003b189.json
renamed: data/comments/25-69eadbb60000000019032405.json -> shuhua/data/comments/25-69eadbb60000000019032405.json
renamed: data/comments/26-69ead98a000000001901e003.json -> shuhua/data/comments/26-69ead98a000000001901e003.json
renamed: data/comments/27-69ec2c690000000035031454.json -> shuhua/data/comments/27-69ec2c690000000035031454.json
renamed: data/comments/28-69ec2cc1000000002301f757.json -> shuhua/data/comments/28-69ec2cc1000000002301f757.json
renamed: data/comments/29-69ec2d2b000000003502066a.json -> shuhua/data/comments/29-69ec2d2b000000003502066a.json
renamed: data/comments/3-69f0471b000000002003b189.json -> shuhua/data/comments/3-69f0471b000000002003b189.json
renamed: data/comments/30-69ec2e1800000000200394a8.json -> shuhua/data/comments/30-69ec2e1800000000200394a8.json
renamed: data/comments/31-69ec3095000000003700dd62.json -> shuhua/data/comments/31-69ec3095000000003700dd62.json
renamed: data/comments/32-69ec2f13000000003703667d.json -> shuhua/data/comments/32-69ec2f13000000003703667d.json
renamed: data/comments/33-69ec545e000000003502f098.json -> shuhua/data/comments/33-69ec545e000000003502f098.json
renamed: data/comments/34-69ec2fa10000000023005886.json -> shuhua/data/comments/34-69ec2fa10000000023005886.json
renamed: data/comments/35-69ec5dff0000000023015799.json -> shuhua/data/comments/35-69ec5dff0000000023015799.json
renamed: data/comments/36-69f1c062000000001e00eba8.json -> shuhua/data/comments/36-69f1c062000000001e00eba8.json
renamed: data/comments/37-6a02c7230000000007025126.json -> shuhua/data/comments/37-6a02c7230000000007025126.json
renamed: data/comments/38-69f032850000000035026ba8.json -> shuhua/data/comments/38-69f032850000000035026ba8.json
renamed: data/comments/39-69f1bc95000000003502f79a.json -> shuhua/data/comments/39-69f1bc95000000003502f79a.json
renamed: data/comments/4-69f048ee000000001a02ca1f.json -> shuhua/data/comments/4-69f048ee000000001a02ca1f.json
renamed: data/comments/40-69f1bbf4000000003700d072.json -> shuhua/data/comments/40-69f1bbf4000000003700d072.json
renamed: data/comments/41-69f2f0e1000000001f00248d.json -> shuhua/data/comments/41-69f2f0e1000000001f00248d.json
renamed: data/comments/42-69f2f1a3000000002202969a.json -> shuhua/data/comments/42-69f2f1a3000000002202969a.json
renamed: data/comments/5-69f1cfcc0000000023017479.json -> shuhua/data/comments/5-69f1cfcc0000000023017479.json
renamed: data/comments/6-69f1d00c0000000035033c2d.json -> shuhua/data/comments/6-69f1d00c0000000035033c2d.json
renamed: data/comments/7-69f1cf3d000000001a037705.json -> shuhua/data/comments/7-69f1cf3d000000001a037705.json
renamed: data/comments/8-69f2c9dc000000003501dda3.json -> shuhua/data/comments/8-69f2c9dc000000003501dda3.json
renamed: data/comments/9-69f2ca54000000001b02047a.json -> shuhua/data/comments/9-69f2ca54000000001b02047a.json
renamed: data/notes/1-resolve.json -> shuhua/data/notes/1-resolve.json
renamed: data/notes/10-resolve.json -> shuhua/data/notes/10-resolve.json
renamed: data/notes/11-resolve.json -> shuhua/data/notes/11-resolve.json
renamed: data/notes/12-resolve.json -> shuhua/data/notes/12-resolve.json
renamed: data/notes/13-resolve.json -> shuhua/data/notes/13-resolve.json
renamed: data/notes/14-resolve.json -> shuhua/data/notes/14-resolve.json
renamed: data/notes/15-resolve.json -> shuhua/data/notes/15-resolve.json
renamed: data/notes/16-resolve.json -> shuhua/data/notes/16-resolve.json
renamed: data/notes/17-resolve.json -> shuhua/data/notes/17-resolve.json
renamed: data/notes/18-resolve.json -> shuhua/data/notes/18-resolve.json
renamed: data/notes/19-resolve.json -> shuhua/data/notes/19-resolve.json
renamed: data/notes/2-resolve.json -> shuhua/data/notes/2-resolve.json
renamed: data/notes/20-resolve.json -> shuhua/data/notes/20-resolve.json
renamed: data/notes/21-resolve.json -> shuhua/data/notes/21-resolve.json
renamed: data/notes/22-resolve.json -> shuhua/data/notes/22-resolve.json
renamed: data/notes/23-resolve.json -> shuhua/data/notes/23-resolve.json
renamed: data/notes/24-resolve.json -> shuhua/data/notes/24-resolve.json
renamed: data/notes/25-resolve.json -> shuhua/data/notes/25-resolve.json
renamed: data/notes/26-resolve.json -> shuhua/data/notes/26-resolve.json
renamed: data/notes/27-resolve.json -> shuhua/data/notes/27-resolve.json
renamed: data/notes/28-resolve.json -> shuhua/data/notes/28-resolve.json
renamed: data/notes/29-resolve.json -> shuhua/data/notes/29-resolve.json
renamed: data/notes/3-resolve.json -> shuhua/data/notes/3-resolve.json
renamed: data/notes/30-resolve.json -> shuhua/data/notes/30-resolve.json
renamed: data/notes/31-resolve.json -> shuhua/data/notes/31-resolve.json
renamed: data/notes/32-resolve.json -> shuhua/data/notes/32-resolve.json
renamed: data/notes/33-resolve.json -> shuhua/data/notes/33-resolve.json
renamed: data/notes/34-resolve.json -> shuhua/data/notes/34-resolve.json
renamed: data/notes/35-resolve.json -> shuhua/data/notes/35-resolve.json
renamed: data/notes/36-resolve.json -> shuhua/data/notes/36-resolve.json
renamed: data/notes/37-resolve.json -> shuhua/data/notes/37-resolve.json
renamed: data/notes/38-resolve.json -> shuhua/data/notes/38-resolve.json
renamed: data/notes/39-resolve.json -> shuhua/data/notes/39-resolve.json
renamed: data/notes/4-resolve.json -> shuhua/data/notes/4-resolve.json
renamed: data/notes/40-resolve.json -> shuhua/data/notes/40-resolve.json
renamed: data/notes/41-resolve.json -> shuhua/data/notes/41-resolve.json
renamed: data/notes/42-resolve.json -> shuhua/data/notes/42-resolve.json
renamed: data/notes/43-resolve.json -> shuhua/data/notes/43-resolve.json
renamed: data/notes/5-resolve.json -> shuhua/data/notes/5-resolve.json
renamed: data/notes/6-resolve.json -> shuhua/data/notes/6-resolve.json
renamed: data/notes/7-resolve.json -> shuhua/data/notes/7-resolve.json
renamed: data/notes/8-resolve.json -> shuhua/data/notes/8-resolve.json
renamed: data/notes/9-resolve.json -> shuhua/data/notes/9-resolve.json
renamed: data/raw-merged.json -> shuhua/data/raw-merged.json
renamed: scripts/collect-shuhua-voc.js -> shuhua/scripts/collect-shuhua-voc.js
renamed: scripts/gen-shuhua-closing-report.js -> shuhua/scripts/gen-shuhua-closing-report.js
renamed: scripts/gen-shuhua-report.js -> shuhua/scripts/gen-shuhua-report.js
renamed: shuhua-closing-report.html -> shuhua/shuhua-closing-report.html
renamed: shuhua-closing-report.md -> shuhua/shuhua-closing-report.md
renamed: shuhua-new-opportunities.md -> shuhua/shuhua-new-opportunities.md
renamed: shuhua-voc-report.md -> shuhua/shuhua-voc-report.md
renamed: "\350\210\222\345\215\216\350\267\221\346\255\245\346\234\272\345\233\233\346\234\210\345\256\243\345\217\221\346\212\245\345\244\207KOC\345\217\221\345\270\203\346\225\260\346\215\256.xlsx" -> "shuhua/\350\210\222\345\215\216\350\267\221\346\255\245\346\234\272\345\233\233\346\234\210\345\256\243\345\217\221\346\212\245\345\244\207KOC\345\217\221\345\270\203\346\225\260\346\215\256.xlsx"

Yi Jiarui há 4 meses atrás
pai
commit
cff6cfda34
100 ficheiros alterados com 262 adições e 39 exclusões
  1. 168 35
      README.md
  2. 1 1
      majiyong/majiyong-closing-report.html
  3. 1 1
      majiyong/majiyong-closing-report.md
  4. 0 0
      majiyong/【新鲜菜项目】马记永4月宣发数据汇总(1).xlsx
  5. 90 0
      shuhua/README.md
  6. 0 0
      shuhua/data/audit.log
  7. 0 0
      shuhua/data/collect-run.log
  8. 0 0
      shuhua/data/comments/1-69f046e0000000003601dac4.json
  9. 0 0
      shuhua/data/comments/10-69f2cc74000000002202a87e.json
  10. 0 0
      shuhua/data/comments/11-69f2ccc0000000002300649e.json
  11. 0 0
      shuhua/data/comments/12-69ec2c80000000003502ce48.json
  12. 0 0
      shuhua/data/comments/13-69ea233a0000000012012805.json
  13. 0 0
      shuhua/data/comments/14-69ea23ac000000002003b79f.json
  14. 0 0
      shuhua/data/comments/15-69ea241900000000230148ed.json
  15. 0 0
      shuhua/data/comments/16-69ea2473000000001901e001.json
  16. 0 0
      shuhua/data/comments/17-69ea24dd0000000020003804.json
  17. 0 0
      shuhua/data/comments/18-69ea25600000000022029163.json
  18. 0 0
      shuhua/data/comments/19-69ead97c00000000220255dc.json
  19. 0 0
      shuhua/data/comments/2-69f0308b000000001f001fd1.json
  20. 0 0
      shuhua/data/comments/20-69ead9ec000000001f030c00.json
  21. 0 0
      shuhua/data/comments/21-69ec2cfc000000003502d12f.json
  22. 0 0
      shuhua/data/comments/22-69ec2d940000000035031aed.json
  23. 0 0
      shuhua/data/comments/23-69eadb84000000001a035923.json
  24. 0 0
      shuhua/data/comments/24-69f0471b000000002003b189.json
  25. 0 0
      shuhua/data/comments/25-69eadbb60000000019032405.json
  26. 0 0
      shuhua/data/comments/26-69ead98a000000001901e003.json
  27. 0 0
      shuhua/data/comments/27-69ec2c690000000035031454.json
  28. 0 0
      shuhua/data/comments/28-69ec2cc1000000002301f757.json
  29. 0 0
      shuhua/data/comments/29-69ec2d2b000000003502066a.json
  30. 0 0
      shuhua/data/comments/3-69f0471b000000002003b189.json
  31. 0 0
      shuhua/data/comments/30-69ec2e1800000000200394a8.json
  32. 0 0
      shuhua/data/comments/31-69ec3095000000003700dd62.json
  33. 0 0
      shuhua/data/comments/32-69ec2f13000000003703667d.json
  34. 0 0
      shuhua/data/comments/33-69ec545e000000003502f098.json
  35. 0 0
      shuhua/data/comments/34-69ec2fa10000000023005886.json
  36. 0 0
      shuhua/data/comments/35-69ec5dff0000000023015799.json
  37. 0 0
      shuhua/data/comments/36-69f1c062000000001e00eba8.json
  38. 0 0
      shuhua/data/comments/37-6a02c7230000000007025126.json
  39. 0 0
      shuhua/data/comments/38-69f032850000000035026ba8.json
  40. 0 0
      shuhua/data/comments/39-69f1bc95000000003502f79a.json
  41. 0 0
      shuhua/data/comments/4-69f048ee000000001a02ca1f.json
  42. 0 0
      shuhua/data/comments/40-69f1bbf4000000003700d072.json
  43. 0 0
      shuhua/data/comments/41-69f2f0e1000000001f00248d.json
  44. 0 0
      shuhua/data/comments/42-69f2f1a3000000002202969a.json
  45. 0 0
      shuhua/data/comments/5-69f1cfcc0000000023017479.json
  46. 0 0
      shuhua/data/comments/6-69f1d00c0000000035033c2d.json
  47. 0 0
      shuhua/data/comments/7-69f1cf3d000000001a037705.json
  48. 0 0
      shuhua/data/comments/8-69f2c9dc000000003501dda3.json
  49. 0 0
      shuhua/data/comments/9-69f2ca54000000001b02047a.json
  50. 0 0
      shuhua/data/notes/1-resolve.json
  51. 0 0
      shuhua/data/notes/10-resolve.json
  52. 0 0
      shuhua/data/notes/11-resolve.json
  53. 0 0
      shuhua/data/notes/12-resolve.json
  54. 0 0
      shuhua/data/notes/13-resolve.json
  55. 0 0
      shuhua/data/notes/14-resolve.json
  56. 0 0
      shuhua/data/notes/15-resolve.json
  57. 0 0
      shuhua/data/notes/16-resolve.json
  58. 0 0
      shuhua/data/notes/17-resolve.json
  59. 0 0
      shuhua/data/notes/18-resolve.json
  60. 0 0
      shuhua/data/notes/19-resolve.json
  61. 0 0
      shuhua/data/notes/2-resolve.json
  62. 0 0
      shuhua/data/notes/20-resolve.json
  63. 0 0
      shuhua/data/notes/21-resolve.json
  64. 0 0
      shuhua/data/notes/22-resolve.json
  65. 0 0
      shuhua/data/notes/23-resolve.json
  66. 0 0
      shuhua/data/notes/24-resolve.json
  67. 0 0
      shuhua/data/notes/25-resolve.json
  68. 0 0
      shuhua/data/notes/26-resolve.json
  69. 0 0
      shuhua/data/notes/27-resolve.json
  70. 0 0
      shuhua/data/notes/28-resolve.json
  71. 0 0
      shuhua/data/notes/29-resolve.json
  72. 0 0
      shuhua/data/notes/3-resolve.json
  73. 0 0
      shuhua/data/notes/30-resolve.json
  74. 0 0
      shuhua/data/notes/31-resolve.json
  75. 0 0
      shuhua/data/notes/32-resolve.json
  76. 0 0
      shuhua/data/notes/33-resolve.json
  77. 0 0
      shuhua/data/notes/34-resolve.json
  78. 0 0
      shuhua/data/notes/35-resolve.json
  79. 0 0
      shuhua/data/notes/36-resolve.json
  80. 0 0
      shuhua/data/notes/37-resolve.json
  81. 0 0
      shuhua/data/notes/38-resolve.json
  82. 0 0
      shuhua/data/notes/39-resolve.json
  83. 0 0
      shuhua/data/notes/4-resolve.json
  84. 0 0
      shuhua/data/notes/40-resolve.json
  85. 0 0
      shuhua/data/notes/41-resolve.json
  86. 0 0
      shuhua/data/notes/42-resolve.json
  87. 0 0
      shuhua/data/notes/43-resolve.json
  88. 0 0
      shuhua/data/notes/5-resolve.json
  89. 0 0
      shuhua/data/notes/6-resolve.json
  90. 0 0
      shuhua/data/notes/7-resolve.json
  91. 0 0
      shuhua/data/notes/8-resolve.json
  92. 0 0
      shuhua/data/notes/9-resolve.json
  93. 0 0
      shuhua/data/raw-merged.json
  94. 0 0
      shuhua/scripts/collect-shuhua-voc.js
  95. 0 0
      shuhua/scripts/gen-shuhua-closing-report.js
  96. 0 0
      shuhua/scripts/gen-shuhua-report.js
  97. 1 1
      shuhua/shuhua-closing-report.html
  98. 1 1
      shuhua/shuhua-closing-report.md
  99. 0 0
      shuhua/shuhua-new-opportunities.md
  100. 0 0
      shuhua/shuhua-voc-report.md

+ 168 - 35
README.md

@@ -1,56 +1,189 @@
-# 舒华跑步机 · 四月小红书 KOC 宣发 VOC
+# 小红书 VOC 双案例工作流 · 舒华跑步机 + 马记永牛肉面
 
-> 基于可复用 VOC 工作流 + 小红书公开评论抓取
+> **2026 年 4 月** 两个独立投放案例的小红书公开评论 VOC 深度分析,验证一套**可复用的 6 阶段 VOC 工作流**在 **不同品类 / 不同体量 / 不同生命周期** 下的适配能力。
 
-## 目录结构
+---
+
+## 一、两个案例对比
+
+| 维度 | **舒华跑步机** (耐用消费品) | **马记永牛肉面** (餐饮连锁) |
+|---|---|---|
+| 投放规模 | 43 KOC (1 sheet) | 293 (12 KOL + 281 KOC,2 sheet) |
+| API 抓取评论 | 17 (含子评论) | **1,612** (≈ 舒华 95 倍) |
+| 噪声率 | 47% (KOC 互助互赞严重) | **< 1%** |
+| 竞品提及 | 易跑 1 次 | **0 次** (品牌护城河深) |
+| 心智阶段 | 知名度待建立 | 心智已渗透,需后端承接 |
+| 核心问题 | "用户不知道我" | "用户提了请求我没承接" |
+| 第一优先动作 | 静音减震 RTB 具象化 | 求开店评论转私域线索 |
+
+**核心结论**: 同一套 VOC 工作流,在 17 条评论的小样本和 1,612 条评论的大样本上**都能产出结构化、可执行的洞察**。区别只是行动差异化。
+
+---
+
+## 二、目录结构
 
 ```
-shuhua/
-├── 舒华跑步机四月宣发报备KOC发布数据.xlsx   ← 输入: 蒲公英 KOC 报备表 (45 行)
-├── shuhua-voc-report.md                       ← 输出: VOC 深度报告 (本次产出物)
-├── scripts/
-│   ├── collect-shuhua-voc.js                 ← 解析 xlsx + 短链跳转 + 评论拉取
-│   └── gen-shuhua-report.js                  ← 报告生成器
-├── data/
-│   ├── raw-merged.json                       ← 合并后的原始数据 (含评论)
-│   ├── notes/                                ← 短链解析缓存 (1 个 noteId/文件)
-│   ├── comments/                             ← 评论缓存 (按 noteId)
-│   ├── audit.log                             ← 采集日志
-│   └── collect-run.log                       ← 控制台输出归档
-└── node_modules/                             ← xlsx 依赖
+shuhua-majiyong_VOC/
+├── README.md                                  ← 本文档 (顶层入口)
+│
+├── 【新鲜菜项目】马记永4月宣发数据汇总(1).xlsx  ← 马记永输入 (脚本以 ../ 引用)
+│
+├── shuhua/                                    ← 舒华跑步机子项目
+│   ├── README.md                              ← 子项目说明
+│   ├── 舒华跑步机四月宣发报备KOC发布数据.xlsx     ← 舒华输入
+│   ├── shuhua-voc-report.md                   ← v1 VOC 深度分析
+│   ├── shuhua-closing-report.md               ← v2 结案报告 (Markdown)
+│   ├── shuhua-closing-report.html             ← v2 结案报告 (交互式 HTML)
+│   ├── shuhua-new-opportunities.md            ← v2 新机会挖掘 (17 个)
+│   ├── scripts/
+│   │   ├── collect-shuhua-voc.js              ← 采集
+│   │   ├── gen-shuhua-report.js               ← v1 报告生成
+│   │   └── gen-shuhua-closing-report.js       ← v2 结案报告
+│   └── data/
+│       ├── raw-merged.json                    ← 合并后原始数据
+│       ├── notes/         (43 个)             ← 短链 → noteId 缓存
+│       ├── comments/      (42 个)             ← 评论缓存
+│       ├── audit.log
+│       └── collect-run.log
+│
+├── majiyong/                                  ← 马记永子项目
+│   ├── README.md                              ← 子项目说明
+│   ├── majiyong-voc-report.md                 ← v1 VOC 深度分析
+│   ├── majiyong-closing-report.md             ← v2 结案报告 (Markdown)
+│   ├── majiyong-closing-report.html           ← v2 结案报告 (交互式 HTML)
+│   ├── majiyong-new-opportunities.md          ← v2 新机会挖掘
+│   ├── scripts/
+│   │   ├── collect-majiyong.js                ← 采集 (双 sheet · 293 条)
+│   │   ├── gen-majiyong-report.js             ← v1 报告生成
+│   │   ├── gen-majiyong-closing-report.js     ← v2 结案报告数据层
+│   │   └── gen-majiyong-closing-render.js     ← v2 HTML+MD 渲染层
+│   └── data/
+│       ├── raw-merged.json                    ← 293 行 + 评论
+│       ├── notes/         (293 个)            ← 短链解析缓存
+│       ├── comments/      (233 个)            ← 评论缓存
+│       ├── audit.log
+│       └── collect-run.log
+│
+└── node_modules/                              ← 共享依赖 (xlsx)
 ```
 
-## 复现步骤
+---
+
+## 三、可复现命令
+
+### 1) 安装依赖 (仅首次)
 
 ```powershell
-# 1. 安装依赖 (仅首次)
 npm install --no-save xlsx
+```
 
-# 2. 采集 (默认走 24h 缓存,加 --force 强抓)
-node scripts/collect-shuhua-voc.js
+### 2) 舒华跑步机案例
 
-# 3. 生成报告
-node scripts/gen-shuhua-report.js
+```powershell
+# 采集 (默认 24h 缓存,加 --force 强抓)
+node shuhua/scripts/collect-shuhua-voc.js
+
+# 生成 v1 VOC 报告 (Markdown)
+node shuhua/scripts/gen-shuhua-report.js
+
+# 生成 v2 结案报告 (HTML + MD,自动)
+node shuhua/scripts/gen-shuhua-closing-report.js
 ```
 
-## 采集接口
+**输出**: 4 份交付物均位于 `shuhua/` 目录。
 
-| 接口 | 用途 | 来源 |
-|---|---|---|
-| 短链跳转 | xhslink → 真实 noteId | xhs CDN (无需鉴权) |
-| 评论接口 | 获取笔记下评论列表 | 公开代理服务 (Bearer Token) |
+### 3) 马记永牛肉面案例
+
+```powershell
+# 采集 (293 条 · ~10 分钟首次,带缓存)
+node majiyong/scripts/collect-majiyong.js
+
+# 生成 v1 VOC 报告
+node majiyong/scripts/gen-majiyong-report.js
+
+# 生成 v2 结案报告 (HTML + MD,会自动调用 render 层)
+node majiyong/scripts/gen-majiyong-closing-report.js
+```
+
+**采集可选参数**:
+- `--force` 强制重抓 (绕过 24h 缓存)
+- `--limit=N` 仅采集前 N 条 (调试用)
+- `--only-resolve` 只解析短链,跳过评论拉取
 
-**Token 来源**: 默认从环境变量读取 (具体变量名见 `scripts/collect-shuhua-voc.js`)。
+---
 
-**响应嵌套结构**: `data.data.data.comments[]` (3 层 `data` 包装,易踩坑)。评论字段:
-- `id`, `content`, `time`, `like_count`, `ip_location`, `sub_comment_count`
-- `user.nickname`, `user.userid`
-- `sub_comments[].content`, `sub_comments[].user.nickname`
+## 四、6 阶段 VOC 工作流
 
-## 关键发现 (TL;DR)
+本仓库验证的可复用方法论:
 
-参见 `shuhua-voc-report.md` 完整报告。三大核心结论:
+| 阶段 | 步骤 | 输出 |
+|---|---|---|
+| 1 | **数据接入** | xlsx 解析 (单/多 sheet 自适应) → 内部行结构 |
+| 2 | **短链解析** | xhslink → 真实 noteId (302 跳转 + 直连双策略) |
+| 3 | **评论抓取** | 公开代理 API + Bearer Token + 24h 文件缓存 |
+| 4 | **数据合并 / 去重** | xlsx + noteId + 主评论 + 子评论 → `raw-merged.json` |
+| 5 | **主题词典 + 规则标注** | 12 主题词典 + 噪声识别 + 信号提取 |
+| 6 | **多形态产出** | v1 VOC 报告 (MD) / v2 结案报告 (HTML+MD) / 新机会挖掘 (MD) |
+
+**关键技术细节**:
+- API 响应嵌套结构: `data.data.data.comments[]` (3 层 `data` 包装,易踩坑)
+- 评论字段: `id`, `content`, `time`, `like_count`, `ip_location`, `user.nickname`, `sub_comments[]`
+- Token 来源: 环境变量,见 `scripts/collect-shuhua-voc.js`
+
+---
 
-1. **评论维度严重缺失** — 总互动率 5.37% 表面达标,但点赞:收藏:评论 ≈ 30:12:1,评论占比仅 2.3% 远低于种草健康范围
+## 五、关键发现 (TL;DR)
+
+### 舒华跑步机 (`shuhua-*`)
+1. **评论维度严重缺失** — 总互动率 5.37% 表面达标,但点赞:收藏:评论 ≈ 30:12:1
 2. **内容形态 CPE 差距 2.3 倍** — 干货教程型 (¥9.97) > 效果展示型 (¥10.13) >> 泛流量型 (¥22.5)
 3. **三个未被回应的高价值方向** — 扰邻焦虑 / 专业参数 / 365 天身材日记
+4. **Top 5 P0 新机会**: A1 静音减震 RTB / A2 坡度参数明牌 / C1 KOC 性别年龄重构 / B3 泛流量型升级 / E1 投后 24h 抓取
+
+### 马记永牛肉面 (`majiyong/majiyong-*`)
+1. **「非美食创意 KOL」单篇 1.6x 美食探店** — Top KOL 单篇互动 ≈ KOL 中位 4 倍
+2. **「新鲜菜」心智渗透成功** — 自发命中 64 条,超越价格主题 (43 条)
+3. **57 条「我们这没有」评论 = 免费选址数据** — 应反向输入拓店决策
+4. **Top 5 P0 新机会**: C1 求开店转私域 / A1 鲜菜可视化 / B1 探店 5 赛道差异化 / D1 KOC 长尾止损 / E1 主题词典版本化
+
+---
+
+## 六、4 份交付物的差异化定位
+
+| 文档 | 受众 | 用途 | 形态 |
+|---|---|---|---|
+| `*-voc-report.md` | 数据分析师 / 产品 | **过程性深度分析**,完整数据透视 | Markdown |
+| `*-closing-report.md` | 项目经理 / 老板 | **结案汇报**,优点/不足/建议三段式 | Markdown |
+| `*-closing-report.html` | 老板 / 客户 | **演示版** (暗色 + ECharts + 词云,可滑动汇报) | HTML |
+| `*-new-opportunities.md` | 业务团队 / 下一轮规划 | **前瞻性新机会**,17 个 P0/P1/P2 行动项 | Markdown |
+
+**两两关系**:
+- `voc-report` 偏过程,`closing-report` 偏结论 — 互补
+- `closing-report` 看过去,`new-opportunities` 看未来 — 互补
+- `.md` 给团队,`.html` 给老板 — 同源不同形
+
+---
+
+## 七、git 仓库说明
+
+仓库已通过 git 版本管理。建议提交规范:
+
+- `feat:` 新增交付物或脚本
+- `fix:` 修复采集 / 生成 bug
+- `data:` 重新采集后的数据更新
+- `docs:` 报告文档迭代
+
+`.gitignore` 应排除 `node_modules/`、`shuhua/data/notes/`、`shuhua/data/comments/`、`majiyong/data/notes/`、`majiyong/data/comments/` (缓存文件,可重建)。
+
+---
+
+## 八、下一步迭代建议
+
+1. **抽取共享模板层** — 当前两个 `gen-*-closing-report.js` 有约 70% 重复代码 (CSS / wordcloud / Section 框架),可抽到 `lib/closing-report-template.js`
+2. **主题词典外置** — 把 12 主题正则从代码中外置为 `topics/{shuhua,majiyong}.json`,便于业务侧维护
+3. **竞品对照基线** — 抓取陈香贵 / 张拉拉 / 易跑 / 麦瑞克 Top 50 笔记,建立心智份额对照
+4. **投后多次快照** — 24h / 7d / 30d 三次抓取,捕捉博主自删 / 长效衰减信号
+
+---
+
+*基于 ~1,629 条真实小红书公开评论 + 336 篇笔记元数据 · 可复用 VOC 工作流 v2 · 2026-05-14*

+ 1 - 1
majiyong/majiyong-closing-report.html

@@ -1415,7 +1415,7 @@ td.sample { color: var(--text-2); font-size: 0.82rem; max-width: 380px; }
 <section style="min-height:auto;padding:60px 24px;background:var(--bg-1)" data-num="END">
   <div class="inner" style="text-align:center">
     <p class="text-sm text-3">马记永·四月「新鲜菜」KOL/KOC 宣发结案报告 · 基于 293 篇笔记 + 1682 条评论真实数据生成</p>
-    <p class="text-xs text-3 mono" style="margin-top:8px">Generated 2026-05-14 10:21:44</p>
+    <p class="text-xs text-3 mono" style="margin-top:8px">Generated 2026-05-14 11:22:23</p>
   </div>
 </section>
 

+ 1 - 1
majiyong/majiyong-closing-report.md

@@ -1,6 +1,6 @@
 # 马记永 · 四月「新鲜菜」KOL/KOC 宣发结案报告
 
-> **投放期间**: 2026-04 · **生成时间**: 2026-05-14 10:21:44  
+> **投放期间**: 2026-04 · **生成时间**: 2026-05-14 11:22:23  
 > **数据范围**: 293 篇报备笔记 (KOL 12 + KOC 281) + 1682 条公开评论 (覆盖 233/293 篇)
 
 ---

+ 0 - 0
【新鲜菜项目】马记永4月宣发数据汇总(1).xlsx → majiyong/【新鲜菜项目】马记永4月宣发数据汇总(1).xlsx


+ 90 - 0
shuhua/README.md

@@ -0,0 +1,90 @@
+# 舒华跑步机 · 四月小红书 KOC 宣发 VOC
+
+> 蒲公英 43 位 KOC 投放报备数据 + 小红书公开评论真实抓取,基于可复用 6 阶段 VOC 工作流。
+
+## 目录结构
+
+```
+shuhua/
+├── 舒华跑步机四月宣发报备KOC发布数据.xlsx   ← 输入: 蒲公英 KOC 报备表 (45 行)
+│
+├── ▶ 4 份交付物
+│   ├── shuhua-voc-report.md           ← v1 VOC 深度分析报告
+│   ├── shuhua-closing-report.md       ← v2 结案报告 (Markdown)
+│   ├── shuhua-closing-report.html     ← v2 结案报告 (交互式 HTML · ECharts + 词云)
+│   └── shuhua-new-opportunities.md    ← v2 新机会深度挖掘 (17 个 P0/P1/P2)
+│
+├── scripts/
+│   ├── collect-shuhua-voc.js          ← 采集: xlsx → 短链解析 → 评论抓取
+│   ├── gen-shuhua-report.js           ← v1 VOC 报告生成
+│   └── gen-shuhua-closing-report.js   ← v2 结案报告 (HTML+MD) 生成
+│
+└── data/
+    ├── raw-merged.json                ← 合并后的原始数据 (含评论)
+    ├── notes/         (43 文件)       ← 短链 → noteId 缓存
+    ├── comments/      (42 文件)       ← 评论缓存 (按 noteId)
+    ├── audit.log
+    └── collect-run.log
+```
+
+## 复现步骤
+
+> 在仓库根目录 `shuhua-majiyong_VOC/` 下执行 (依赖根目录 `node_modules` 的 xlsx)。
+
+```powershell
+# 采集 (默认走 24h 缓存,加 --force 强抓)
+node shuhua/scripts/collect-shuhua-voc.js
+
+# 生成 v1 VOC 报告
+node shuhua/scripts/gen-shuhua-report.js
+
+# 生成 v2 结案报告 (HTML + MD)
+node shuhua/scripts/gen-shuhua-closing-report.js
+```
+
+## 采集接口
+
+| 接口 | 用途 | 来源 |
+|---|---|---|
+| 短链跳转 | xhslink → 真实 noteId | xhs CDN (无需鉴权) |
+| 评论接口 | 获取笔记下评论列表 | 公开代理服务 (Bearer Token) |
+
+**Token 来源**: 默认从环境变量读取,见 `scripts/collect-shuhua-voc.js`。
+
+**响应嵌套**: `data.data.data.comments[]` (3 层 `data` 包装,易踩坑)。评论字段: `id`, `content`, `time`, `like_count`, `ip_location`, `sub_comment_count`, `user.nickname`, `sub_comments[]`。
+
+## 数据采集结果
+
+| 指标 | 数值 |
+|---|---:|
+| 总 KOC | 43 |
+| 短链解析成功 | 42 (1 失效) |
+| 笔记有评论 | ≈ 16 (评论激发偏低) |
+| API 抓取评论数 (含子) | 17 |
+| 互助互赞噪声 | ≈ 47% |
+
+## 关键发现 (TL;DR)
+
+1. **评论维度严重缺失** — 总互动率 5.37% 表面达标,但点赞:收藏:评论 ≈ 30:12:1,评论占比 2.3% 远低于种草健康范围
+2. **内容形态 CPE 差距 2.3 倍** — 干货教程型 (¥9.97) > 效果展示型 (¥10.13) >> 泛流量型 (¥22.5)
+3. **三个未被回应的高价值方向** — 扰邻焦虑 / 专业参数 / 365 天身材日记
+4. **17 个新机会 Top 5 P0**:
+   - **A1** 静音减震 RTB 具象化 (沐阳 3 连评论 = 商品房+楼板+邻居)
+   - **A2** 坡度参数明牌对比 (用户自发推易跑作竞品锚点)
+   - **C1** KOC 性别/年龄结构调整 (43 位全萌系女性 vs 跑步机决策人群)
+   - **B3** 泛流量型升级专业体验型 (反直觉信号)
+   - **E1** 投后 24h 抓取 + 博主自删预警
+
+## 与 `../majiyong/` 案例对比
+
+| 维度 | **舒华** (本目录) | 马记永 |
+|---|---|---|
+| 投放规模 | 43 KOC | 293 (KOL+KOC) |
+| API 评论 | 17 | 1,612 |
+| 噪声率 | 47% | < 1% |
+| 心智阶段 | 待建立 | 已渗透 |
+| 第一优先 | 静音减震 RTB | 求开店转私域 |
+
+两份报告共同验证: **小红书公开评论抓取 + 规则化主题分析 + 17 项 5 象限挖掘** 是可复用的 VOC 工作流。
+
+完整对比详见仓库根目录 `../README.md`。

+ 0 - 0
data/audit.log → shuhua/data/audit.log


+ 0 - 0
data/collect-run.log → shuhua/data/collect-run.log


+ 0 - 0
data/comments/1-69f046e0000000003601dac4.json → shuhua/data/comments/1-69f046e0000000003601dac4.json


+ 0 - 0
data/comments/10-69f2cc74000000002202a87e.json → shuhua/data/comments/10-69f2cc74000000002202a87e.json


+ 0 - 0
data/comments/11-69f2ccc0000000002300649e.json → shuhua/data/comments/11-69f2ccc0000000002300649e.json


+ 0 - 0
data/comments/12-69ec2c80000000003502ce48.json → shuhua/data/comments/12-69ec2c80000000003502ce48.json


+ 0 - 0
data/comments/13-69ea233a0000000012012805.json → shuhua/data/comments/13-69ea233a0000000012012805.json


+ 0 - 0
data/comments/14-69ea23ac000000002003b79f.json → shuhua/data/comments/14-69ea23ac000000002003b79f.json


+ 0 - 0
data/comments/15-69ea241900000000230148ed.json → shuhua/data/comments/15-69ea241900000000230148ed.json


+ 0 - 0
data/comments/16-69ea2473000000001901e001.json → shuhua/data/comments/16-69ea2473000000001901e001.json


+ 0 - 0
data/comments/17-69ea24dd0000000020003804.json → shuhua/data/comments/17-69ea24dd0000000020003804.json


+ 0 - 0
data/comments/18-69ea25600000000022029163.json → shuhua/data/comments/18-69ea25600000000022029163.json


+ 0 - 0
data/comments/19-69ead97c00000000220255dc.json → shuhua/data/comments/19-69ead97c00000000220255dc.json


+ 0 - 0
data/comments/2-69f0308b000000001f001fd1.json → shuhua/data/comments/2-69f0308b000000001f001fd1.json


+ 0 - 0
data/comments/20-69ead9ec000000001f030c00.json → shuhua/data/comments/20-69ead9ec000000001f030c00.json


+ 0 - 0
data/comments/21-69ec2cfc000000003502d12f.json → shuhua/data/comments/21-69ec2cfc000000003502d12f.json


+ 0 - 0
data/comments/22-69ec2d940000000035031aed.json → shuhua/data/comments/22-69ec2d940000000035031aed.json


+ 0 - 0
data/comments/23-69eadb84000000001a035923.json → shuhua/data/comments/23-69eadb84000000001a035923.json


+ 0 - 0
data/comments/24-69f0471b000000002003b189.json → shuhua/data/comments/24-69f0471b000000002003b189.json


+ 0 - 0
data/comments/25-69eadbb60000000019032405.json → shuhua/data/comments/25-69eadbb60000000019032405.json


+ 0 - 0
data/comments/26-69ead98a000000001901e003.json → shuhua/data/comments/26-69ead98a000000001901e003.json


+ 0 - 0
data/comments/27-69ec2c690000000035031454.json → shuhua/data/comments/27-69ec2c690000000035031454.json


+ 0 - 0
data/comments/28-69ec2cc1000000002301f757.json → shuhua/data/comments/28-69ec2cc1000000002301f757.json


+ 0 - 0
data/comments/29-69ec2d2b000000003502066a.json → shuhua/data/comments/29-69ec2d2b000000003502066a.json


+ 0 - 0
data/comments/3-69f0471b000000002003b189.json → shuhua/data/comments/3-69f0471b000000002003b189.json


+ 0 - 0
data/comments/30-69ec2e1800000000200394a8.json → shuhua/data/comments/30-69ec2e1800000000200394a8.json


+ 0 - 0
data/comments/31-69ec3095000000003700dd62.json → shuhua/data/comments/31-69ec3095000000003700dd62.json


+ 0 - 0
data/comments/32-69ec2f13000000003703667d.json → shuhua/data/comments/32-69ec2f13000000003703667d.json


+ 0 - 0
data/comments/33-69ec545e000000003502f098.json → shuhua/data/comments/33-69ec545e000000003502f098.json


+ 0 - 0
data/comments/34-69ec2fa10000000023005886.json → shuhua/data/comments/34-69ec2fa10000000023005886.json


+ 0 - 0
data/comments/35-69ec5dff0000000023015799.json → shuhua/data/comments/35-69ec5dff0000000023015799.json


+ 0 - 0
data/comments/36-69f1c062000000001e00eba8.json → shuhua/data/comments/36-69f1c062000000001e00eba8.json


+ 0 - 0
data/comments/37-6a02c7230000000007025126.json → shuhua/data/comments/37-6a02c7230000000007025126.json


+ 0 - 0
data/comments/38-69f032850000000035026ba8.json → shuhua/data/comments/38-69f032850000000035026ba8.json


+ 0 - 0
data/comments/39-69f1bc95000000003502f79a.json → shuhua/data/comments/39-69f1bc95000000003502f79a.json


+ 0 - 0
data/comments/4-69f048ee000000001a02ca1f.json → shuhua/data/comments/4-69f048ee000000001a02ca1f.json


+ 0 - 0
data/comments/40-69f1bbf4000000003700d072.json → shuhua/data/comments/40-69f1bbf4000000003700d072.json


+ 0 - 0
data/comments/41-69f2f0e1000000001f00248d.json → shuhua/data/comments/41-69f2f0e1000000001f00248d.json


+ 0 - 0
data/comments/42-69f2f1a3000000002202969a.json → shuhua/data/comments/42-69f2f1a3000000002202969a.json


+ 0 - 0
data/comments/5-69f1cfcc0000000023017479.json → shuhua/data/comments/5-69f1cfcc0000000023017479.json


+ 0 - 0
data/comments/6-69f1d00c0000000035033c2d.json → shuhua/data/comments/6-69f1d00c0000000035033c2d.json


+ 0 - 0
data/comments/7-69f1cf3d000000001a037705.json → shuhua/data/comments/7-69f1cf3d000000001a037705.json


+ 0 - 0
data/comments/8-69f2c9dc000000003501dda3.json → shuhua/data/comments/8-69f2c9dc000000003501dda3.json


+ 0 - 0
data/comments/9-69f2ca54000000001b02047a.json → shuhua/data/comments/9-69f2ca54000000001b02047a.json


+ 0 - 0
data/notes/1-resolve.json → shuhua/data/notes/1-resolve.json


+ 0 - 0
data/notes/10-resolve.json → shuhua/data/notes/10-resolve.json


+ 0 - 0
data/notes/11-resolve.json → shuhua/data/notes/11-resolve.json


+ 0 - 0
data/notes/12-resolve.json → shuhua/data/notes/12-resolve.json


+ 0 - 0
data/notes/13-resolve.json → shuhua/data/notes/13-resolve.json


+ 0 - 0
data/notes/14-resolve.json → shuhua/data/notes/14-resolve.json


+ 0 - 0
data/notes/15-resolve.json → shuhua/data/notes/15-resolve.json


+ 0 - 0
data/notes/16-resolve.json → shuhua/data/notes/16-resolve.json


+ 0 - 0
data/notes/17-resolve.json → shuhua/data/notes/17-resolve.json


+ 0 - 0
data/notes/18-resolve.json → shuhua/data/notes/18-resolve.json


+ 0 - 0
data/notes/19-resolve.json → shuhua/data/notes/19-resolve.json


+ 0 - 0
data/notes/2-resolve.json → shuhua/data/notes/2-resolve.json


+ 0 - 0
data/notes/20-resolve.json → shuhua/data/notes/20-resolve.json


+ 0 - 0
data/notes/21-resolve.json → shuhua/data/notes/21-resolve.json


+ 0 - 0
data/notes/22-resolve.json → shuhua/data/notes/22-resolve.json


+ 0 - 0
data/notes/23-resolve.json → shuhua/data/notes/23-resolve.json


+ 0 - 0
data/notes/24-resolve.json → shuhua/data/notes/24-resolve.json


+ 0 - 0
data/notes/25-resolve.json → shuhua/data/notes/25-resolve.json


+ 0 - 0
data/notes/26-resolve.json → shuhua/data/notes/26-resolve.json


+ 0 - 0
data/notes/27-resolve.json → shuhua/data/notes/27-resolve.json


+ 0 - 0
data/notes/28-resolve.json → shuhua/data/notes/28-resolve.json


+ 0 - 0
data/notes/29-resolve.json → shuhua/data/notes/29-resolve.json


+ 0 - 0
data/notes/3-resolve.json → shuhua/data/notes/3-resolve.json


+ 0 - 0
data/notes/30-resolve.json → shuhua/data/notes/30-resolve.json


+ 0 - 0
data/notes/31-resolve.json → shuhua/data/notes/31-resolve.json


+ 0 - 0
data/notes/32-resolve.json → shuhua/data/notes/32-resolve.json


+ 0 - 0
data/notes/33-resolve.json → shuhua/data/notes/33-resolve.json


+ 0 - 0
data/notes/34-resolve.json → shuhua/data/notes/34-resolve.json


+ 0 - 0
data/notes/35-resolve.json → shuhua/data/notes/35-resolve.json


+ 0 - 0
data/notes/36-resolve.json → shuhua/data/notes/36-resolve.json


+ 0 - 0
data/notes/37-resolve.json → shuhua/data/notes/37-resolve.json


+ 0 - 0
data/notes/38-resolve.json → shuhua/data/notes/38-resolve.json


+ 0 - 0
data/notes/39-resolve.json → shuhua/data/notes/39-resolve.json


+ 0 - 0
data/notes/4-resolve.json → shuhua/data/notes/4-resolve.json


+ 0 - 0
data/notes/40-resolve.json → shuhua/data/notes/40-resolve.json


+ 0 - 0
data/notes/41-resolve.json → shuhua/data/notes/41-resolve.json


+ 0 - 0
data/notes/42-resolve.json → shuhua/data/notes/42-resolve.json


+ 0 - 0
data/notes/43-resolve.json → shuhua/data/notes/43-resolve.json


+ 0 - 0
data/notes/5-resolve.json → shuhua/data/notes/5-resolve.json


+ 0 - 0
data/notes/6-resolve.json → shuhua/data/notes/6-resolve.json


+ 0 - 0
data/notes/7-resolve.json → shuhua/data/notes/7-resolve.json


+ 0 - 0
data/notes/8-resolve.json → shuhua/data/notes/8-resolve.json


+ 0 - 0
data/notes/9-resolve.json → shuhua/data/notes/9-resolve.json


+ 0 - 0
data/raw-merged.json → shuhua/data/raw-merged.json


+ 0 - 0
scripts/collect-shuhua-voc.js → shuhua/scripts/collect-shuhua-voc.js


+ 0 - 0
scripts/gen-shuhua-closing-report.js → shuhua/scripts/gen-shuhua-closing-report.js


+ 0 - 0
scripts/gen-shuhua-report.js → shuhua/scripts/gen-shuhua-report.js


+ 1 - 1
shuhua-closing-report.html → shuhua/shuhua-closing-report.html

@@ -1253,7 +1253,7 @@ td.sample { color: var(--text-2); font-size: 0.82rem; max-width: 380px; }
 <section style="min-height:auto;padding:60px 24px;background:var(--bg-1)" data-num="END">
   <div class="inner" style="text-align:center">
     <p class="text-sm text-3">舒华跑步机 · 四月小红书 KOC 宣发结案报告 · 基于 43 位 KOC + 17 条评论真实数据生成</p>
-    <p class="text-xs text-3 mono" style="margin-top:8px">Generated 2026-05-14 10:01:39</p>
+    <p class="text-xs text-3 mono" style="margin-top:8px">Generated 2026-05-14 11:21:33</p>
   </div>
 </section>
 

+ 1 - 1
shuhua-closing-report.md → shuhua/shuhua-closing-report.md

@@ -1,6 +1,6 @@
 # 舒华跑步机 · 四月小红书 KOC 宣发 结案报告
 
-> **投放期间**: 2026-04 · **生成时间**: 2026-05-14 10:01:39  
+> **投放期间**: 2026-04 · **生成时间**: 2026-05-14 11:21:33  
 > **数据范围**: 43 位 KOC + 17 条公开评论 (覆盖 7/43 篇笔记)
 
 ---

+ 0 - 0
shuhua-new-opportunities.md → shuhua/shuhua-new-opportunities.md


+ 0 - 0
shuhua-voc-report.md → shuhua/shuhua-voc-report.md


Alguns ficheiros não foram mostrados porque muitos ficheiros mudaram neste diff