mizuho_bank

みずほダイレクト(みずほ銀行のインターネットバンキング)に Ruby からアクセスするためのライブラリです。Mechanize でログイン画面の遷移(お客さま番号 → 合言葉 → パスワード)を自動化し、口座残高や入出金明細を Ruby のオブジェクトとして取り出せます。

当時 gem として公開していました。API のない時代に、自分の口座情報をプログラムから扱うためのスクレイパーです。

gem install mizuho_bank

使い方はこんな感じです(README より)。認証情報はコードに直書きせず、アカウント情報管理の Pit から読み込む前提の作りです。

require 'mizuho_bank'
require 'pit'

pit = Pit.get("MizuhoBank", :require => {
  "keiyaku_no" => "keiyaku_no",
  "password" => "password",
  # 合言葉(秘密の質問)3組の question/answer も同様に登録しておく
})

aikotoba_dict = {
  pit['aikotoba1_question'] => pit['aikotoba1_answer'],
  pit['aikotoba2_question'] => pit['aikotoba2_answer'],
  pit['aikotoba3_question'] => pit['aikotoba3_answer']
}

MizuhoBank.new(pit['keiyaku_no'].to_s, pit['password'].to_s, aikotoba_dict){ |bank|
  p bank.info.main_account.money        # 口座残高
  p bank.info.main_account.cache_flows  # 最近の取引履歴
}

内部設計

コンポーネント構成です。中核の MizuhoBank クラスがログイン処理とページのパースを束ねていて、結果は MizuhoDirectInfo/MizuhoAccount/MizuhoCacheFlow というプレーンなデータクラスに詰めて返します。

mizuho_bank のコンポーネント構成図

ログインから明細取得までの流れです。

mizuho_bank のログインと明細取得のシーケンス図

既知の問題として、合言葉に失敗し続けたときに要求される画像認証には対応していません(README 記載)。また、パースがページの文言とテーブル構造に密結合なので、サイト側の改版で動かなくなる種類のコードです。