GAS

GASでマネーフォワードをスクレイピングして資産情報をLINEとSlackに送信する

GASでマネーフォワードをスクレイピングして資産情報をLINEとSlackに送信するGAS
スポンサーリンク
ツールで出来ること!
  • GASでマネーフォワードにログインできる!
  • 資産情報の表をJSONで取得できる!
  • そのJSONをGoogleドライブに保存できる!
  • 資産情報はLINEとSlackに送れる!

ツールの全体像です。

くら
くら

コードだけ見れればいい!って方はこちらをどうぞ!

スポンサーリンク

マネーフォワードにログインする

[GET]TOPページを表示

TOPページ にて moneybook_session を取得します。

(いろいろ試した結果、最初に moneybook_session が必要みたいでした。)

[GET]ログインページを表示

ログインページを表示
ログインページを表示
ログインページを表示2
ログインページを表示

TOPページ で取得した moneybook_sessionログインページ にアクセスします。

レスポンスに新しい moneybook_session が取得されます。

ステータスが 301なのでリダイレクトされます。

[GET]リダイレクト①(ログイン前)

リダイレクト①(ログイン前)
リダイレクト①(ログイン前)

ログインページ を表示すると、 mfid にリダイレクトされます。

再度 moneybook_session を取得します。

ステータスが 302なのでリダイレクトされます。

[GET]リダイレクト②(ログイン前)

リダイレクト②(ログイン前)
リダイレクト②(ログイン前)

mfid にアクセスすると、 authorize にリダイレクトされます。

ステータスが 302なのでリダイレクトされます。

[GET]リダイレクト③(ログイン前)

リダイレクト③(ログイン前)
リダイレクト③(ログイン前)

authorize にアクセスすると、 sign_in にリダイレクトされます。

ここではログインに必要な last_used_application 取得します。

ステータスが 302なのでリダイレクトされます。

[GET]リダイレクト④(ログイン前)

sign_in にアクセスすると、 sign_in/new にリダイレクトされます。

ここではログインに必要な mfid_session , authenticity_token , authorizationParams を取得します。

ステータスが 200なのでここまでです。

くら
くら

ここまでが、ログインボタン押したときの通信の流れです!

次はログイン情報を送信します!

[POST]ログイン情報を送信

くら
くら

ここまでで取得した情報とログイン情報を送信します。

[POST]ログイン情報を送信
[POST]ログイン情報を送信

ここでは次の認証に必要な sih , mfid_sessionを取得します。

ステータスが 302なのでリダイレクトされます。

[GET]リダイレクト①(ログイン後)

リダイレクト①(ログイン後)
リダイレクト①(ログイン後)

ログイン情報を送信すると、 authorize にリダイレクトされます。

ステータスが 302なのでリダイレクトされます。

[GET]リダイレクト②(ログイン後)

リダイレクト②(ログイン後)
リダイレクト②(ログイン後)

authorize にアクセスすると、 callback にリダイレクトされます。

ここでは moneybook_session を取得します。

ステータスが 302なのでリダイレクトされます。

[GET]リダイレクト③(ログイン後)

callback にアクセスすると、TOPページ にリダイレクトされます。

ログインに必要な identification_code , moneybook_session が取得できます!

ステータスが 200なのでここまでです。

くら
くら

ログインに必要な情報を取得するのはここまでです!

このあとは資産ページを取得して、必要な情報を抜き出していきます!

スポンサーリンク

資産ページから各情報をJSONで取得する

GASのライブラリ『libpack』のうちの一つ『cheerio』を使ってスクレイピングします。

それぞれのデータの取得方法は以下のような流れです。

最終的には以下のようなJSONが取得できます。

[
  {
    "種類・名称": "口座1",
    "残高": "***円",
    "保有金融機関": "銀行1",
    "変更": "",
    "削除": ""
  },
  {
    "種類・名称": "口座2",
    "残高": "***円",
    "保有金融機関": "銀行2",
    "変更": "",
    "削除": ""
  }
]

まず最初にHTMLの表を取得し、ヘッダーとデータの1次元配列を取得します。

ヘッダーとデータ部分の配列を2次元配列にします。

2次元配列をJSONに変換します。

こちらのサイトを参考にしています!

預金・現金・仮想通貨を取得

以下のようなJSONが取得できます。

[
  {
    "種類・名称": "",
    "残高": "",
    "保有金融機関": "",
    "変更": "",
    "削除": ""
  }
]

JSONに変換しているコード部分です。

株式(現物)を取得

以下のようなJSONが取得できます。

[
  {
    "銘柄コード": "",
    "銘柄名": "",
    "保有数": "",
    "平均取得単価": "",
    "現在値": "",
    "評価額": "",
    "前日比": "",
    "評価損益": "",
    "評価損益率": "",
    "保有金融機関": "",
    "取得日": "",
    "変更": "",
    "削除": ""
  }
]

JSONに変換しているコード部分です。

投資信託を取得

以下のようなJSONが取得できます。

[
  {
    "銘柄名": "",
    "保有数": "",
    "平均取得単価": "",
    "基準価額": "",
    "評価額": "",
    "前日比": "",
    "評価損益": "",
    "評価損益率": "",
    "保有金融機関": "",
    "取得日": "",
    "変更": "",
    "削除": ""
  }
]

JSONに変換しているコード部分です。

年金を取得

以下のようなJSONが取得できます。

[
  {
    "名称": "",
    "取得価額": "",
    "現在価値": "",
    "評価損益": "",
    "評価損益率": "",
    "取得日": "",
    "変更": "",
    "削除": ""
  }
]

JSONに変換しているコード部分です。

スポンサーリンク

JSONファイルをGoogleドライブに保存する

取得したJSONをGoogleドライブに保存しています。

くら
くら

JSONをBIツールとかに読み込んで、いつか分析したいなー。と思ったのでとりあえずファイルに出力しています。

JSONをGoogleドライブに保存
JSONをGoogleドライブに保存
スポンサーリンク

資産情報をLINEに送信する

取得したJSONの 項目金額をLINEに送信しています。(デモ用に値は空です。)

LINE BOT はこちらで紹介しています!

くら
くら

これでいつでも総資産がチェック出来ます!

LINEに送信
LINEに送信
スポンサーリンク

資産情報をSlackに送信する

取得したJSONはそのままSlackにも送信しています。

Slack BOTはこちらで紹介しています!

くら
くら

スクリプトが正常に動作しているかチェックするための監視の意味で送信させてます。

SlackにJSONをログとして送信
SlackにJSONをログとして送信
スポンサーリンク

まとめ

くら
くら

マネーフォワードにログインする処理を分析するのに、2日もChromeデベロッパーツールとにらめっこしてました。

まぁ。そのおかげで、2段階認証とかじゃなければどんなサイトもGASでスクレイピングできそうな自信がつきました。 笑

心残りとして、このスクレイピングをするために実はマネーフォワードの2段階認証オフにしました。

Googleの2FA自体は、秘密鍵と現在時刻から計算するアルゴリズムのようです。

ちょっと難易度高そうだけど、頑張れば出来そうな・・・。

コメント

タイトルとURLをコピーしました