📚
Mac版Kindleの書籍をブクログに登録する
Kindle で読んでいた書籍の情報をブクログに連携したかったので、こちらの記事を参考に少しカスタマイズしてみました。
方針
Kindle には購入した書籍以外にも自分でインポートした PDF なども存在しています。書籍の種類も一般書籍と漫画を含んでいます。
また、過去に何度か手作業でブクログに登録しており、重複して登録することは避けたいです。(ブクログでは紙の本と電子書籍を区別して登録できるため)
そのため以下のような方針を立てました。
- 漫画は除外する
- 自分でインポートした PDF などは除外する
- 登録する書籍は目視で選別する
SQL を調整する
データを確認していたところ以下の特徴があるようでした。
- 漫画の場合
zbook.ZCONTENTTAGS
に;MANGA
という値が入っている - 自前のインポートした PDF などの場合
zboo.ZBOOKID
の最初の 3 文字がA:B
になっていない - おそらく表示名が
ZDISPLAYTITLE
になっている - 日付が
ZRAWLASTACCESSTIME
で取得できる
これらを踏まえて、以下のような SQL を組み立てました。
SELECT
datetime(ZRAWLASTACCESSTIME, 'unixepoch') AS `日付`,
substring(ZBOOKID, 3, 10) AS ASIN,
ZDISPLAYTITLE AS `タイトル`
FROM zbook
WHERE ZCONTENTTAGS != ";MANGA"
AND ZBOOKID LIKE 'A:B%'
ORDER BY ZRAWLASTACCESSTIME
;
実行結果は、目視と選択が行いやすいようにしました。
- 日付(これは Kindle 上で開いた日時のようです)
- ASIN(
ZBOOKID
の 3 文字目から取得したモノ) - タイトル
この SQL は sqlite3
コマンドに渡して実行します。
fzf を利用してターミナル上で選択可能にする
sqlite3
の処理の結果をパイプで受け取りつつ、一覧から自分で登録したい書籍を選ぶようにします。fzf
を利用すると実現可能です。
fzf
では以下のオプションを設定することにしました。
-
--multi
: 複数選択ができるようになる -
--tac
: ターミナル上の出力が逆順にする
--tac
はちょっとややこしいです。fzf
は、デフォルトではパイプで受け取った内容を逆にして出力するので、その逆、つまり受け取った内容そのままで出力します。
実際に実行するコマンド
最終的なコマンドは以下のようになりました。欲しいのは ASIN
なので cut
も利用しています。
最終調整したコマンド
db=~/Library/Containers/com.amazon.Lassen/Data/Library/Protected/BookData.sqlite
sqlite3 $db <<'SQL' | fzf --multi --tac | cut -d, -f2 | pbcopy
.mode csv
SELECT
datetime(ZRAWLASTACCESSTIME, 'unixepoch') AS `日付`,
substring(ZBOOKID, 3, 10) AS ASIN,
ZDISPLAYTITLE AS `タイトル`
FROM zbook
WHERE ZCONTENTTAGS != ";MANGA"
AND ZBOOKID LIKE 'A:B%'
ORDER BY ZRAWLASTACCESSTIME
;
SQL
終わりに
実際にやってみると、個人出版の漫画を除外できていませんでしたが、 fzf
を経由するので、選択しなければ良いだけでした。
コピーした ASIN
はブクログの まとめて登録 (ISBN) に貼り付けて登録できます。
一度に登録できるのは 100 件までのようです。
Discussion