それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

au の料金明細PDFを毎月自分のEvernoteに送る。

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で見られることに全くメリットを感じない。。。