小红书读书笔记卡片
把一本书的划线 / 金句,变成一套可直接发小红书图文帖的卡片(1080×1440,3:4),并配套标题、正文和话题标签。
默认账号定位:职场 · 搞钱 · 认知提升。每张卡片必须有「我的拆书」——自己的解读,而不是搬运原文。
一、笔记来源(三选一,按可用性降级)
A. 微信读书官方 API(首选,最稳)— 需自备 Key
需要你自己的微信读书 Agent Gateway Key(wrk- 开头)。存到密钥文件,不要写进技能目录、也不要硬编码进脚本:
mkdir -p ~/.workbuddy/secrets
printf 'WEREAD_API_KEY=wrk-你的key\n' > ~/.workbuddy/secrets/weread.env
脚本的读取优先级是 --key 参数 > 密钥文件 > 环境变量。
密钥文件优先于环境变量是有意为之:某些宿主进程会注入已失效的旧 Key,环境变量不可靠。
推荐用法:直接跑取数脚本(零依赖,自动读密钥文件;以下路径相对于本技能目录):
python scripts/weread_api.py notebooks # 有笔记的书概览(自动翻页)
python scripts/weread_api.py highlights --book-id <id> # 单本划线
python scripts/weread_api.py thoughts --book-id <id> # 单本想法/点评
python scripts/weread_api.py raw --api /book/bestbookmarks --param bookId=<id> # 全书热门划线(出卡片的最佳素材)
没有 Key 也能用:直接用来源 C,把划线粘给 Agent,其余流程完全一样。
一个常见坑:多数人的个人划线很稀疏(往往只有十几本书有划线、每本一两条),指望自己的笔记凑够 5 张卡会很难。正经做法是用 /book/bestbookmarks 拉全书热门划线(带原文和人数),解读自己写。
手动调用网关(脚本不够用时):POST https://i.weread.qq.com/api/agent/gateway,
Header Authorization: Bearer $WEREAD_API_KEY,Body 平铺:
{"api_name":"/book/bookmarklist","bookId":"<先搜到的ID>","count":50,"skill_version":"1.0.3"}
- 书名 → bookId 先调
/store/search;有笔记的书列表:/user/notebooks - 每次请求必须带
skill_version;回包出现upgrade_info必须先按提示升级
B. weread-omni CLI(备选,功能更多但非官方)
需自行安装(npm 包名 weread-omni),入口通常在 node_modules/.bin/weread-omni(Windows 为 .cmd):
npx weread-omni --help
首次使用需交互登录:weread-omni login(扫码)。登录前建议先设 WEREAD_READONLY=1 再跑只读命令。
未登录时 doctor --json 会返回 no WeRead accounts are configured,此时降级到来源 A 或 C。
常用:weread-omni notes bookmarks <BOOK_ID> --json、weread-omni notes mine --json、
weread-omni shelf sync --json、weread-omni search books "书名" --json
C. 手动粘贴(兜底,随时可用)
用户直接把微信读书 / 纸质书的划线粘过来,跳过 A、B。这是最稳的路径,不依赖任何 Key。
二、工作流
- 收内容:确认 书名、作者、细分标签(搞钱/职场/认知/效率…)、账号名 handle。
- 挑金句:从划线里挑 3–6 句。标准:一句能独立成立、读完有刺痛感或可执行、不依赖上下文。
- 少而精:宁可 3 张扎心,不要 9 张凑数。
- 长句允许截断,但不得改写原意;截断处用省略号。
- 长度硬约束:卡片上限约 4 行 × 15 字 ≈ 60 字。原句超过 45 字必须截断或提炼,别整段塞进去——
否则字号被压到最小档且排版拥挤。
- 优先级:①脱离上下文也能成立 ②带具体数字或场景(47%、1000 人、30%/30%/20%/20%)③能自然接住一段自己的解读。
- 素材稀缺时(用户自己划线很少)→ 用/book/bestbookmarks热门划线选句,解读必须自己写。
- 敏感题材处理:遇到阶级/劳资/政治类表述(如《用得上的资本论》类书里的"剥削""无产阶级"),
只保留能落到个人职业选择上的句子,主动放弃对立叙事;成卡后在文案里提示"可能引战"并建议不互动哪些话题。 - 写「我的拆书」:每句配 1–2 句自己的解读(60–120 字),必须落到具体场景:这份工作 / 这笔钱 / 这个决策怎么办。
- 禁区:空泛赞美("说得太好了")、复述原句、编造数据。 - 写 JSON:按下面结构存成
cards.json(UTF-8)。 - 渲染出图:
python <本技能目录>/scripts/build_cards.py --data cards.json [--outdir 输出目录]
自动找 Chrome/Edge 无头渲染,输出cards/card_01.png …,逐张打印字节数;缺图会 FAIL 并退出码 2。 - 配发布文案:5 个标题备选(痛点型/反常识型/清单型/身份型/克制型)+ 300–500 字正文 + 8–12 个标签
(固定池:#读书笔记 #职场 #搞钱 #认知提升 #自我成长 #读书博主 #副业 #效率 #书单 #个人成长) - 交付:把 PNG 和文案一起给用户。发布必须用户手动上传(小红书无开放发布接口,不要尝试自动发布)。
三、cards.json 结构
{
"book": "书名",
"author": "作者",
"category": "职场 · 搞钱 · 认知",
"tag": "搞钱",
"handle": "@你的账号名",
"prefix": "card",
"cards": [
{"quote": "金句原文【要高亮的词】用方括号", "insight": "我的拆书:落到具体场景的一句话"},
{"quote": ["手动换行第一行", "第二行"], "insight": "…", "tag": "认知"}
]
}
quote支持字符串(自动按标点断行,每行 ≤15 字,最多 4 行)或数组(手动分行)或\n- 金句含英文长词(如 Harness、Claude Code)时:脚本已修复不在单词中间硬切,
但自动断行仍可能整行溢出被浏览器再换行,导致末行只剩一两个字。稳妥做法:
在 JSON 里手动分行(quote 用数组),每行按全角当量 ≤14 计(英文词按半宽),首图务必逐张目检。 - 【】包裹的词会高亮成金色
- 字数 ≤14 用 86px 大字,≤30 用 72px,其余 62px
insight不要再写"我的拆书:"前缀,卡片上已有标签;直接写解读正文page不填则自动生成01/05
四、风格规范(保持一致,别每次换)
- 深色底 + 暖金点缀,主色
#c9a36b,文字#f3efe6 - 固定顺序:顶部 READING CARD + 领域 → 分隔线 → 书名+细分标签 → 作者 → 引号+金句 → 我的拆书框 → 底部页码+账号
- 字体依赖系统中文(微软雅黑 / 苹方),渲染机缺中文字体会乱码
五、红线
- 不要大段搬运原文:引用控制在必要长度,重心放在自己的解读上;一本书的卡片不要连发整章。
- 不虚构:书名、作者、页码、数据、个人经历都不能编;拿不准就标"待确认"或直接删。
- 不夸大:禁用"读完这本书月入十万""彻底改变人生""百分之百"这类表达。
- 不自动发布:只交付素材,发布由用户手动完成。
- 不替用户编造个人故事:涉及"我"的经历、收入、职场细节,必须用户提供。
六、选题方向(账号定位参考)
见 references/positioning.md:差异化定位、选题公式、反同质化做法、发布前自查清单。
七、资产
assets/reading_card_template.html:带占位符的 3:4 模板,改 CSS 即可换风格scripts/build_cards.py:JSON → 批量 PNG(零第三方依赖,自动找 Chrome/Edge)scripts/weread_api.py:微信读书取数(需自备 Key)references/positioning.md:账号定位与选题策略
八、依赖
- Python 3.8+,零第三方依赖
- Chrome 或 Edge(无头截图用,脚本自动查找)
- 系统中文字体(微软雅黑 / 苹方)
九、关于
作者:拂晓东夕(SkillHub @user_4283aa25)· MIT License · 反馈与建议欢迎在技能评论区留言。