Kindle書籍すべてブクログ管理する
ブクログは最高なウェブサービスのひとつです。紙書籍はスマホアプリでバーコードスキャンしたら棚に登録できるし、Kindle書籍もブックマークレットがあったり、ブクログウェブサイトで書籍を探して登録できます。
ただどうにも人力頼みが多く、登録漏れることがありイラつきます。Kindleで購入したら抜け漏れなく登録したいし、過去に購入した書籍も全部登録したい。一冊の例外もなく、すべてブクログに登録したい。
ブクログ登録の完全自動化には至らずですが、だいぶマシな形にできましたので記事にします。
構成
こんな雰囲気でバケツリレーして、Kindle書籍をブクログに登録します。
セットアップ
以下シェルスクリプトとPythonスクリプトを、テキトーな場所に転がしてください。
以下は例で ~/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スクリプトで、間はテキストで情報が出てきます。利用される方の好みにカスタマイズしていただき、読書を満喫されるのがよいと思います。
参考
-
http://tateren.hateblo.jp/entry/2016/10/03/025425
- アマゾンからのメールをパースしてブクログに登録する画期的な手法。でした。アマゾンからのメールが改変されたため使えなくなった
- 今回の booklog_add_books.py の実装の参考にさせていただきました
-
https://qiita.com/taka_hira/items/8a9181c0733de2c9f8ee#comment-b9071ac2bc7e91f482f6
- Kindle for Windows なら XML が出るぞとの参考コメント
- Mac でも探したら同様に XML が出てるぞとの参考コメント
-
https://qiita.com/sasasin/items/fcef210fa49ff8d54e46
- 私の昔の記事。なぜもっと頑張らなかったのかわかりませんが、手作業でオラーーッて登録してたようです
Discussion