2年以上に渡って、Kindleの購入履歴をGoogle App Scriptを使ってGmail経由で取得してSpreadsheetに書き込む仕組みを動かしていた。
HTMLメールを気合でパースして、ASINや作品名や購入時の価格を記録して暮らしていた。選択した行からはてなブログ用に貼り付ける文言の生成とかもやってるので、これが無いとこういうブログも書けない。
そんな中、7月下旬にある日メールの様子が変わった……
え〜〜〜〜〜、Kindleの注文確認メールに注文詳細入らなくなったので、メールをパースして購入履歴取ってたの不可能になった……!!! 助けてくれ〜〜〜〜〜〜〜!!!!!!! https://t.co/xiIWaVDpXs pic.twitter.com/a12uHWMrW1
— マジカルペンネくん🍝 (@pastak) 2021年7月28日
メールに載せないことでGoogle にデータを渡さないなるほどなぁ・・・気持ちは分かるが・・・それなら別の手段提供してくれ!!!!!!
— マジカルペンネくん🍝 (@pastak) 2021年7月28日
テキストメールに変更してみるも特に状況は変わらず。
Amazonから届くメール設定をHTMLメールからテキストメールに変更したら、とりあえずメール内に商品名は入るようになったけど、ASINはメール内に含まれてないな……
— マジカルペンネくん🍝 (@pastak) 2021年7月28日
Amazonの購入履歴をブラウザで開いて、適当なスニペットを実行すれば良いというのはそうであったが、購入履歴ページだけだと内訳が分からないのであった。
Amazonの購入履歴ページ開いてJS実行すれば良いと思っていたが、購入履歴スプシに購入金額も追加するようにしていた結果、購入履歴ページでは内訳が分からないので敗北した
— マジカルペンネくん🍝 (@pastak) 2021年8月2日
メール内からのリンクを踏むと毎回ログインさせられていたけど、購入履歴ページからのリクエストだとそのまま200でHTMLが返ってくることに気付いたので、購入履歴ページからfetch
で詳細ページのHTML取得して、メール用のパーサーに手を加えて加工して、TSVにするというのをやった。
注文内容を表示だとログイン毎回求められるので面倒だなと思ってたけど、領収書のページはログイン求められないし、HTMLの中に全部書いてあるので自動化チャンス出てきた。しかもメールをパースしてたときのコードが使いまわせそうな予感もする
— マジカルペンネくん🍝 (@pastak) 2021年8月2日
まぁ1回ログインするとその後数分はログイン無しで行けるのでまぁまぁ使えるようにはなった。とりあえず僕がもともとからSpreadsheetに書き込んでいた
- 注文ID
- 購入日
- タイトル
- URL
- ASIN
- 価格
は全部取れるようになった。
運が悪いとログイン求められるけど、運が良いとTSV作れるようになったので、gistに置いておきました https://t.co/tQNvMdKPuk
— マジカルペンネくん🍝 (@pastak) 2021年8月2日
言い訳をしておくと、GASがV8じゃない時代に書いたコードを使いまわしているので、もう少し諸々キレイにしたりは出来そう。一旦は動いてるのでヨシ。というわけでサイドバーの「最近買ったマンガ」のコーナーも更新されるようになりました
残りとしては
- これをTampermonkeyとかで呼び出しやすくする
- GASでWeb APIを作って、TSVをPOSTすると書き込めるようにする
とかするとまぁまぁ暮らしに1日1回押すボタンが増えるくらいで耐えられそう。なんか良いソリューション他にもあったら教えて下さい。