微信读书笔记导入 flomo
Kindle to Flomo 现在已经支持微信读书笔记的导入啦。我现在想着要不要给它换个名字,因为它现在已经支持 Kindle、Apple Books、微信读书三种导入方式了。这个后面再说吧。
远离其实就是访问微信读书网页版,然后扫码登录,获取到 cookie,之后就模拟请求腾讯那边的接口就可以了。因为要获取cookie,模拟请求,所以这个功能在纯浏览器端肯定是无法实现的,因为存在跨域等限制。但我这个应用还有 electron 版本,有客户端就好办很多。
经过一番查询,找到 electron 捕获应用内所有请求,iframe 中的请求当然也包含在内:
// 下面两种引入方式只需选择一种就行,看在什么进程中使用
// 主进程
const { session } = require('electron')
// 渲染进程
const { session } = require('electron').remote
// 过滤器,只捕获此域名下的请求
const filter = {
urls: ['https://weread.qq.com/*']
}
session.defaultSession.webRequest.onBeforeSendHeaders(filter,(details, callback) => {
console.log(details.requestHeaders.Cookie)
callback(details)
})
相关接口:
// 获取某本书你的全部笔记
export const get_bookmarklist = bookId => {
return axios({
method: 'get',
url: '/book/bookmarklist',
headers,
params: {
bookId
}
})
}
// 获取某一本书的热门划线
export const get_bestbookmarks = bookId => {
return axios({
method: 'get',
url: '/book/bestbookmarks',
headers,
params: {
bookId
}
})
}
// 获取书架上的书籍列表
export const get_bookshelf = (cookie) => {
return axios({
method: 'get',
url: '/shelf/friendCommon',
headers,
params: {
userVid: getUid(cookie)
}
})
}
// 获取你的所有有笔记本书单
export const get_notebooklist = () => {
return axios({
method: 'get',
headers,
url: '/user/notebooks'
})
}
// 获取某本书的详情
export const get_bookinfo = bookId => {
return axios({
method: 'get',
url: '/book/info',
headers,
params: {
bookId
}
})
}
// 获取某本书的批注
export const get_reviewlist = (params, cookie) => {
return axios({
method: 'get',
url: '/web/review/list',
baseURL: 'https://weread.qq.com',
headers,
params: {
userVid: getUid(cookie),
...params
}
})
}
主要的逻辑其实就是:
- 用户点击导入按钮
- 通过 iframe 访问 https://weread.qq.com/#login
- 获取 cookie,请求图书列表
- 如果用户为登录,那么请求就会失败,此时显示 iframe 内容,iframe 中应该有个登录二维码
- 用户扫码登录,重新请求接口,进行后续请求
参考: