📚

Kindle書籍すべてブクログで管理する2023年版

2023/10/09に公開

過去こんな記事を書いてました。しばらく時間が経過し、Kindleからの取り方も、ブクログへのPOSTもブッ壊れたので、しぶしぶアプデ情報を整理しました。
https://zenn.dev/sasasin/articles/aa9fad38550440

旧Kindleアプリ「Kindle Classic」では書誌情報をXMLで管理しており、↑の手法で取得可能でした。
https://apps.apple.com/jp/app/kindle-classic/id405399194

新Kindleアプリ「Kindle」では管理方式が変化したらしく、XMLはどこにも見当たらず、どうにか調べたのが、この記事です。
https://apps.apple.com/jp/app/kindle/id302584613

執筆時点 2023/10/09 時点の情報です。

macOSの新Kindleアプリは多くの情報を SQLite で管理しているらしい

Kindle を起動し macOS のアプリ「アクティビティモニタ」で Kindle プロセスの「開いているファイルとポート」をコピーしてファイルに出して、観察しつつ、見てもしゃーないのを除外していきます。フォントとか画像とか。ファイル名が完全にランダムっぽいのとか。

$ mkdir tmp/20231009-kindle
$ cd tmp/20231009-kindle
$ pbpaste > process-opened-files.txt
$ cat process-opened-files.txt \
| sort -u
$ cat kindle-opened-files.txt | sort -u | grep -Ev '\.(ttf|otf|png)|(/private/var/db/oah/|/usr/share/|/System/Library/)'

どうやら ~/Library/Containers/com.amazon.Lassen にユーザー毎のデータが保持されてそうなことが見えて、さらに SQLite 形式っぽいファイルがKindleアプリ内の用途毎に複数ありそうなことが見えます。

$ find ~/Library/Containers/com.amazon.Lassen -type f \
| grep sqlite

そのなかで、いかにも書誌情報を持ってそうなファイル名である BookData.sqlite を、ER図に出してみます。 k1LoW 氏の https://github.com/k1LoW/tbls で一瞬で出せます。

$ brew install k1LoW/tap/tbls
$ tbls doc sqlite://$HOME/Library/Containers/com.amazon.Lassen/Data/Library/Protected/BookData.sqlite

各テーブルに実際に入ってるデータは、TablePlus で ~/Library/Containers/com.amazon.Lassen/Data/Library/Protected/BookData.sqlite を開いて観察しました。

なんだか zbook テーブルの行数と、持ってる本の数が一致してそう。ASINも入ってる。が、変な文字列が頭に付いてるな。意味はわからないけど。などなど。

ブクログのまとめて登録画面

以前は Python とか cURL で POST したら投入できてたのですが、現在では投入できなくなっており、諦めました。

結論

Kindleアプリを起動して Cmd+r で手元の書誌情報を最新化して、こんなクエリで ASIN をガガッと取れました。

$ sqlite3 ~/Library/Containers/com.amazon.Lassen/Data/Library/Protected/BookData.sqlite \
'SELECT substring(zbook.zbookid, 3, 10) FROM zbook ORDER BY zbook.zrawlastaccesstime DESC LIMIT 100' \
| pbcopy

あとは ブクログのまとめて登録画面 にペタッとしたら登録できます。

Discussion