Twitterにパケット代を投稿するpacketterを更新
以前作ったpacketterをいろいろ直した。
変更点
変更点は以下。
投稿例
新バージョンでは以下のように投稿される。
2月2日までのSoftBankパケット通信料 : 55,489円 (+31,540円)
なくうかん on Twitter: "2月2日までのSoftBankパケット通信料 : 55,489円 (+31,540円) http://tinyurl.com/packetter"
packetter.rb
新しいコードは以下。
※ 2010-2-4 一部修正。詳細はコメント欄参照。
#!/usr/bin/ruby -Ku require 'rubygems' require 'mechanize' require 'nkf' require 'open-uri' require 'net/http' require 'erb' load File.join(File.dirname(__FILE__), 'config.rb') # logger #require 'logger' #WWW::Mechanize.log = Logger.new('packetter.txt') #WWW::Mechanize.log.level = Logger::DEBUG # setup puts 'setup...' agent = WWW::Mechanize.new agent.follow_meta_refresh = true agent.user_agent = 'Mozilla/5.0 (iPhone; U; CPU iPhone OS 2_0 like Mac OS X; ja-jp) AppleWebKit/525.18.1 (KHTML, like Gecko) Version/3.1.1 Mobile/5A345 Safari/525.20' # login puts 'login...' agent.get('https://mb.softbank.jp/scripts/japanese/sss/user/login.jsp') agent.page.form_with(:name => 'loginForm'){|form| form.action = '/scripts/japanese/sss/user/loginCheck.jsp' form.field_with(:name => 'userId').value = $my_softbank[:user_id] form.field_with(:name => 'password').value = $my_softbank[:password] form.click_button } # jumo to customerservice puts 'jump to customerservice...' agent.get('https://mb.softbank.jp/scripts/japanese/sss/ref/obicip.jsp') agent.page.form_with(:name => 'newForm'){|form| form.click_button } # verify pin puts 'verify pin...' agent.get( 'https://www.customerservice.mb.softbank.jp/obi/x/authhlr.do?' + [ 'wcohid=5', "authHLRRequireDto.HLR=#{$my_softbank[:pin]}", 'method=%8E%9F%82%D6', 'jskytid=1', 'sid=T9A1', 'pid=J01P', 'method=', 'idex=', 'dummy=', ].join('&') ) # jump to pricemonth puts 'jump to pricemonth...' agent.page.link_with(:href => /pricemonth/).click # get contents td = agent.page.search('td[@id="contents"]').inner_text.gsub(/[\r\n]/, '') # date td =~ /年([0-9]+月[0-9]+日)\)/ date = NKF::nkf('-Wwxm0Z0', $1) puts "date : #{date}" # packet fee td =~ /パケット通信料([0-9,]+円)/ fee = $1 puts "packet fee : #{fee}" # latest file latest_file = File.join(File.dirname(__FILE__), 'latest') # load latest and compare if File.exist?(latest_file) puts 'load latest...' f = open(latest_file) latest = f.read.chomp f.close # compare fee_new = fee.delete(',').to_i fee_old = latest.delete(',').to_i fee_diff = fee_new - fee_old if fee_diff < 0 diff = '' else diff = " (+#{fee_diff.to_s.gsub(/(.*\d)(\d\d\d)/, '\1,\2')}円)" end puts "diff : #{diff}" end # save latest f = File.open(latest_file, 'w') f.puts fee f.close # post puts 'post...' Net::HTTP.version_1_2 Net::HTTP.start('twitter.com', 80) do |http| req = Net::HTTP::Post.new('/statuses/update.xml') req.basic_auth $twitter[:user_id], $twitter[:password] req.body = 'status=' + ERB::Util.u("#{date}までのSoftBankパケット通信料 : #{fee}#{diff} http://tinyurl.com/packetter") res = http.request(req) end puts 'finished.'
config.rb
ログイン情報はこっちのファイルに記述。packetter.rbと同じディレクトリに置いてね。
$my_softbank = { :user_id => 'my_softbank_id', :password => 'p@ssw0rd', :pin => '9999', } $twitter = { :user_id => 'twitter_user_id', :password => 'p@ssw0rd', }