Kindle 读书笔记自动导出

2024年6月17日 · 1123 字 · 3 分钟

kindle

想把 Kindle 的读书笔记自动同步到家里的树莓派上,方便电视机看板读取和显示。一种简单的实现方式,定时执行脚本,将 My Clippings.txt 的内容通过 curl post 到树莓派服务器上。

1. kindle 越狱

各型号 kindle 的越狱方法,可以参考网站书伴1

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 任务

  1. ssh 连上 kindle。
  2. 执行命令 mntroot rw,使 rootfs 可写。
  3. 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.txtbug。阅读时删除高亮,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 脚本。