Gmail のメールからクレカ請求を Zaim へ自動入力
ひとまず楽天カードの情報を Zaim に突っ込むまでスクリプトにしてみた。Amazon のも入れれるようにしたい。
動作
初回起動時に OAuth を設定する必要がある
- 楽天カードの「売上情報」メールをパースして入力している
- 一度入力された情報は何度スクリプトを動かしても多重登録はされない
- Zaim 上のコメントに点字符号 [⠃⢶⠒] を埋めこんで管理している (Gmail 上の UID をエンコードしたもの)
- 同一日付内に該当メールから入力されたエントリが1件でもあれば無視するようになっている
- カテゴリ・ジャンルは自動で推測して入れてる (payment_guess.conf に定義あり)
Zaim の API のメモ
Zaim の OAuth は oob (out-of-band いわゆるクライアントアプリケーション認証) に対応していない。callback に HTTP HTTPS のURIしか受け付けないので http://oob/ とか適当に指定しておくしかない。それで認証すると http://oob/ から始まるリダクレクト先URLが画面に表示されるので、クエリパラメータを頑張ってコピペしてやる必要がある。
それと Android 版の Zaim しか使っていないと気付かないんだけど、Zaim にはアカウント(口座のほうの意味)機能があって、現金・クレカ・PASMOとかを別々に管理できる。アプリだけを使っているとアーキテクチャを理解できないのでウェブ版を設定項目を含め一通り見たほうが良い。
最初、/v2/{account,category,genre} というデフォルトのものを返すAPIを使っていたが、これらのIDだと POST /v2/home/money/payment は、成功はしつつも、バグってしまう (ウェブ版で 500 がでる)。結局、/v2/home/{account,category,genre} を使うのが正しいみたいだ。(デフォルトを返すAPIはどういうとき使うのを想定してるんだろう)
また /v2/home/money/payment に place を指定すると {"error":true,"message":"This consumer key does not have a permission for the action.","extra_message":null}
が返ってきてしまう。何かが悪いっぽいけどどうしたらいいかわかってないので、ひとまず指定しないようにした。
経緯
Google Spreadsheet で家計簿をつけていたが、いかんせん意識が低くなってくるとスプレッドシートを見る気がなくなるという問題があった。また、結構頻繁に辻褄あわせをする必要があるため面倒くさい。
基本的現状の運用だと
- 現金で「消費したときに記録する」という行動の習慣化はできている
- 今月あといくら使えるか、今週あといくら使えるか、などをうまく可視化できていない
みたいな感じになっている。それらを解決するために自分でウェブアプリを書いていたんだけど、最近は Zaim の Android アプリも普通に便利に使える感じなので、自分で作るより ASP なものを使ったほうがメリットが多そうと判断した。
本当は、直接 Google App Script から Zaim に OAuth を繋ぎたかったんだけど、どうしても OAuth エラーになって進まないので、諦めて Perl で書きなおした。
Perl で書きなおす途中でGmail を読むのにハマったり、上記の通り Zaim の API で結構ハマったりした。
✖
写真を撮っていると気付くことは多い。人の目には回りの風景が思いのほか写り込んでるとか、太陽の光の圧倒的強さとか