思考
微信读书接入Family Garden
微信读书数据接入(Family Garden)
本文档描述 Family Garden 如何通过微信读书官方 API Gateway 同步阅读数据,包括接口说明、脚本实现、数据文件结构、增量同步机制与使用方式。
目录
1. 总览
阅读数据通过微信读书官方 API Gateway 拉取,不再解析 Obsidian / WeRead 导出 Markdown。数据以结构化 JSON 输出到 src/content-data/weread/,由 Astro 直接消费。
- 官方统一入口,鉴权简单
- 返回字段完整(封面、作者、划线、想法、统计等)
- 数据按官方分层,Astro 无需自己维护结构
- 支持增量同步,避免每次全量拉取
2. API Gateway
- 入口:
POST https://i.weread.qq.com/api/agent/gateway - 鉴权:
Authorization: Bearer WEREAD_API_KEY - 请求体格式:
{
"skill_version": "1.0.4",
"api_name": "shelf/sync"
}
所有接口共用同一入口,仅 api_name 与参数不同。
3. 核心接口
| 接口 | 说明 | 用途 |
|---|---|---|
shelf/sync |
完整书架(电子书 + 有声书) | 首页、最近阅读 |
user/notebooks |
有笔记的书籍列表 | 阅读资产分类 |
book/bookmarklist |
单本书全部划线 | 划线正文 |
review/list/mine |
我的想法/点评 | 阅读心得 |
readdata/detail |
阅读统计(周/月/年/总体) | 统计页 |
book/info |
书籍详情 | 备用 |
book/getprogress |
阅读进度 | 备用 |
store/search |
搜索书籍 | 备用 |
注意:所有阅读时间的单位均为秒。
4. 脚本结构
| 脚本 | 说明 |
|---|---|
scripts/weread_client.py |
API Gateway 统一封装,自动读取 WEREAD_API_KEY |
scripts/collect-weread.py |
同步脚本(增量优先),生成 src/content-data/weread/ 数据 |
4.1 weread_client.py
- 从根目录
.env(已 gitignore)或环境变量读取WEREAD_API_KEY,环境变量优先级更高 - 核心类
WeReadClient,方法对应上述接口(shelf()、bookmark_list()、reading_stats()等) get_all_notebooks()/get_all_reviews()自动翻页拉取全量
4.2 collect-weread.py
分 5 个阶段:
sync_shelf— 书架(全量,1 次调用)sync_notes— 划线(增量)sync_reviews— 个人想法(增量)sync_stats— 阅读统计(全量,4 次调用)sync_latest— 最近阅读(复用 notes 数据,不额外调用接口)
5. 数据文件
输出目录:src/content-data/weread/
| 文件 | 说明 |
|---|---|
shelf.json |
完整书架(电子书 + 有声书) |
notes.json |
全部划线,按书组织 |
reviews.json |
全部个人想法/点评 |
stats.json |
阅读统计(总体/年/月/周) |
latest.json |
最近阅读(兼容原 reading.json 格式) |
sync-meta.json |
增量同步元数据(每本书的变化指纹) |
6. 同步机制
6.1 为什么需要增量
notes / reviews 每本书都要一次 API 调用,是成本大头。全量拉取时的开销:
notes:每本有笔记的书全量拉划线(约 248 本 ≈ 248 次调用)reviews:每本有想法的书全量拉想法(约 109 次调用)latest:最近 30 本再各拉一次划线
一次完整运行约 400 次 API 调用。
6.2 增量策略
-
shelf/stats调用次数固定(1 + 4 次),始终全量 -
每本书记录变化指纹:
[readUpdateTime, reviewCount, noteCount, bookmarkCount]存入
sync-meta.json -
notes/reviews只重拉指纹变化的书,其余沿用上次数据 -
latest直接复用notes.json的划线,不再调用接口
每轮同步降到:约 8 次固定调用 + 仅变化书目的拉取。
6.3 关键点
- 指纹包含
bookmarkCount/reviewCount,新增划线、想法即使readUpdateTime未变也能被检测到 - 单本书的划线整本替换,不会新旧混杂
- 书被移除时自动从输出中删除
- 拉取失败的书沿用旧数据,不会清空
- 首次运行(无
sync-meta.json)自动全量
7. 使用说明
7.1 配置
推荐把 WEREAD_API_KEY 写入根目录 .env(已 gitignore):
WEREAD_API_KEY=wrk-xxxxxx
7.2 运行
# 增量同步(默认)
python scripts/collect-weread.py
# 强制全量重拉 notes/reviews
python scripts/collect-weread.py --force
# 或临时用环境变量(Windows PowerShell)
set WEREAD_API_KEY=wrk-xxxxxx && python scripts/collect-weread.py
首次运行会自动全量拉取并生成 sync-meta.json。
8. 前端适配
LatestActivity.astro— 优先读取weread/latest.json,回退到reading.jsonarchiveStats.ts— 同上