2012-03-12 (月)
*[ruby] みずほ銀行の口座情報をGoogle docsに同期
通帳の記帳とか面倒くさくて実質不可能だし,みずほダイレクトはログイン難しくて人間がやる作業とは思えないので,みんな似たようなことやってるだろうけど,コードとか貼っておく.
毎回思うけど,コードを日記に貼り付けると,なんだか手軽にそれっぽくなって良いですね.
Google Spreadsheet用のライブラリとみずほダイレクト用のライブラリが,別々のhttpclientを使ってるのがいやだったので,同じもので動くようにした.クッキーの扱いが不完全なせいで,無駄なアクセスしているのを後で直そう.
- https://github.com/binzume/mizuhodirect-ruby
- https://github.com/binzume/simple-googlespreadsheet-ruby
というわけで,はてなグラフからGoogle docsへの移行は完了.近いうちに古いやつはcronから消す.過去の情報もインポートしておきたいけど,はてなグラフには日ごとの残高しか記録してなったので,ログから復元するか….
みずほダイレクト,以前は何か操作をミスする度に10分間ロックされてしまって,デバッグ面倒くさかったのだけど,もしかしてそういう制限なくなった?
ソース: https://github.com/binzume/mizuhodirect2googlespreadsheet-ruby
#!/usr/bin/ruby -Ku require "rubygems" require 'yaml' require 'time' require_relative "mizuhodirect/mizuhodirect" require_relative 'googlespreadsheet/spreadsheet' mizuho_account = YAML.load_file('mizuho_account.yaml') google_account = YAML.load_file('account.yaml') spreadsheet_key = "*******************************************" # spreadsheet session = GoogleSpreadsheet.login(google_account['email'], google_account['passwd']) ws = session.spreadsheet_by_key(spreadsheet_key).worksheets[0] # find last (FIXME! last = ws[ws.row_count] unless last[0] last = ws[ws.row_count-1] end # mizuho login m = MizuhoDirect.new unless m.login(mizuho_account) puts "LOGIN ERROR" end begin account_status = m.get_top puts 'total: ' + account_status["zandaka"].to_s st = nil account_status["recentlog"].each{|row| if Time.parse(last[0])==Time.parse(row[0]) && last[1].to_i == row[1] && last[2].to_i == row[2] st = row end } account_status["recentlog"].each do |row| if st if row == st st = nil end next end p row ws << row end ws[ws.row_count,5] = account_status["zandaka"] ensure m.logout end puts "ok"
それにしてもrexml遅いなーと思って,rexmlのソース読んだら納得した.読んでて面白いけど,もう少し普通で高速なxmlライブラリを標準にしてほしいな.