paloma blog

NWエンジニアやってます。主に自宅環境のお遊びを書きます。Pythonもちょっと。タイトルは好きなカクテルから。

支出をこまめにチェックするためのスクレイピング系もろもろ(頓挫編)

コロナ中に定着してしまった自分の引きこもりを脱却すべく昨年から地元の飲み屋に通いつめ、その甲斐あって知り合いも増え一緒に遊びに行く機会が増えました。
それは良いことなのですがそのぶん出費も増えるわけです。

私はカード払いがほとんどなので月末の引き落とし日にまとめて家計簿ソフトに突っ込んで収支計算をやっているのですが、先月の支払いにビックリしてしまいました。
支払いが多かった月は翌月調整すればいいやと思っていましたが、飲み屋通いのルーティーンも増えたこともあり意外と修正が難しいです。(飲む量減らせよという意見はごもっとも)

完璧な自制が出来れば越したこと無いのですが、そもそも月一でしかウォッチしていないから調整が難しいんだと思います。

ここは週次でチェックできるようにしましょう。
もちろんブラウザを開いて確認なんて面倒なことはやらずにスクリプトを書いて解決です。

確認内容

確認するのは3つで

  1. 現金の支払い
  2. クレジット会社の明細
  3. PayPayの支払い

です。

1は家計簿ソフトのFireflyに使った都度突っ込んでいますのでこれを取ってくるだけ。
2と3はサイトにログインして明細を取ってこないと行けないのでスクレイピングですね。

最後に集計してファイルに書き出し。
サブ機ubuntuで仕掛けを作りますが、conkyに出すようにすれば目につくとこでウォッチできますね。

firefly iii

これは月次で明細をAPI経由で突っ込んでるので勝手知ったるものです。 APIのパスを変えるだけでOK。
スクリプトはこんな感じです。

start=$(date +"%Y-%m-01")
current=$(date +"%Y-%m-%d")

spent=$(curl -s -X GET http://10.0.1.1/api/v1/summary/basic -H "accept: application/json" \
-H "Authorization: Bearer $(cat '/xxx/firefly token.txt')" -H "Content-Type: application/json" \
-d "{\"start\":\"$start\", \"end\":\"$current\"}" | jq '."spent-in-JPY"."monetary_value"' | cut -d '.' -f 1 | sed -e 's/"//'  -e 's/-//')

echo $spent
❯ ./scripts/firefly_sum.sh
14660

3/14時点で現金払いだけで14660円使ってます。
まあいろいろお出かけしたからね。

conkyで拾うようにしてこんな感じになります。

これなら嫌でも目に入る。


ここから頓挫

クレジット明細

これはカード会社のサイトに行って現在の支払額の値を取ってきます。
スクレイピングと言いながらログイン処理等イチから書くのは大変なのでseleniumを使います。

とログインまでの処理を書いたのはよいのですが、selenium経由だとログインページから進まずタイムアウトします。
ブラウザにはnavigator.webdriverという自動制御のフラグのパラメータがあり、これでbotかどうかの判別になるようです。
なんかこれで止められている気がする。 しかしundefinedにするコマンド見つけたけど事象変わらず。他にも止めているパラメータがあるんでしょうか。うーむ、わからん。

案2

スクレイピングがだめならpyautoguiでブラウザ操作だ。
と思いましたがubuntu22.04ではマウスが動かず…

その手の記事を見るとWaylandではなくXorgを使えば動くとありました。
Xウィンドウのマネージャ変えてまで動かしたいかというと微妙です。

今はCLIでブラウザとURL指定してサイトに一発で飛ぶくらいしか対策がありませんね。

PayPay

PayPayもクレジット払いなのですが、紐付いているpaypayカードのサイトに行くとアプリで見ろと誘導されます。
これもだめか、スマホ都度見るしかないかな。
APIとかないかなあ。

これも実現できずと。

まとめ

結局成功したのはFireflyの支出額の取得のみでした。
まあクレジット系の支払いは増減あれどだいたい平均には落ち着くので現金支出のウォッチができるだけでもマシになったか。

今回は半分以上実現できず頓挫編にしましたがいつか解決を目指します。