使用Obsidian Dataview搭建微信读书阅读主页
之前在Weread的Wiki中介绍过使用Dataview和Minimal主题管理微信读书的方法:使用Dataview进行书籍管理 ,随着Weread插件的不断迭代,现在增加了不少元数据,比如,开始阅读日期:readingDate,完成阅读日期:finishedDate ,阅读进度:progress等,且不需要手动添加readYear属性了,有了这些新的数据就可以更好的汇总读书数据了。 使用效果如图:
之前在Weread的Wiki中介绍过使用Dataview和Minimal主题管理微信读书的方法:使用Dataview进行书籍管理 ,随着Weread插件的不断迭代,现在增加了不少元数据,比如,开始阅读日期:readingDate,完成阅读日期:finishedDate ,阅读进度:progress等,且不需要手动添加readYear属性了,有了这些新的数据就可以更好的汇总读书数据了。 使用效果如图:
个人认为笔记的本质是: 让思考继续发生。记笔记不是目的,是为了更好的服务于思考,但是大脑不善于存储和检索,因此才要记笔记,本质是上是给大脑减压,记笔记的各种方法也都是为了让大脑更好的思考。大脑本能是躲避思考的,所以要尽可能简化记笔记的流程,形成习惯。 由于我对卡片笔记的理解还不够深刻,也还在探索中,因此这篇文章旨在分享我的一些心得和体会,每个人的习惯不一样,因此笔记方法因人而已,别人的方法不一定是适合自己的,每个人都要探索形成自己的笔记方法。 我的笔记原则
一直使用Templater的Quote功能,使用方法也很简单,直接使用<% tp.web.daily_quote() %> ,但是默认调用的接口是:https://api.quotable.io, 返回的英文的名言,如果想要中文的名言或者每日诗词等就没法做到。 好在Templater的作者还留了一个口子:用户脚本,用户可以自己按照CommomJS的规范来编写自己的脚本,文档参考这里:Templater User function,这里需要注意的是:不支持第三方node module!!
背景前几天写了个Obsidian微信读书的插件GitHub - zhaohongxuan/obsidian-weread-plugin,在B站上发了一个视频学了3天typescript写了一个微信读书的Obsidian插件_哔哩哔哩,最初版本是需要手动从控制台复制Cookie设置到设置界面才能使用的,很多B站网友给我私信说获取Cookie有问题,虽然在readme里已经写的很清楚了,但是对小白来说可能这也是个比较困难的步骤,所以我在想是否可以实现二维码扫码登录呢? 思路因为Obsidian其实也是个浏览器,所以理论上是可以打开浏览器窗口来展示扫码登录界面的。只要load到微信读书的扫码登录界面,然后intercept到请求的header拿到Cookie就可以了,然后后续只要被动刷新Cookie有效期即可。 所以问题就被分成了三部分: 展示二维码扫码框 intercept 登录操作获取到Cookie 将Cookie设置到setting 中
HTTP Cookie(也叫 Web Cookie 或浏览器 Cookie)是服务器发送到用户浏览器并保存在本地的一小块数据,它会在浏览器下次向同一服务器再发起请求时被携带并发送到服务器上。通常,它用于告知服务端两个请求是否来自同一浏览器,如保持用户的登录状态。Cookie 使基于无状态的HTTP协议记录稳定的状态信息成为了可能。 分析Cookie登录之前在进入到weread.qq.com的时候,就已经存在Cookie信息了,只不过一部分的Cookie信息是空的,下面是扫码登录之前的Cookie信息:
问题产生最近学了Typescript写了一个Obsidian微信读书的插件Obsidian Weread Plugin,在写插件的过程中需要跨域请求r.qq.com来获取微信读书的书摘和想法。 使用axios在vscode中运行api测试的时候是好的,在obsidian中产生了CORS的问题,这是因为Obsidian本质上是一个Electron的app,本质上也是一个浏览器,所以才会出现跨域问题。 关于CORS的文章已经很多了,推荐参考Mozila CORS,作为一个后端开发,CORS 并不陌生,,对于Spring全家桶用户来说,就是几行@CrossOrigin的配置问题,但是这一篇文章提供的是前端视角来解决CORS的思路,也就是说对服务端不可控时如何处理? 解决思路我们都知道CORS本身只是对浏览器才会限制,所以可以跳出来使用代理服务器来解决问题,这里刚开始,我建立了一个Springboot的Web项目专门转发来自Obsidian的请求,将请求转发到r.qq.com,这样能够正常工作,但是也印出来了另外一个问题: 每次使用Weread插件的时候,我都需要把SpringBoot项目启动起来,显然不够优雅。特别是后面插件上架了Obsidian的社区市场之后肯定更不行,你不可能要求用户自己再额外下载一个服务器来运行。 那么是否可以找到一个可以在前端使用的middle server呢? 答案是可以!那就是http-proxy-middleware