Topcoder SRM開催日時取得プログラム

id:nise_nabeさんがSRMの開催日時を取ってくるプログラムをJavaで書いていたので、Rubyで書くとこうなるよってのを書いてみました。
RubyMechanizeというライブラリを使っています。

#!/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]


Topcoder SRM開催日時取得プログラム - nise_nabeの日記