2年以上放置した(`Д´)
色々ありすぎたのであえて何も書きませんが(;´Д`)
■
MacBook Air 11インチ欲しい!
長年超絶アンチマカーで生きてきましたが、もし当たったら考えなおそうと思います。
当たらなかった場合、今後もマカーを罵倒して生きていきたいと思います。
JogtterをOAuthに対応させる
対応させたが仕組みがいまいちまだ理解できていないので、ソースを公開していいいものやら悩んでます。またそのうち。
Jog2witter バグ修正
バグが有ったのでなおした。
Jog2witter
JogNoteについた走行を記録をtweetするよ!
JogNoteのIDとTwitterのIDとPASSをいれてcronでぐるぐる回せばオーケー。
例によって例外処理はテキトー。
あんまりまだ回してないのでエラーが出たらごめんね!
# tweet jognote data APP_NAME = 'JOGTTER' JOGNOTE_ID = '000000' TW_ID = 'id' TW_PASS = 'pass' JOG_DATA = 'jog2tw.dat' LOG_FILE = 'jog2tw.log' require 'logger' $log = Logger.new(LOG_FILE) $log.level = Logger::DEBUG MAX_RETRY = 10 class JogNote require 'open-uri' require 'rexml/document' JOGNOTE_XML_URI = 'http://www.jognote.com/charts/main?format=xml&type=jogs&user_id=' + JOGNOTE_ID + '&days_count=30' def initialize @datafile = JOG_DATA end def get_last_jog_id tmp = File.open(@datafile).read return 0.to_i if tmp.to_s.length < 1 tmp.to_i end def get_recent_post result = Hash.new rc = 0 begin page = URI.parse(JOGNOTE_XML_URI).open.read xml = REXML::Document.new(page) xml.elements.each('/settings/data/chart/graphs/graph[@gid="0"]/value') do |v| result[v.attributes['xid'].to_s] = { :jog => v.attributes['description'] } end xml.elements.each('/settings/data/chart/series/value') do |v| if result[v.attributes['xid'].to_s] then result[v.attributes['xid'].to_s][:date] = v.text end end xml.elements.each('/settings/data/chart/graphs/graph[@gid="99"]/value') do |v| if result[v.attributes['xid'].to_s] then result[v.attributes['xid'].to_s][:kmh] = v.attributes['description'] end end rescue $log.error $!.to_s + 'cant get xml from jognet, retry' rc += 1 sleep(10) if rc > MAX_RETRY then $log.error 'cant get xml from jognet, raise' raise end retry end result end def get_new_jog @recent_jogs = get_recent_post save_jog_id = get_last_jog_id @recent_jogs.delete_if{ |xid, data| xid.to_i <= save_jog_id } end def update return false if !@recent_jogs or @recent_jogs.empty? last_xid = @recent_jogs.keys.sort{|a,b| a<=>b}.last $log.debug last_xid.to_s File.open(@datafile, "w"){ |f| f.print last_xid.to_s } end end class Twitter require 'rubygems' require 'rubytter' def initialize(id, pass) raise if !id or !pass @id = id @pass = pass end def jog_hash2array(hash) result = Array.new hash.keys.sort{ |a,b| a <=> b }.each do |xid| result << hash[xid][:date].to_s + ' 走ったぜ! ' + hash[xid][:jog].to_s + 'km(' + hash[xid][:kmh].to_s + 'km/h) [from JogNote]' end result end def post_jog2tw jn = JogNote.new rc = 0 jog_texts = jog_hash2array(jn.get_new_jog) begin tw = Rubytter.new(@id, @pass, {:app_name => APP_NAME}) jog_texts.each do |text| $log.info(text) tw.update(text) end rescue $log.error $!.to_s + 'cant post twitter, retry' rc += 1 sleep(10) if rc > MAX_RETRY then $log.error 'ccant post twitter, raise' raise end retry end jn.update end end Twitter.new(TW_ID, TW_PASS).post_jog2tw
バグ修正
さらにひどいバグが有ったので修正した。(6/22)
mixiまわりの処理が超適当
あと、エラー処理がひどい。
そのうち直そう。