太陽がまぶしかったから

C'etait a cause du soleil.

Amazon Kindle の所持済み書籍のASIN一覧ファイルを Kindle for Mac のキャッシュファイルから生成する

蔵書の苦しみ (光文社新書)

Kindle の蔵書一覧ファイルが欲しい

 Amazon Kindle大規模なセールをやっているのだけど、このようなセールがあると既に持っている電子書籍を除外して検索したいと思うことがある。数千冊を所持していると買ったか買っていないかの記憶が朧げであるし、持っている書籍の詳細ページを開いても時間の無駄となる。

 それ以外にもいくつかのブロックしたい要素があるが、Amazonの検索クエリでサポートされているわけではないのフィルターを独自に作る必要があり、その元データとしてAmazon Kindle の所持済み書籍一覧ファイルが必要となる。

 Kindle の蔵書一覧を取得する方法として上記が紹介されていたが、そのコメントで Kindle for Mac のキャッシュを使う方法が提案されていたため、その方式で Python での実装を行った。

Kindle の蔵書一覧ファイルを生成するスクリプト

 work ディレクトリにファイルを KindleSyncMetadataCache.xml をコピーしてきてきて、 docker-compose で work をコンテナにマウントした状態で処理を実行。Windowsの場合もコピー元ファイルのパスを書き換えることで実行可能だ。

        asin_set = set()
        for event, el in etree.iterparse(settings.kindle_xml):
            if event =='end' and el.tag == 'ASIN':
                asin_set.add(el.text)

xml.etree.ElementTreeXMLをパースして ASIN タグが閉じられたら配下のテキストを SET に格納していきファイル出力。必要に応じてタイトルなども出力できるが、フィルターで利用するには ASIN リストだけがあれば十分なので最低限の処理としている。

所持済み書籍のASIN一覧ファイルがあると捗る

ASINは「Amazon Standard Identification Number」の略で、Amazonグループが取り扱う、書籍以外の商品を識別する10けたの番号です。CD、DVD、ビデオ、ソフトウェア、ゲームな ど、書籍以外の商品の詳細ページに記載されています。

 そもそもASINとは、Amazon内で利用される書籍に限らない識別番号。書籍においてはISBNを利用するのが国際標準だが、Kindle書籍においては電子版独特の番号になっているためASINを利用することで確実に識別できる。

蔵書の ASIN 一覧ファイルがあると嬉しい

B00932MVK8
B00932MWAW
B00932MX88
B00932OTVC

 生成した ASIN 一覧ファイルを利用することで、検索結果のASINと蔵書のASINリストをマッチングさせてすでに存在しているASINの商品は表示対象から外すことが可能となる。

 こちらのツールは解説記事は別途書くが、購入可能性の著しく低い電子書籍を判定するスコアの算定に「所持済み」であることが最も寄与するようになっている。電子書籍においては「もう一度購入する」ことがないため所持済みリストは「いらないものリスト」そのものになるのだ。

 他にも https://www.amazon.co.jp/dp/B00932MVK8 といったURLで商品詳細ページを開くことができるので所持済み商品のリンク集を生成するといった活用も可能となる。

 Amazon に認証して所持済み書籍の一覧ファイルを取得する公式の方法はないし、クローリングやスクレイピングを毎回するのも重すぎる。今のところは KindleSyncMetadataCache.xml をコピーしてきて変換するのがてっとり早い。