一直在用的微信读书同步插件 obsidian-weread-plugin 和 微信读书笔记自动同步到 Notion 最近几天总是一直不成功,本来以为是自己的 cookie 失效了,但是我按照之前正确的方法写入 cookie 重新跑一次还是不行。甚至我发现我 Obsidian 里面的微信读书笔记同步插件也不行了,那基本就可以确定不是我个人的问题了。
既然自己暂时解决不了,那只能去相关 issue 取取经了。
问题分析
目前我收集到的相关讨论最多的帖子有如下两个
- [BUG]登录后,显示cookie失效,登录失败。 · Issue #355 · zhaohongxuan/obsidian-weread-plugin
- 更新cookie了还是报错,怎么回事,请求大佬们解答一下,感谢🙏 · Issue #88 · malinkang/weread2notion-pro
然后其中确实提供了很好的思路和手工方案,这里我把相关的可行方案罗列一下。
Merpyzf 微信读书移动端 API 目前已弃用基于 Cookie 的授权机制,不再与 Web 端共用同一套 Cookie 验证方式。移动端现在改为使用 skey 作为新的授权凭证,因此会失效。不过暂未找到 skey 的获取方式,可行的办法就弃用 https://i.weread.qq.com,直接换到 Web 端的 API
ZiGmaX809 至少对于阅读时间的api来说,区分了网页端和app的skey,只有app的skey能够访问,而且有效期不足2小时
ZiGmaX809 目前实测唯一能够同步的办法: 手机app利用抓包软件抓取请求头的skey 将skey填入obsidian库的/.obsidian/plugins/obsidian-weread-plugin/data.json中的‘wr_skey’的value中 重启obsidian(去除cookie缓存,使插件读取上面data.json中的cookie) 同步 ⚠️ skey并非长期有效,有效期仅有2小时不到
zhuxiaojian 目前可以使用类似 quanx 的工具动态获取 skey,然后再把获取的 skey 写入到自己的某个在线 kv 数据库,本地电脑获取在线 kv 数据库的报文,然后再同步替换
.obsidian/plugins/obsidian-weread-plugin/data.json
的 skey 字段。。。自测已经成功。 手机访问微信读书电脑即可自动同步最新 skey(电脑需要打洞)
ZiGmaX809 app中skey失效的话,会向https://i.weread.qq.com/login请求刷新skey,请求header会包含vid信息,body包含deviceId、deviceName等内容,而且这条请求经过一晚上测试重放继续有效
问题总结
上面的方法我都亲自试过,手工操作全部可行,总结起来原因就是移动端使用了一套独立的 skey 作为新的授权凭证,所以还用以前的方法使用浏览器的 cookie 自然会获取不到登录状态。解决方案就是如何自动获取移动端的 skey,并实时同步到三方插件需要填写的地方。
实践
obsidian-weread-plugin
先以我使用的 obsidian-weread-plugin
为例,先看下效果。

思路是用类似 QuantumX 此类工具的软件定时任务获取微信读书用户的 skey,然后用各种自动的方法写入到本地的 .obsidian/plugins/obsidian-weread-plugin/data.json
里 wr_skey
的 value 中。
我是写了个定时任务,N 小时跑一次,把获取的 skey 值通过调用本地电脑服务(电脑需要打洞,然后写个简单的文件写入功能)写入到本地文件里。
具体思路和相关代码
以 QuantumX 为例,抓包定时重放 https://i.weread.qq.com/login
,或者拦截 https://i.weread.qq.com
的 script-request-header
获取 $request.headers['skey']
过程中可能每个人的情况不一样,但是有了思路和解决方案具备一定抓包能力的小伙版基本都能解决这个问题。实在不方便做成自动,本身就不是高频需求,做成手动替换 skey 也可以。
weread2notion: 将微信读书划线同步到Notion
这个我也在同步使用,甚至延伸出了两个自用页面 微信读书笔记 Web 和 微信读书笔记 Notion。GitHub Actions 也是提示无法获取正确的 cookie。
那么基于上面的思路,解决方案也就出来了,核心还是替换 skey。这时只要把之前从浏览器里复制的 cookie 替换成新获取 skey 的值就行了。
看下替换后的效果,任务成功跑完。
总结
截止今天,目前社区上的解决方案都是基于 skey 的同步和写入来操作的,是不是有更好的方案,其实也可以等这些三方插件的作者更新,临时解决的话目前至少是有方案了。