UbuntuでMoneylookみたいにネットバンク口座とクレジットカード情報を管理したい!
Ubuntuで使えるような
Moneylookみたいなソフトを探したところ、見つからなかったので、Rubyを使って自分でつくってみることにしました。そして、せっかくつくったものなので、一般にも公開してみようと思って作成したのが、このサイトです。
今のところ、口座の残高と明細を引っ張ってきて表示させる程度で、Moneylookのような高機能とはいきませんが、最低限の用は足りていると思っています。
また、今のところの対応緊急機関は、東京三菱UFJダイレクト、ゆうちょダイレクト、三井住友(SMBC)ダイレクト、Viewカード、楽天カード、セゾンカード、三井住友VISAカードの7つになっています。
ただ、僕が持っている口座の情報でしか実験ができないので、対応可能な範囲に限りがあることをご了解ください。対応口座は、追加用のスクリプトを読み込ませれば、プラグイン的に追加できるようになっているので、それを利用してくれるとありがたいです。
最後、予防線を張るようになりますが、このスクリプトはRubyの勉強を兼ねてつくったものなので、いろいろ不備もあると思います。自分の環境で使ってみる場合は、自己責任でお願いします。
コードの説明
更新履歴
12/14
「書式を整えて表示」の際にデータが落ちていたところがあったので修正。
「書式を整えて表示」で出力したデータを表計算ソフトで編集しやすいように「円」などの表記を削除して数値のみ出力するようにした。
免責事項
- このスクリプトは、あくまで自分でスクリプトを作ってみる際の参考だと思ってください。このスクリプトを使ったことでのトラブルへの責任は負いかねます。
- 対応口座を書いていますが、書かれている口座への対応を保証するものではありません。スクリプトのミスやサイトの仕様変更による不具合についての保証も行いません。
製作・動作環境
Ubuntu 9.0.4(64bit版)
Ruby1.8.7
firewatir1.6.5
で、作成・動作確認しています。それ以外のLinuxディストリビューション(32bit版含む)でも動かせるはずです。
このスクリプトを動かすためには、FireWatirおよびopensslライブラリが動く環境のセットアップが必要です。それぞれ必要なものをインストールしてください。
動作環境のセットアップ
Ruby,Rubygemsのインストール
次のコマンドを実行するか、同じパッケージをSynapticからインストールしてください。
$ sudo apt-get install ruby ruby-dev rubygems build-essential libruby-extras
opensslは、Linuxの場合は最初から入っているはずなので、これで最低限は大丈夫だと思います。
firewatirのインストール
$ sudo gem install firewatir
もしインストールの際に不足しているものがあるというエラーが出たら、それも追加していってください。僕の環境では、ほかにもいろいろ入っているので、最低限必要な環境は確認できていません。すみません。。。
JSSh(Firefoxプラグイン、FireWatirからFirefoxを操作するのに必要。)
このサイトなどから、JSShプラグインをダウンロードしてFirefoxに組み込んでください。
リンク先から取得した場合は、ダウンロードしたファイルをFirefoxのウィンドウにドラッグ&ドロップすればインストールできるはずです。(JSShで検索すると、もっと簡単にインストールできる最新版があるかも知れません。)
ただし、今のJSShプラグインは64bit版LinuxのFirefoxに対応していないようなので、64bit版Linuxを使っている方は、
こちらのページの方法でJSSh組み込み済みのFirefoxをコンパイルして使用してください)
プラグインが正しく導入されれば、Firefoxを起動して端末から「$ telnet localhost 9997」とすると、JSShに接続できるようになっているはずです。(telnet接続は、「Ctrl + ]、quit」で終了させてください。)
仕様
このスクリプトは、FireWatirライブラリを使ってスクリプト上からFirefoxを操作し、その結果を読み取って口座情報を標準出力に書き出すものです。
インターネットバンキング口座は、JavaScriptを使ってログイン処理をするものが大半を占めるため、Rubyだけでは、それらの口座へのログインと情報取得を実現するのは大変難しくなります。そこで、それらの処理をFirefoxにまかせて、情報取得を行っています。
使用方法
使い方の流れは以下の通りになります。
1)ファイルを解凍、ディレクトリに移動
このページの一番下にあるリンクもしくはここのリンクから「
get_a_12.tgz」をダウンロードして解凍し、解凍されたディレクトリ「get_a_12」に移動してください。
2)このスクリプトが本当に大丈夫か確認
スクリプトの説明ページを参考にしてもらいながら、スクリプトの中身を見て、このスクリプトが本当に大丈夫かどうか確認してください。もちろん、僕は大丈夫だと思ってここに載せていますが、実行前に一通りの確認をお願いします。
3)各口座のログイン情報を登録
$ ruby makepasswdfile.rb
を実行し、表示にしたがって、マスターパスワードと各口座のIDとパスワードを入力していきます。
各口座のパスワードは、opensslライブラリのを使って「aes-256-cbc」モードで暗号されて「account_passwd」ファイルに保存されます。
マスターパスワードは、口座情報取得、今後のパスワードの変更や追加入力に必要になります。(マスターパスワードは、あとで変更もできます)
4)Firefoxを起動
このスクリプトは、jsshを使ってやりとりのできるFirefoxが起動していないと動かすことができません。そのため、スクリプトを走らせる前にjsshプラグインを有効化したFirefoxを起動しておきます。
5)登録されたログイン情報を読み取って自動ログイン・情報取得
$ ruby get_a_info.rb
で、口座情報取得スクリプトを動かしてください。(Firefox関連のWarningが出るかも知れませんが、無視しても大丈夫です)
その後は、表示にしたがって、口座とモードを選択していくと、新規のFirefoxウィンドウが立ち上がり、口座へのログインが始まるはずです
モード1を選択した場合は、ログイン処理のみを行い、スクリプトが終了します。
モード2、モード3では、自動的に画面が切り替わり、一つの口座情報が取得し終わると、端末画面に取得した口座情報が表示されます。Firefoxをスクリプトから動かしている都合上、情報取得には時間がかかるので、お待ちください。
6)ファイルに出力を保存したい場合
例: $ ruby get_a_info.rb | tee data.csv
ファイルに出力を保存したい場合は、リダイレクトやteeコマンドを使ってください。今のところ、このスクリプト自体にはファイルへの保存機能をつけていません。
teeコマンドを使うと、端末画面に表示されたものと同じものがファイルに保存されます。
ただ、なぜか「〜を入力してください」が遅れて表示されることがあるため、そうなってしまった時はマスターパスワード入力や口座選択、モード選択の順番と覚えておいて、その覚えた内容で入力を行ってください。
出力は、タブ区切りのcsvファイルになっているので、出力したファイルは各種表計算ソフトで簡単に編集できるはずです。(ただ、各口座ごとに日付や金額の表記の違いが残っているので、計算の際はそこを手動で変換する必要があります)
Windows対応(おまけ)
もともとの動機は最初の書いた通りなので、Windows対応はちゃんとしていないのですが、WindowsでもRuby1.8.7、Rubygems、openssl、watirが入っている環境なら、IE+Watirでログイン処理まではできるようになっているはずです。(Windowsのプロンプトで正しく日本語を表示させるためには、テキストエディタなどですべてのファイルの文字コードをSJISに変換して、各スクリプトの1行目にある「#!ruby -Ku」を「#!ruby -Ks」に書き換える必要があります。)
それ以降の情報取得は、ブラウザの違いのためかちゃんと動きませんでした。あくまでおまけ機能ぐらいに思っていてください。
参考資料
今回のスクリプトを書くにあたっては
Ruby逆引きハンドブックを参考にさせていただきました。Stringsクラスに、opensslの暗号・復号メソッドを追加するところは、この本に書かれていたものをそのまま使わせてもらっています。
「逆引き」というタイトルながら、最初から読んでいくとRubyの勘どころがよくわかるようになっていて、いい本でした。
Ruby逆引きハンドブック
<以下、@wiki広告>
最終更新:2009年12月14日 22:35