← 返回
未分类 Key

WeRead Import

将微信读书的划线与想法导出为 Markdown 文件,通常写入 Obsidian 阅读目录。适用于用户要求导入或同步微信读书笔记、导出单本或全部书籍、重新渲染已有笔记、验证删除归档行为、调整模板/合并逻辑/frontmatter tags,或需要通过官方 Gateway、浏览器登录态、手动 Cookie 运行微信...
将微信读书的划线与想法导出为 Markdown,常写入 Obsidian 阅读目录。适用于导入/同步笔记、导出单本或全部书籍、重新渲染笔记、验证删除归档、调整模板/合并逻辑/frontmatter tags,或通过官方 Gateway、浏览器登录态、手动 Cookie 运行微信。
gnixner gnixner 来源
未分类 clawhub v0.4.0 2 版本 99899.4 Key: 需要
★ 0
Stars
📥 993
下载
💾 1
安装
2
版本
#latest

概述

weread-import

通过 scripts/run.sh 运行 CLI。首次执行时会自动安装依赖。

默认策略

  1. 默认使用官方 Gateway 后端,需要环境变量 WEREAD_API_KEY
  2. WEREAD_API_KEY 获取路径:打开微信读书 App 最新版 -> 我的 -> 右上角设置按钮 -> 微信读书 Skill -> 快速配置第 2 步 -> 获取 API Key。
  3. 未配置 WEREAD_API_KEY 时,提示用户配置并复述获取路径,同时展示 Gateway、受管浏览器、外部 Chrome、手动 Cookie 四种可选路径;不要自行切换到 Cookie。
  4. Gateway 已配置但网络失败、HTTP 5xx、网关不可达或接口不支持时,自动回退 web 后端。
  5. 用户显式传入 --cookie-from--cookie 时,视为老用户旧链路,自动使用 web 后端;若显式 --api-backend gateway,则 Gateway 优先并忽略 cookie 参数。
  6. 修改模板、合并逻辑或 frontmatter 后,先输出到临时目录验证。
  7. 验证通过后,再对真实目录执行。
  8. 目的是重新渲染或验证时,加上 --force 跳过增量检查。

详细命令模板见 references/workflows.md

推荐命令

# 导入单本书
bash ./scripts/run.sh --book "自卑与超越" --output "/path/to/Reading"

# 导入全部书
bash ./scripts/run.sh --all --output "/path/to/Reading"

# 强制重新渲染
bash ./scripts/run.sh --book "自卑与超越" --output "/path/to/Reading" --force

# 覆盖 frontmatter tags
bash ./scripts/run.sh --book "自卑与超越" --output "/path/to/Reading" --tags "reading/weread,book"

# 明确不使用官方 Gateway,改用旧浏览器/Cookie 链路
bash ./scripts/run.sh --all --no-gateway --cookie-from browser-managed --output "/path/to/Reading"

Agent 决策表

场景行为
------------
新用户 / 常规导入使用默认 Gateway 命令:bash ./scripts/run.sh --all --output "/path/to/Reading"
缺少 WEREAD_API_KEY报告 CLI 给出的可选项,并复述获取路径:微信读书 App 最新版 -> 我的 -> 右上角设置按钮 -> 微信读书 Skill -> 快速配置第 2 步 -> 获取 API Key;不要替用户选择
老用户命令含 --cookie-from--cookie直接执行,CLI 会按旧 web 后端运行,并提示 Gateway 升级优势
用户明确不用 Gateway使用 --no-gateway --cookie-from browser-managed,或按用户指定的 cookie/browser 参数执行
Gateway 临时不可用允许 CLI 自动回退 web 后端,报告最终 backend
Gateway 鉴权失败或 upgrade_info不回退,报告原始错误和升级/配置要求
定时任务新任务推荐 Gateway 固定命令;已有旧 cron 命令继续执行,不要自动改参数或加 --force

可用参数

  • --all
  • --book </code></li><li><code>--book-id <id></code></li><li><code>--output <dir></code></li><li><code>--mode <api></code></li><li><code>--api-backend <gateway|web></code></li><li><code>--no-gateway</code></li><li><code>--cookie <cookie></code></li><li><code>--cookie-from <manual|browser-live|browser-managed></code></li><li><code>--force</code></li><li><code>--tags <a,b,c></code></li></ul><h2>定时任务</h2><p>定时 / 自动执行场景下,必须严格遵守以下规则。</p><h3>固定命令</h3><pre><code>bash ./scripts/run.sh --all --output "/path/to/Reading" </code></pre><p>原样执行,禁止修改参数。不要添加 <code>--force</code>、不要替换 Gateway 为硬编码 cookie、不要省略 <code>--output</code>。</p><h3>前置条件</h3><ul><li>默认 Gateway 需要 <code>WEREAD_API_KEY</code>。</li><li>显式 <code>--cookie-from</code> / <code>--cookie</code> 的老命令会按 web 后端执行,不要求 <code>WEREAD_API_KEY</code>。</li><li><code>--no-gateway</code> / web 后端下,<code>browser-live</code> 需要外部 Chrome CDP 已运行且已登录微信读书。</li><li><code>--no-gateway</code> / web 后端下,<code>browser-managed</code> 会自动拉起隔离浏览器;首次需要用户在该独立窗口里登录微信读书。</li><li>如果 CDP 未运行或登录已过期,命令会以非零 exit code 退出 — 这是预期行为,不要尝试修复。</li></ul><h3>禁止事项</h3><ul><li>禁止加 <code>--force</code> — 增量跳过是定时场景的正确行为,不是 bug。</li><li>禁止用 <code>--cookie '...'</code> 硬编码 cookie — cookie 会过期,应优先使用 Gateway 或浏览器模式。</li><li>禁止在失败后自行重试、变更参数、或尝试其他方式绕过错误。</li></ul><h3>错误处理</h3><ul><li>exit code 0 = 成功,直接报告结果。</li><li>exit code 非 0 = 失败,将完整错误输出报告给用户,不做任何额外操作。</li><li>鉴权失败时,不要立刻断言用户已退出登录。先按 <code>references/workflows.md</code> 的验证流程区分登录态、CDP 环境和浏览器上下文问题。</li></ul><h2>运行须知</h2><ul><li>默认后端为官方 Gateway,调用 <code>https://i.weread.qq.com/api/agent/gateway</code>。</li><li><code>run.sh</code> 在 <code>browser-managed</code> 下会自动拉起隔离 Chrome;<code>browser-live</code> 下只校验外部 CDP,不会自动拉起浏览器。</li><li>Chrome 146+ 要求非默认 <code>--user-data-dir</code> 才能开启远程调试,<code>open-chrome-debug.sh</code> 会自动处理。</li><li><code>browser-managed</code> 默认使用 <code>~/.weread-import-profile-isolated</code>,不会同步默认 Chrome 的整份登录态。</li><li><code>browser</code> 仍然可用,但仅作为 <code>browser-managed</code> 的兼容别名。</li><li>如需保留旧的整份 profile 同步行为,显式设置 <code>WEREAD_PROFILE_SYNC_MODE=legacy</code>。</li><li>浏览器 cookie / 浏览器上下文请求在 CDP 会话结束后会正确关闭 Playwright 连接,不会关闭用户自己的 Chrome。</li><li>API 请求自动附加时间戳防缓存,减少因 CDN 缓存导致的鉴权失败。</li><li>API 鉴权失败会自动刷新当前 session 重试;浏览器模式下的书籍详情接口会复用浏览器上下文。</li><li>官方口径中 <code>noteCount</code> 是划线数,<code>reviewCount</code> 是想法/点评数,<code>bookmarkCount</code> 是书签数;书签只统计,不导出正文。</li><li>合并统计支持新增 / 更新 / 保留 / 删除四种分类。</li><li>被删除的条目会归档到 <code>## 已删除</code>,而非直接丢弃。</li><li>元信息由 YAML frontmatter 承载,正文中不重复。</li><li>Skill 在脚本层面自包含,但运行环境需提供 Node.js 和 Playwright。</li></ul><h2>环境变量</h2><p>参见 <code>env.example.md</code>。</p><table><thead><tr><th>变量</th><th>说明</th><th>默认值</th></tr></thead><tbody><tr><td>------</td><td>------</td><td>--------</td></tr><tr><td><code>WEREAD_API_KEY</code></td><td>官方 Gateway API Key</td><td>-</td></tr><tr><td><code>WEREAD_API_BACKEND</code></td><td>API 后端:<code>gateway</code> 或 <code>web</code></td><td><code>gateway</code></td></tr><tr><td><code>WEREAD_GATEWAY_SKILL_VERSION</code></td><td>官方 Gateway skill 版本</td><td><code>1.0.3</code></td></tr><tr><td><code>WEREAD_COOKIE</code></td><td>手动 Cookie</td><td>-</td></tr><tr><td><code>WEREAD_IMPORT_MODE</code></td><td>导出模式</td><td><code>api</code></td></tr><tr><td><code>WEREAD_CDP_URL</code></td><td>Chrome CDP 地址</td><td><code>http://127.0.0.1:9222</code></td></tr><tr><td><code>WEREAD_OUTPUT</code></td><td>输出目录</td><td><code>./out/weread</code></td></tr><tr><td><code>WEREAD_TAGS</code></td><td>Frontmatter tags</td><td><code>reading,weread</code></td></tr><tr><td><code>WEREAD_USER_AGENT</code></td><td>自定义 UA</td><td>Chrome 146</td></tr></tbody></table><h2>资源</h2><ul><li>GitHub: https://github.com/gnixner/weread-import</li></ul><h3>scripts/</h3><ul><li><code>scripts/run.sh</code>:Skill 执行入口(首次自动安装依赖;<code>browser-managed</code> 自动拉起隔离 Chrome,<code>browser-live</code> 只校验外部 CDP)</li><li><code>scripts/open-chrome-debug.sh</code>:启动隔离的 Chrome 远程调试;<code>legacy</code> 模式下才同步默认 Profile 登录态</li><li><code>scripts/prepare-staging-skill.sh</code>:生成隔离的 staging skill 目录,供发版前安装态验证使用</li></ul><h3>references/</h3><ul><li><code>references/workflows.md</code>:推荐工作流、验证流程与常见问题处理</li></ul></div> </div> </div> <div id="tab-versions" class="detail-content"> <div class="detail-section"> <h2>版本历史</h2> <p style="margin-bottom:12px;font-size:14px;color:#94a3b8;">共 2 个版本</p> <ul class="version-list"> <li> <div> <span class="version-tag">v0.4.0</span> <span style="font-size:11px;color:#5b6abf;margin-left:8px;background:#eef0ff;padding:1px 8px;border-radius:10px;">当前</span> </div> <div style="font-size:12px;color:#94a3b8;"> 2026-05-21 12:31 安全 安全 </div> </li> <li> <div> <span class="version-tag">v0.3.9</span> </div> <div style="font-size:12px;color:#94a3b8;"> 2026-05-01 05:39 安全 安全 </div> </li> </ul> </div> </div> <div id="tab-security" class="detail-content"> <div class="detail-section"> <h2>安全检测</h2> <div class="sec-grid"> <div class="sec-card"> <h4>腾讯云安全 (Keen)</h4> <div class="sec-status sec-safe"> 安全,无风险 </div> <a href="https://tix.qq.com/search/skill?keyword=bb8a7d9f905aa2797bee97a85a155951" target="_blank">查看报告</a> </div> <div class="sec-card"> <h4>腾讯云安全 (Sanbu)</h4> <div class="sec-status sec-safe"> 安全,无风险 </div> <a href="https://static.cloudsec.tencent.com/html-report-v2/2026/05/26/424896_37d6ea6280e29ded4716361534d672e2.html?q-sign-algorithm=sha1&q-ak=AKID8JMG1bzBC1dz96qNhssfFftujT1NCoFi&q-sign-time=1782272253%3B1813808253&q-key-time=1782272253%3B1813808253&q-header-list=host&q-url-param-list=&q-signature=87948a5129cae2951feb3fc9ff2b51f98028b079" target="_blank">查看报告</a> </div> </div> </div> </div> <!-- Recommended Skills --> <div style="margin-top:24px;"> <h2 style="font-size:18px;font-weight:600;margin-bottom:16px;">🔗 相关推荐</h2> <div class="rec-grid"> <div class="rec-card"> <span class="badge-cat" style="margin-bottom:8px;display:inline-block;">knowledge-management</span> <h3><a href="/s/obsidian">Obsidian</a></h3> <div class="rec-owner">steipete</div> <div class="rec-desc">操作 Obsidian 仓库(纯 Markdown 笔记)并通过 obsidian-cli 自动化。</div> <div class="rec-stats"> <span style="color:#f39c12;">★ 446</span> <span style="color:#5b6abf;">📥 104,950</span> </div> </div> <div class="rec-card"> <span class="badge-cat" style="margin-bottom:8px;display:inline-block;">life-service</span> <h3><a href="/s/qweather-self-growing">QWeather</a></h3> <div class="rec-owner">gnixner</div> <div class="rec-desc">由QWeather驱动的全球天气查询,支持实时天气、多日预报和旅行友好摘要。自我成长——随官方渠道扩展。</div> <div class="rec-stats"> <span style="color:#f39c12;">★ 0</span> <span style="color:#5b6abf;">📥 415</span> </div> </div> <div class="rec-card"> <span class="badge-cat" style="margin-bottom:8px;display:inline-block;">knowledge-management</span> <h3><a href="/s/web-tools-guide">web-tools-guide</a></h3> <div class="rec-owner">user_ec205dbb</div> <div class="rec-desc">MANDATORY before calling web_search, web_fetch, browser, or opencli. Contains required error-handling procedures (web_se</div> <div class="rec-stats"> <span style="color:#f39c12;">★ 70</span> <span style="color:#5b6abf;">📥 160,488</span> </div> </div> </div> </div> </div> <script> document.addEventListener('DOMContentLoaded',function(){ document.querySelectorAll('.detail-tab').forEach(function(btn){ btn.addEventListener('click',function(e){ var tab = this.getAttribute('data-tab'); document.querySelectorAll('.detail-tab').forEach(function(b){b.classList.remove('active')}); document.querySelectorAll('.detail-content').forEach(function(c){c.classList.remove('active')}); this.classList.add('active'); var el = document.getElementById('tab-'+tab); if(el) el.classList.add('active'); }); }); }); </script> <div class="footer"> <p>Skill工具集 © 2026</p> </div></body> </html>