微信读书 API 接口

文章介绍了微信读书插件从基于Cookie的网页接口迁移到SKILL API官方接口的过程。新方案通过API Key调用统一网关,整合了书架、笔记书籍、划线、想法等数据同步,相比旧方案更安全稳定。新旧接口对比显示,新接口模式提供更清晰的数据结构和扩展性,支持阅读统计等新功能。作者最终选择放弃旧Cookie方案,因其存在隐私风险和接口不稳定性,而新API方案改善了用户体验和维护效率。

最近我把读书笔记插件里的微信读书同步功能,从原来的 Cookie 网页版接口模式,迁移到了现在的 SKILL API 官方接口模式。

这个过程不只是换了几个请求地址,而是把整个微信读书同步链路重新梳理了一遍:书架、有笔记书籍、划线、想法、热门划线、公众号文章、阅读统计,都统一到了新的接口模式下。

这篇文章主要记录一下两套接口的区别、现在使用的接口清单,以及为什么我最终决定放弃旧 Cookie 方案。


一、旧方案:Cookie + Web 接口

早期的微信读书同步,大多是模拟网页版请求。基本思路是:

  1. 用户提供微信读书 Cookie。
  2. 插件通过代理请求微信读书 Web 接口。
  3. 接口返回书籍、划线、评论、章节等数据。
  4. 再把这些数据整理成笔记文档。

旧方案能用,但它的问题也很明显:

  • Cookie 有过期风险,也有隐私风险;
  • Web 接口不稳定;
  • 有些接口还需要特殊方式绕过浏览器环境限制。

维护时间久了,整个同步链路会越来越脆弱。

旧接口大致包括

旧接口作用
​https://weread.qq.com/api/user/notebook​获取有笔记的书籍列表
​https://weread.qq.com/web/book/info?bookId=xxx​获取书籍详情
​https://weread.qq.com/web/shelf/sync​获取书架数据
​https://weread.qq.com/web/book/bookmarklist?bookId=xxx​获取个人划线
​https://weread.qq.com/web/review/list​获取评论、想法、书评
​https://weread.qq.com/web/book/bestbookmarks?bookId=xxx​获取热门划线
​https://weread.qq.com/web/book/chapterInfos​获取章节信息

旧接口返回的数据一般包括:

  • 书籍列表
  • 书籍详情
  • 章节列表
  • 个人划线
  • 个人想法 / 书评
  • 热门划线
  • 书架数据

这些接口曾经支撑了很长一段时间的同步功能,但它们毕竟不是一个更适合长期维护的接入方式。


二、新方案:SKILL API 官方接口模式

现在的新方案是使用 API Key 调用统一网关。

API Key 申请入口:

微信读书 AI 助手
连接你的微信读书账号,用 AI 搜书、查笔记、看书评、分析阅读数据
weread.qq.com

当前统一请求入口是:https://weread.qq.com/api/agent/gateway​

请求方式是 POST​,通过 Header 传入 API Key:

项目说明
请求方式​POST​
请求入口​https://weread.qq.com/api/agent/gateway​
鉴权方式​Authorization: Bearer {API Key}​
参数形式参数直接放在请求体顶层
必带字段​api_name​、skill_version​
当前版本字段​skill_version: "1.0.3"​

这里有一个需要注意的点:业务参数不要再包一层 params​,而是直接和 api_name​、skill_version​ 放在同一层。

比如请求书籍详情时,本质上是向统一网关提交:

字段说明
​api_name​接口名称,例如 /book/info​
​bookId​书籍 ID
​skill_version​接口协议版本

正常响应不一定都有 errcode​。只要返回了业务字段,就可以按成功结果处理。鉴权失败时,通常会返回类似 errcode: -2013​ 的错误。


三、当前主要接口清单

1. API Key 验证

接口作用
​/_list​验证 API Key 是否可用,并查看可调用接口能力

这个接口主要用于判断 Key 是否有效。错误 Key 会返回鉴权失败,正确 Key 会返回接口能力列表。


2. 有笔记书籍

接口作用
​/user/notebooks​获取有笔记的书籍列表

这个接口用于获取用户做过笔记的书籍。返回结果里会包含:

  • 书籍数量
  • 笔记数量
  • 是否还有更多
  • 翻页游标
  • 书籍基本信息
  • 笔记数量
  • 划线数量
  • 想法数量

这个接口是同步入口里非常重要的一环,因为它能告诉插件:哪些书是有必要同步的。


3. 书架数据

接口作用
​/shelf/sync​获取微信读书书架数据

这个接口返回的是书架全量数据。结构上通常包含:

字段说明
​books​书架里的书籍和公众号账号
​mp​收藏或文章相关入口
​albums​专辑数据
​archive​归档数据

需要注意的是,books​ 里面普通书和公众号账号是混在一起的。公众号账号的 bookId​ 通常以 MP_WXS_​ 开头。


4. 普通书详情

接口作用
​/book/info​获取书籍详情

常见返回字段包括:

  • ​bookId​
  • ​title​
  • ​author​
  • ​translator​
  • ​cover​
  • ​intro​
  • ​publisher​
  • ​publishTime​
  • ​isbn​
  • ​category​
  • ​price​
  • ​totalWords​

这个接口主要用于补全书籍元数据,比如书名、作者、ISBN、出版社、封面等。


5. 章节信息

接口作用
​/book/chapterinfo​获取普通书章节信息

返回结果通常包含章节列表,例如:

  • ​chapterUid​
  • ​chapterIdx​
  • ​title​
  • ​level​
  • ​anchors​

章节信息主要用于把划线、想法归属到具体章节里。

公众号账号调用这个接口时可能为空,所以公众号同步不能依赖章节信息。


6. 个人划线

接口作用
​/book/bookmarklist​获取个人划线

返回结果通常包含:

  • 划线 ID
  • 书籍 ID
  • 章节 ID
  • 划线文本
  • 划线范围
  • 创建时间
  • 更新时间

普通书和公众号都可以用这个接口获取划线。但公众号文章有一个特殊点:有些纯划线数据里不一定直接带文章标题,需要通过其他接口补全。


7. 个人想法 / 书评

接口作用
​/review/list/mine​获取个人想法、书评、评论

返回结果通常包含:

  • ​reviewId​
  • ​bookId​
  • ​content​
  • ​abstract​
  • ​range​
  • ​chapterUid​
  • ​createTime​
  • ​updateTime​

这个接口既用于普通书想法,也用于公众号文章想法。公众号文章里,refMpInfo​ 通常可以用于补充文章信息。


8. 单条想法详情

接口作用
​/review/single​获取单条想法 / 评论详情

这个接口在公众号同步里很有用。因为有些公众号文章只有划线,没有想法,此时 /book/bookmarklist​ 里的信息可能不足以拿到完整文章标题。通过 /review/single​ 可以补充 mpInfo​,从而完善文章标题。


9. 热门划线

接口作用
​/book/bestbookmarks​获取热门划线

这个接口用于获取一本书中被很多人划线的内容。常见返回字段包括:

  • ​items​
  • ​markText​
  • ​totalCount​
  • ​chapterUid​
  • ​range​
  • ​chapters​

其中:

字段说明
​markText​热门划线文本
​totalCount​有多少人划过
​chapterUid​所属章节
​range​划线范围

这个接口对应旧版里的热门划线能力,目前已经迁移到新接口模式中。


10. 搜索

接口作用
​/store/search​搜索书籍、公众号账号、公众号文章

这个接口可以用于查找微信读书里的书籍或公众号内容。返回结果通常包含:

  • 书籍 ID
  • 标题
  • 作者
  • 封面
  • 类型
  • 简介

11. 阅读统计

接口作用
​/readdata/detail​获取阅读统计
​/shelf/sync​辅助统计书架条目

​/readdata/detail​ 支持不同统计周期:

mode含义
​weekly​本周
​monthly​本月
​annually​本年
​overall​总计

返回结构里比较重要的字段包括:

字段说明
​totalReadTime​总阅读时长,单位秒
​dayAverageReadTime​日均阅读时长,单位秒
​readDays​阅读天数
​readTimes​按时间聚合的阅读时长
​readLongest​阅读时间较长的书
​readStat​阅读分布统计
​preferCategory​偏好分类

这里有几个细节:

  • ​readTimes​ 的 key 是时间戳字符串。
  • ​readTimes​ 的 value 是秒。
  • 周统计、月统计通常按日展示。
  • 年统计通常按月展示。
  • 总计通常按年展示。
  • ​preferCategory​ 里包含分类名、阅读时长、阅读数量,可以用来做雷达图之类的可视化。

四、当前不使用的接口

虽然接口能力列表里可能能看到更多接口,但当前同步主线暂时不使用下面这些:

接口当前状态
​/book/getprogress​暂不使用
​/book/underlines​暂不使用
​/book/readreviews​暂不使用

原因很简单:没有稳定需求时,不要为了“看起来能用”就盲目接入。每多一个接口,就多一份字段适配、异常处理和后续维护成本。


这次迁移的主要原因有几个。

1. 安全性更好

Cookie 本质上是登录态。让用户复制 Cookie,本身就比较敏感。<br>API Key 相对更适合作为接口访问凭证,边界更清楚,也更容易让用户理解:这是用于接口调用的 Key,而不是完整登录态。

2. 接口模式更稳定

旧 Web 接口依赖网页版结构。一旦微信读书前端或接口参数变化,插件就容易失效。<br>API Key 模式统一通过网关调用,接口边界更明确,维护起来更轻。

3. 代码结构更清晰

迁移后,数据来源统一成 API 接口。同步流程可以明确拆成:

  1. 获取书籍列表
  2. 获取书籍详情
  3. 获取章节
  4. 获取划线
  5. 获取想法
  6. 获取热门划线
  7. 渲染模板
  8. 写入笔记文档

这样比旧的 Cookie fallback 和多套数据来源混在一起更容易维护。

4. 更适合扩展

迁移到 API Key 之后,后面继续加功能会更自然,比如:

  • 阅读统计
  • 书架视图
  • 公众号文章同步
  • 新书确认
  • 热门划线
  • 本地文档匹配
  • 阅读偏好分析

这些功能都更适合建立在统一接口数据层上。

5. 用户体验更好

以前 Cookie 失效后,用户往往不知道哪里出了问题。<br>现在可以直接验证 API Key,失败就是 Key 问题,成功就进入同步流程,错误边界更清晰。


六、迁移后的能力变化

迁移后,原本旧接口里的主要能力基本都保留了:

能力当前状态
有笔记书籍已支持
普通书同步已支持
划线同步已支持
想法 / 书评同步已支持
热门划线已支持
书架数据已支持
公众号账号同步已支持
公众号文章标题补全已支持
阅读统计已支持
AI 总结官方 API 暂不提供,不再支持

其中,公众号同步和阅读统计是新接口模式下更适合扩展的部分。