Kindle 读书笔记自动导出
2024年6月17日 · 1123 字 · 3 分钟
想把 Kindle 的读书笔记自动同步到家里的树莓派上,方便电视机看板读取和显示。一种简单的实现方式,定时执行脚本,将 My Clippings.txt
的内容通过 curl post 到树莓派服务器上。
1. kindle 越狱
2. 安装 USBNetwork
USBNetwork 可以让我们通过 WiFi 直接连接到 Kindle 并对其进行传送文件、管理等操作,就像管理 FTP 一样,这样就可避免为了管理文件反复在 Kindle 上插拔 USB 数据线。
3. 编写推送脚本 /mnt/base-us/post.sh
#!/bin/bash
echo "$(date '+%Y-%m-%d-%H:%M:%S')"
ip=$(ifconfig | grep -Eo 'inet (addr:)?([0-9]*\.){3}[0-9]*' | grep -Eo '([0-9]*\.){3}[0-9]*' | grep -v '127.0.0.1' | head -n 1)
pre=$(echo $ip | cut -d '.' -f 1)
if [[ $pre == 192 ]]; then
echo "IP地址是 $ip,执行curl命令..."
curl -X POST --data-binary @'/mnt/base-us/documents/My Clippings.txt' http://192.168.1.66/add_book_notes -H "Content-Type: text/plain"
else
echo "IP $ip地址不是以192.168开头,不执行curl命令。"
fi
上述脚本增加了 ip 检测,排除单位 ip 地址 10.0 段。
4. 增加 crontab 任务
- ssh 连上 kindle。
- 执行命令
mntroot rw
,使 rootfs 可写。 vi
/etc/crontab/root
,增加下列任务,每 5 分钟执行一次。
*/5 * * * * bash /mnt/base-us/post.sh >> /mnt/base-us/post.log
5. 服务端简单代码
from flask import Flask, request
app = Flask(__name__)
@app.route('/kindle_highlights', methods=['POST'])
def all_highlights():
data = request.data.decode('utf-8')
return 'Received data: {}'.format(data)
if __name__ == '__main__':
app.run(debug=True)
6. 完善 2024-06-20
在使用过程中,发现 /mnt/base-us/documents/My Clippings.txt
有 bug。阅读时删除高亮,My Clippings.txt
文件中,记录不会删除。修改高亮(前后增加内容)时,My Clippings.txt
文件中,不是修改记录,而是新增。比如下面这条高亮,操作过程为:新建->删除->新建->修改。最终本应只有一处高亮,但是My Clippings.txt
文件中有三条记录:
==========
忏悔录 ([法]卢梭著)
- 您在位置 #481-481的标注 | 添加于 2024年6月20日星期四 下午9:38:14
所有温柔、亲切、平和的感情,构成了这个生活方式的基调。
==========
忏悔录 ([法]卢梭著)
- 您在位置 #481-481的标注 | 添加于 2024年6月20日星期四 下午9:38:56
构成了这个生活方式的基调。
==========
忏悔录 ([法]卢梭著)
- 您在位置 #481-481的标注 | 添加于 2024年6月20日星期四 下午9:40:06
所有温柔、亲切、平和的感情,构成了这个生活方式的基调。
如何解决这个问题,我们可以用 忏悔录.sdr 目录下的 忏悔录.azw3r 文件,这个文件里面,会记录并且正确修改高亮。但是这个文件里,只记录高亮的位置和时间,不记录高亮的内容。需要我们结合之前My Clippings.txt
文件,取两文件中时间相同的高亮。
xxxx.azw3f 和 xxxx.azw3r 是二进制文件,需要按照特定的格式解析,网上有开源的解析代码和使用说明krds.py.zip2。
结合两个文件,我们最终得到正确的高亮信息:
book : 忏悔录
totalTime : 2h 4m 58s 559ms 0.08089693833548928
highlight : 75640 2024-06-20 21:40:06 所有温柔、亲切、平和的感情,构成了这个生活方式的基调。
解析二进制文件需要用到 python,所以又往 kindle 里面装了 python3.9。之前是定时执行 bash 脚本,现在的改成定时执行 python 脚本。