📚

Kindle書籍すべてブクログ管理する

2022/04/18に公開

ブクログは最高なウェブサービスのひとつです。紙書籍はスマホアプリでバーコードスキャンしたら棚に登録できるし、Kindle書籍もブックマークレットがあったり、ブクログウェブサイトで書籍を探して登録できます。

ただどうにも人力頼みが多く、登録漏れることがありイラつきます。Kindleで購入したら抜け漏れなく登録したいし、過去に購入した書籍も全部登録したい。一冊の例外もなく、すべてブクログに登録したい。

ブクログ登録の完全自動化には至らずですが、だいぶマシな形にできましたので記事にします。

構成

こんな雰囲気でバケツリレーして、Kindle書籍をブクログに登録します。

セットアップ

以下シェルスクリプトとPythonスクリプトを、テキトーな場所に転がしてください。

https://gist.github.com/sasasin/673490aacfbf0e986ec1def170abfd51
https://gist.github.com/sasasin/568286332ae4ee0ee9beff20534f7e7d

以下は例で ~/bin に置いてます。

cd ~/bin
wget https://gist.githubusercontent.com/sasasin/673490aacfbf0e986ec1def170abfd51/raw/4c3716bd29c1369b3b6795a33033c031104e6df0/get_asin_from_mac_kindle_xml.sh
wget https://gist.githubusercontent.com/sasasin/568286332ae4ee0ee9beff20534f7e7d/raw/d10b1212925417ddeec9d51e44bd962a0522f4bc/booklog_add_books.py
chmod +x get_asin_from_mac_kindle_xml.sh

動作には以下が必要です。python は 3.8 以上くらいなら、たぶん何でも大丈夫です。

brew install docker --cask
brew install python@3.10
pip3 install requests

加えて、Mac版Kindleアプリが必要です。

Kindleの蔵書XMLファイルを最新化する

Mac版Kindleアプリは、 ~/Library/Containers/com.amazon.Kindle/Data/Library/Application\ Support/Kindle/Cache/KindleSyncMetadataCache.xml に、蔵書XMLファイルとでも呼ぶべきものを生成しています。Windows版は別のパスに出るらしいです。

Mac版Kindleアプリを起動し、くるくるを押すと、たぶんアマゾンのサーバーと通信して、最新化されます。ただ正確な挙動がわかりませんが、蔵書XMLファイルが更新されないことがあるようです。もういっかい、Mac版Kindleアプリを再起動し、くるくるを押して、Kindleアプリを終了させると、かなり確かに蔵書XMLファイルが更新されます。

これも自動化したいですが、どうやれますかね、Apple Script とかで頑張るしかないのか。

購入済みKindle書籍のASINを全部出す

Kindleの蔵書XMLファイルをパースすると、ASINと購入年月日を抽出できます。

以下コマンドで、購入年月日の古い順に出ます。tailで取れば最近購入した書籍です。

~/bin/get_asin_from_mac_kindle_xml.sh > asin.txt
tail -n10 asin.txt

内部では XML ファイルを jq っぽくパースする xq というコマンドを使ってます。xq のインストールは癖が強いようで、Macへのインストールなど模索しましたが、諦めて Docker Hub で見つけたコンテナイメージを使ってます。

ブクログに登録する

ブクログにはASINをまとめて登録するページがあります。

そこに投げ込むpythonスクリプトです。環境変数でブクログIDとパスワードを設定しておく必要があります。たとえばこのように使います。

export BOOKLOG_ACCOUNT=xxxxxxxxxxx
export BOOKLOG_PASSWORD=yyyyyyyyyyyyy
cat asin.txt | tail -n10 | xargs python3 ~/bin/booklog_add_books.py 

執筆時点では1回に50冊だけ登録できるので、pythonスクリプト内で50冊ずつに分割して登録させています。

オリジナルは http://tateren.hateblo.jp/entry/2016/10/03/025425 です。これを参考に、私がいくらか慣れてる python で再実装しました。どうにも通らないところは、ブクログをブラウザで操作したときのを、ブラウザのデベロッパーツールで curl コマンドを取ってきて、 https://curlconverter.com/ で python に変換して、パラメータ名など調整しました。

今後の購入分を登録していく

以上を組み合わせると、たとえば最近購入した10冊くらいを、以下のようにブクログに登録できます。冊数の塩梅は、どのくらいの周期でブクログに登録したいかで調整してください。

export BOOKLOG_ACCOUNT=xxxxxxxxxxx
export BOOKLOG_PASSWORD=yyyyyyyyyyyyy
~/bin/get_asin_from_mac_kindle_xml.sh \
| tail -n10 \
| xargs python3 ~/bin/booklog_add_books.py 

過去の購入分を全部登録する

間の tail を外せば全件になり、つまり過去の購入分すべてを登録できます。100冊くらいならともかく、数千冊、数万冊を投げたらブクログが大変なことになりそうですので、 booklog_add_books.py では50冊毎に30秒の休憩を挟ませています。

export BOOKLOG_ACCOUNT=xxxxxxxxxxx
export BOOKLOG_PASSWORD=yyyyyyyyyyyyy
~/bin/get_asin_from_mac_kindle_xml.sh \
| xargs python3 ~/bin/booklog_add_books.py 

どう使うか

以上は一例です。最初はXMLですし、シェルスクリプトとpythonスクリプトで、間はテキストで情報が出てきます。利用される方の好みにカスタマイズしていただき、読書を満喫されるのがよいと思います。

参考

Discussion