au kddi の料金明細をPDFで毎月保存するのが面倒だ。
保存するのも面倒なら、紙請求書を送ってもらうのも面倒だ
紙請求書をスキャンするのも面倒だ。
だったらスクレーパーで毎月PDFを自分宛に送ろう
スクレーパー作った。これで毎月ログインし忘れることが無くなります。
au にログインして請求書PDFを取り出す。
複数回線契約があるばあい、複数の電話番号をすべて落としてくる。
au.rb
#!/usr/bin/env ruby #coding:utf-8 $KCODE = 'u' if RUBY_VERSION.to_f < 1.9 require 'rubygems' if RUBY_VERSION.to_f < 1.9 module BillScraper ######################### ## サポートIDでログインが前提 ## main_phone_number は ハイフン区切り必須 ## out_path = BillScraper::au_current_month("takuyaXXXX", "password", "090-xXXX-9876" ,"1234"); ## ↑サポートID ## au IDでのログインは電話番号がコロコロ変わる古事記には不要です。 ## def au_current_month( id, password, main_phone_number , passcode ) #pdftk は必須 BillScraper::check_pdftk_exists? #クラスにするまでもないので、手続き型で行きます。 #mechanize 初期化 require "mechanize" m = Mechanize.new m.user_agent_alias = 'Windows IE 7' #ログインページ開く m.get "https://cs.kddi.com/support/login.html" #ログイン m.page.forms[1].field_with(:name=>"UserID").value = id m.page.forms[1].field_with(:name=>"Password").value = password m.page.forms[1].submit #ページ遷移(ページを順番にたどる必要がある時に必須) # m.page.forms_with( :name=>/menu/i).first.fields_with(:id=>/selMenuKind/i).first.value= 'au_seikyu_seikyusho' # m.page.forms_with( :name=>/menu/i).first.submit # 料金表示されるメニューを表示する。 m.page.forms_with(:name=>"selectTelAndServiceForm").first.fields_with( :name=>/menu/i).first.value = 1 m.page.forms_with(:name=>"selectTelAndServiceForm").first.submit # 主回線の電話番号を選択 fn = m.page.search("//td[text()='#{main_phone_number}']").first.parent().search("form").attr('name').to_s m.page.forms_with( :name => /#{fn}/).first.submit # 主回線の電話番号のパスコードを入れる m.page.forms.first.field_with(:name=>"auServicePassword").value = passcode m.page.forms.first.submit #ページ遷移 m.page.body = m.page.body.toutf8 unless RUBY_VERSION.to_f < 1.9 # エンコード関連 m.page.forms.first.submit #ページ遷移 m.page.body = m.page.body.toutf8 unless RUBY_VERSION.to_f < 1.9 # エンコード関連 # PDFを保存する。 # 1:料金概要 # 2:料金詳細 内訳 # 最後に、概要+詳細 ▶ 一枚PDFへ合成 name = m.page.search("p.seikyu.mb10").text.strip.gsub(/\s+/, "") m.page.form_with( :name=>/download/i).submit gaiyou_path = "au-概要#{name}.pdf" m.page.save gaiyou_path m.back() m.page.form_with(:name => /details/).submit #m.page.body = m.page.body.toutf8 m.page.form_with(:name => /pdf/).field_with(:name => "K2300A").value = 1 m.page.form_with(:name => /pdf/).submit utiwake_path = "au-内訳#{name}.pdf" m.page.save utiwake_path out_path = "au-#{name}.pdf" `pdftk "#{gaiyou_path}" "#{utiwake_path}" cat output "#{out_path}" ` File.unlink gaiyou_path File.unlink utiwake_path return out_path end module_function :au_current_month end
gistに投げてある→au.rb
実行側
上のライブラリを実行する側
au.login_and_send2evernote.rb
#!/usr/bin/env ruby #coding:utf-8 $KCODE = 'u' require 'rubygems' $:.unshift "/usr/local/lib/site_ruby/1.8/local/scrapers/lib" require "scrapers" require "scrapers/au" out_path = BillScraper::au_current_month("takuyaxxx","takuyaxxxx", "090-xxxx-xxxx","xxxx") name = File.basename out_path, ".pdf" gem "mail" , "< 2.5.3 " require 'mail' options = { :address => "smtp.gmail.com", :port => 587, # :domain => 'XXXXX.biz', :user_name => 'takuya@XXX.biz', :password => '****', :authentication => 'plain', :enable_starttls_auto => true } ##Google Gmail SMTP経由で evernoteに送る Mail.defaults do delivery_method :smtp, options end mail = Mail.new do from 'takuya@xxx.xxx' to 'takuya_xxx.xxxxx@m.evernote.com' subject "au 料金 [#{name}] #アカウント" body "メール経由。" add_file :filename => out_path, :content => File.read(out_path) end mail.deliver! File.unlink out_path puts :end
毎月5−10の間に更新されるので
cronで上記スクリプトを、毎月8日前後に実行すれば、au の明細書を見落とさなくて住みます。
そして、Evernoteに保存しておけば検索可能になって、処理漏れが無くなります。
PDFを直接送ってほしい
こんなプログラミングは不毛なので、直接PDFをメールに送ってほしいです。
PDFにパスワード掛けてくれて、PDFのパスワードはお互いの共通鍵で事前に設定すればイイ。
WEBで見られることに全くメリットを感じない。。。