uc_card
· 🪦 retired
UC カード(www.uccard.co.jp)の会員サイトから、未払いのクレジットカード取引履歴(利用明細)を取得する Ruby ライブラリです。Mechanize で会員サイトにログインして明細ページを開き、Nokogiri で HTML をパースして Ruby のオブジェクトとして返します。
gem として公開していて、同名のコマンドラインツールも同梱しています。
gem install uc_card
uc_card # 未払いの取引を一覧表示(オプションは一切ない)
README にある出力例です(利用先の名前は伏せてあります)。
2012/01/28: ****** 500 1回払い 1回
2012/01/26: ****** 5940 1回払い 1回
2012/01/22: ****** 3357 1回払い 1回
Total: 11722
ライブラリとして使うときはこう書きます。ID・パスワードはコードに直書きせず、認証情報管理ライブラリの pit から読み込む作りです。
require 'uc_card'
UCCard.start_with_pit("uccard.co.jp") do |card|
puts card
end
内部設計
UCCard.start がログインから明細取得・ログアウトまでのライフサイクルを丸ごと面倒を見て、ブロックにはパース済みのインスタンスが渡ってきます。
UCCard.start—login→go_recent(明細取得)→ ブロック実行、と進み、ensureで必ずlogoutします。途中で例外が出てもログアウトだけは走る作りですUCCard.start_with_pit— 認証情報を pit から取得してstartに渡すショートカット。同梱のbin/uc_cardコマンドはこれを呼んでputs cardするだけの 5 行ですlogin— Mechanize(User-Agent は “Windows IE 7” を名乗ります)でログインページを開き、フォームの ID・パスワード欄を埋めて送信しますgo_recent—「最近のご利用明細」ページを取得し、Nokogiri で明細テーブルの行をShoppingData(date・klass・name・value・usecase・times・note・payment の 8 項目)の配列にパースします。README の出力例でいうと「1回払い」が usecase、「1回」が times ですShoppingData#money— 金額文字列から数字以外を取り除いて整数化します。reserved_paymentはその合計で、これがTotal:行になります(reserved_payment_this_monthというメソッドも生えていますが空実装のままです)- 依存 gem は mechanize・nokogiri・pit の 3 つです
README には、SSL 証明書のエラーが出る場合は ruby -ropenssl -e "p OpenSSL::X509::DEFAULT_CERT_FILE" で証明書のパスを探して適切な証明書を入れるように、という注意書きがあります。