Twitterにパケット代を投稿するpacketterを、My SoftBankがリニューアルしたのでまた更新
以前作ったpacketterだけど、My SoftBankがリニューアルして、ログイン方法がかわったりhtmlが変わったりしたので、直した。
packetterってなに?
カンタンに言うと、SoftBankのパケット代(パケット定額で割引される前の、使ったデータを元に算出してる金額)を自動的にTwitterにポストするRubyのプログラム。
まあ詳しくは以前の記事を参照。
packetter.rb
#!/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' #Mechanize.log = Logger.new('packetter.txt') #Mechanize.log.level = Logger::DEBUG # setup puts 'setup...' agent = 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://my.softbank.jp/msb/d/top') agent.page.forms.first.field_with(:name => 'msn').value = $my_softbank[:user_id] agent.page.forms.first.field_with(:name => 'password').value = $my_softbank[:password] agent.page.forms.first.click_button # jumo to mainmenu puts 'jump to mainmenu...' agent.get('https://my.softbank.jp/msb/d/webLink/doSend/WCO010000') # jump to bill_before_fixed puts 'jump to bill_before_fixed...' agent.get('https://bl11.my.softbank.jp/wco/billBeforeFixed/WCO020') # get contents td = agent.page.search('form[@name="billBeforeFixedActionForm"]').inner_text.gsub(/[\r\n]/, '') # date td =~ /年([0-9]+月[0-9]+日))/ date = $1 puts "date : #{date}" # packet fee list = td.scan(/通信料.+?([0-9,]+)円/) fee = 0 list.each do |item| fee += item[0].gsub(/,/, '').to_i end fee = "#{fee.to_s.gsub(/(.*\d)(\d\d\d)/, '\1,\2')}円" 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
$my_softbank = { :user_id => '09099999999', :password => 'p@ssw0rd', } $twitter = { :user_id => 'twitter_user_id', :password => 'p@ssw0rd', }
以前のバージョンとは設定内容が変わった。My SoftBank側が電話番号とパスワードでログインするようになったので、それに合わせた。
事前にMy SoftBankのサイトで新しいログインアカウントに移行する手続きをやっておく必要があるよ。
メモ
まだ数日間しかテストしてないので、時期によってはバグがあるかも。2ヶ月分の料金が見れるようになったタイミングや、月またぎのところが自信ない。
Windowsだと文字化けするから、さくらインターネットで動かすことに
作ってるときはMacだったんだけど、うちの運用環境はWindowsの常時稼働PC。ところが、これをWindowsで動かすと、htmlをパースして中身を取り出すところで文字化け(正確にいうと、文字と文字の間に半角カナの「ツ」が入ってムチャクチャになる現象)が起きて、どうにもならない感じ。非常に困った。誰か助けて欲しい。
そこで、さくらインターネットのレンタルサーバにこのスクリプトを置いてそっちで動かすことにした。さくらインターネット上にRubyGemsをインストールしてMechanizeを入れたり、環境変数を設定してcronを仕込んだりするので結構苦労したけど、ググりながらがんばったら無事にできた。