Twitterã§å¤æ 管çã®ããããã®Rubyã¹ã¯ãªãã
ããã¾ã§ âè¦è¾¼ã¿æ®æ¥â ã¨ããå¶åº¦ã§æ®æ¥ä»£ã¨ããã¾ãé¢ä¿ãªãã£ããã©ãæè¿ã«ãªã£ã¦æ®éã«æ®æ¥ä»£ãä»ãããã«ãªã£ãã
ãªã®ã§ä»äºéå§ã»çµäºæéãä»ããå¿
è¦ãåºã¦ãããã ãã©ããããæå¤ã«ããã©ããããã
ã¨ãããã¨ã§ä¸ã¤Twitterã§ä»ãã¦ã¿ããã¨æã£ã¦ã¹ã¯ãªããæ¸ãã¦ã¿ããrubyã§ï¼-)
以ä¸ã®ã½ã¼ã¹ãhoge.rbã¨ãã§ä¿åãã¦ãruby hoge.rb userid password 2007-04-01 ãã¨ãã§å®è¡
ä»ããä»äºã !!ãè¦ã¤ãããéå§ãä»äºçµãã£ã!!ãè¦ã¤ãããçµäºæéã¨ãã¦ä¿åããã¦ãcsvåºå DETH
ãããããã ããTwitterã¨APIã使ã£ã¦ãã«ããã«ããã£ã¦ãã®ãè¦ãã¨æããã©ãTwitterã¦ã¾ãã«ã©ã¤ããã°ã ãããæ£ç´ã©ã¤ããã°ã®è©±ãããããæ¬ã§è¦ã¦ã¦ããã¾ãã¡å®æããããªãã£ããã©ãå®éã«ãã£ã¦ã¿ãã¨è¯ããã
require 'rexml/document' require 'date' require 'net/http' Net::HTTP.version_1_2 class Twitter @@URL = {:host=>"twitter.com", :status=>"/statuses"} @@URL.merge!({ :user_timeline => @@URL[:status]+"/user_timeline", :friends_timeline => @@URL[:status]+"/friends_timeline", :public_timeline => @@URL[:status]+"/public_timeline" }) def initialize(user, pass) @user, @pass = user, pass end def get(target, options={}) endpoint_url = @@URL[target] + (options["type"] ? options["type"] : ".xml") + "?hoge=hoge" options.each do |key, value| endpoint_url += "&"+URI.encode(key)+"="+URI.encode(value) end result=nil req = Net::HTTP::Get.new(endpoint_url) req.basic_auth @user, @pass Net::HTTP.start(@@URL[:host], 80){|http| res = http.request(req) result = parse(res.body) if res["status"]=="200 OK" } result end def parse(body) doc = REXML::Document.new(body) results = [] doc.each_element('/statuses/status') do |elem| id = elem.elements['id'].text.to_i time = DateTime.parse(elem.elements['created_at'].text) text = elem.elements['text'].text results << {:id=>id, :time=>time, :text=>text} end results end end class TwittimeSheet def initialize(twitter) @twitter = twitter end def get_date(date) work_time = {} max_date = date statuses = @twitter.get(:user_timeline, {"since"=> date.strftime("%a, %d %b %Y %X GMT+900") }) if(statuses) then statuses.each do |status| max_date = status[:time] if status[:time] > max_date work_time[status[:time].strftime("%Y-%m-%d")] ||= {} work_time[status[:time].strftime("%Y-%m-%d")][:start] = status[:time] if status[:text] =~ /.*ä»ããä»äºã .*/ work_time[status[:time].strftime("%Y-%m-%d")][:end] = status[:time] if status[:text] =~ /.*ä»äºçµãã£ã.*/ end end return work_time,max_date end def get_month(date_string) result = {} date = Date.parse(date_string) end_date = date while((date.month == end_date.month) && (date < Date.today)) do p "Now get..." + date.to_s work,max_date = get_date(date) result.merge!( work ) date = max_date.next sleep(1) end result end end user, pass, date = ARGV.shift, ARGV.shift, ARGV.shift unless date then p "ENTER!! user password date" else twitter = Twitter.new(user, pass) twittimeSheet = TwittimeSheet.new(twitter) result = twittimeSheet.get_month(date) work_csv = "date,start,end\n" result.each{|k,v| work_csv += "#{k},#{ v[:start].to_s },#{ v[:end].to_s }\n" } File.open("work_sheet_#{date}.csv","w") do |file| file.puts work_csv end p "output end work_sheet_#{date}.csv" end