それマグで!

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

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

ソフトバンクの料金明細を毎月Evernoteに送信する。

毎月請求書をダウンロードするのが面倒くさい

PDFの請求書を毎月毎月取りに行くのは面倒くさい。
しかも忘れやすい。送られてくるのとは違い、ログインしてクリックして、条件絞り込んでダウンロードしてPDFを取得してチェック

PDFを取得スルだけで満足しちゃう

大事なのは、PDFに書かれている内容のチェックなのに、PDFを保存しただけで満足しちゃう。

Evernoteに毎月自動保存しようぜ

Evernoteに毎月送信されてくれば、気づくのですよ。
なのでPDFを保存するスクリプト作った。


請求書PDFを保存するスクリプト作った。→softbank.rb

ファイルはGistにも起きました softbank.rb

#!/usr/bin/env ruby
#coding: utf-8
require 'rubygems' if RUBY_VERSION.to_f < 1.9
require 'pp'


module BillScraper

	class MySoftbank
		attr_accessor :m
		def initialize( id=nil, password=nil )
			require 'mechanize'
			@m = Mechanize.new
			@@id = id
			@@password = password
		end
		def go_to_top
			m.get "https://my.softbank.jp/msb/d/top"
		end

		def login(id=nil,password=nil)
			id ||= @@id
			password ||= @@password
			m.get 'https://my.softbank.jp/msb/d/top'
			m.submit m.page.forms[0], m.page.forms[0].buttons[0]
			m.page.forms[0].fields[0].value= id
			m.page.forms[0].fields[1].value= password
			m.page.forms[0].submit
		end
		def latest_meisai
			@m.page.links_with( :text=>"ご請求書(内訳)の確認").first.click
			#リダイレクト・クッションページ
			@m.page.forms[0].submit
			#請求内訳
			year_month =  @m.page.search('form p.current span').text.strip #取得可能な請求書

			#一括請求
			button = @m.page.forms[0].buttons_with( :name=> "doPrintSbmAll").first
			form   = @m.page.forms[0]
			@m.submit form, button
			return { "file_name"=>"ソフトバンク請求書-#{year_month}.pdf", "body"=>m.page.body}
		end
		def latest_meisai_for_this_number
			@m.page.links_with( :text=>"ご請求書(内訳)の確認").first.click
			#リダイレクト・クッションページ
			@m.page.forms[0].submit
			#請求内訳
			year_month =  @m.page.search('form p.current span').text.strip #取得可能な請求書

			#一括請求
			#button = @m.page.forms[0].buttons_with( :name=> "doPrintMsn").first   #電話番号
			button = @m.page.forms[0].buttons_with( :name=> "doPrintSbmAll").first
			form   = @m.page.forms[0]
			@m.submit form, button
			return { "file_name"=>"ソフトバンク請求書-#{year_month}.pdf", "body"=>m.page.body}
		end
	end

end

if $0 == __FILE__ then

# my_soft_bank = BillScraper::MySoftbank.new "0809999999","password"
# my_soft_bank.login
# ret = my_soft_bank.latest_meisai_for_this_number
# open(ret["file_name"], "w"){|f| f.print ret["body"] }


実行サンプル

#!/usr/bin/env ruby
#coding:utf-8
$KCODE = 'u'
require 'rubygems'
$:.unshift "/usr/local/lib/site_ruby/1.9.1/local/scrapers/lib/"
require "scrapers"
require "scrapers/softbank"


my_soft_bank = BillScraper::MySoftbank.new "080xxxx","zxxxxx"
my_soft_bank.login
ret = my_soft_bank.latest_meisai_for_this_number # ⇐一括明細がソフトバンクのエラーででないので、表紙だけ

out_path = ret["file_name"]
open(ret["file_name"], "w"){|f| f.print ret["body"] }

name = File.basename out_path, ".pdf"


gem "mail" , "< 2.5.3 "
require 'mail'

options = { :address              => "smtp.gmail.com",
            :port                 => 587,
            :user_name            => 'takuya@xxxx.xxxx',
            :password             => '****',
            :authentication       => 'plain',
            :enable_starttls_auto => true  }



Mail.defaults do
  delivery_method :smtp, options
end
mail = Mail.new do
  from     'takuya@xxxx.xxx'
  to       'takuyaxxxx@m.evernote.com'
  subject  "ソフトバンク料金 [#{name}] #アカウント"
  body      "メール経由。"
  add_file :filename => out_path, :content => File.read(out_path)
end

mail.deliver!

File.unlink out_path


puts :end