GWだし何か作ろうということで、銀行の口座残高をスクレイピングしてSlackに通知というのをやってみた。
ソースコード
koirand/slack-balance: Get bank balance and send to slack
自分はMUFGをメインバンクとして使っているので、MUFGダイレクトのサイトにログインして口座残高を取得するように作ってみたものの、どうせなら他の口座の残高も見たいなあと作ってから気づいた。そこでMoneyForwardの口座ページにアクセスして、MoneyForwardと連携している口座残高の取得もできるようにした。ただ、MoneyForwardの残高はリアルタイムではないので、MUFGの処理は残しておくことにした。
chromedp
今どきSelenium使うのもいけてないので、chromedpを使うことにした。chromedpはChrome DevTools Protocolを使ってChromeを自動操作するツール。Go言語でサクッと書ける。
chromedp/chromedp: A faster, simpler way to drive browsers supporting the Chrome DevTools Protocol.
Exampleを見るとだいたいやり方がわかるかと。
chromedp/examples: chromedp code examples.
Exampleのevalを見ると、
chromedp.Evaluate(`Object.keys(window);`, &res)
のように、どうやら任意のJSの戻り値を取得することもできる模様。 また、Exampleのheadersを実行するとリクエストヘッダが見れる。Macで実行したらUserAgentは以下となっていた。
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_4) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/74.0.3729.108 Safari/537.36"
HeadlessChromeでアクセスしていることがサイト運営者には分かるようなので一応注意されたし。
Slack Incoming Webhook
Slackへの通知はIncoming Webhooksを使って実装した。実装といってもWebサイト上でWebhook URLを発行して、そこにPOSTすれば良いだけなので拍子抜けするほど簡単だった。
こんな感じで通知できてる。良い。