Topcoder SRM開催日時取得プログラム
id:nise_nabeさんがSRMの開催日時を取ってくるプログラムをJavaで書いていたので、Rubyで書くとこうなるよってのを書いてみました。
RubyのMechanizeというライブラリを使っています。
#!/usr/bin/ruby require 'rubygems' require 'mechanize' class SRM attr_accessor :name attr_accessor :url attr_accessor :registration_time attr_accessor :competition_time def to_s "SRM[name=#{name},url=#{url},registrationTime=#{registration_time},competitionTime=#{competition_time}]" end end srms = [] agent = Mechanize.new calendar = agent.get('http://www.topcoder.com/tc?module=Static&d1=calendar&d2=thisMonth') calendar.search('div.srm > strong > a').each do |a| srm = SRM.new srm.name = a.inner_text srm.url = calendar.uri + a['href'] times = agent.get(srm.url).search('.statText').to_a.collect{|s| s.inner_text.strip } m,d,y = times[0].split('.') date = "#{y}/#{m}/#{d}" srm.registration_time = Time.parse("#{date} #{times[1]}") srm.competition_time = Time.parse("#{date} #{times[2]}") srms << srm end puts srms
出力はこんなかんじ。
SRM[name=SRM 490,url=http://www.topcoder.com/tc?module=MatchDetails&rd=14243,registrationTime=Wed Dec 08 22:00:00 +0900 2010,competitionTime=Thu Dec 09 01:02:00 +0900 2010]
SRM[name=Member SRM 491,url=http://www.topcoder.com/tc?module=MatchDetails&rd=14244,registrationTime=Sat Dec 18 23:00:00 +0900 2010,competitionTime=Sun Dec 19 02:02:00 +0900 2010]
SRM[name=SRM 492,url=http://www.topcoder.com/tc?module=MatchDetails&rd=14245,registrationTime=Wed Dec 29 08:00:00 +0900 2010,competitionTime=Wed Dec 29 11:02:00 +0900 2010]