class Atcoder
Public Class Methods
new()
click to toggle source
# File lib/atcoder_tools/atcoder.rb, line 7 def initialize @settings = Settings.new @agent = Mechanize.new @agent.user_agent_alias = 'Mac Mozilla' end
submit(task)
click to toggle source
# File lib/atcoder_tools/atcoder.rb, line 18 def self.submit(task) atcoder = Atcoder.new atcoder.login atcoder.submit(task) end
test_login(username, password)
click to toggle source
# File lib/atcoder_tools/atcoder.rb, line 13 def self.test_login(username, password) atcoder = Atcoder.new return atcoder.login(username=username, password=password) end
Public Instance Methods
login(username=nil, password=nil)
click to toggle source
# File lib/atcoder_tools/atcoder.rb, line 54 def login(username=nil, password=nil) username ||= @settings.credentials.username password ||= @settings.credentials.password response = nil log_debug "try login to atcoder" @agent.get("https://atcoder.jp/login") do |page| # 1つ目のフォームはログアウト用なので2つ目を使用 form = page.forms.last form.field_with(name: 'username').value = username form.field_with(name: 'password').value = password response = @agent.submit(form) end # print(response.response) res = response.body.include?("Welcome, #{username}.") if res log_debug "login secceed!" else log_warn "login falied!" end return res end
submit(task)
click to toggle source
引数はcontest, taskクラス
# File lib/atcoder_tools/atcoder.rb, line 30 def submit(task) response = nil language_id = nil case task.contest.language when "ruby" language_id = "4049" when "c++(gcc)" language_id = "4003" end @agent.get(task_url(task)) do |page| # 1つ目のフォームはログアウト用なので2つ目を使用 form = page.forms.last form.field_with(name: 'data.LanguageId').value = language_id form.field_with(name: 'sourceCode').value = task.code response = @agent.submit(form) end if response.code.to_i == 200 return true end return false end
task_url(task)
click to toggle source
引数はtaskクラス
# File lib/atcoder_tools/atcoder.rb, line 25 def task_url(task) "https://atcoder.jp/contests/#{task.contest.name}/tasks/#{task.contest.name}_#{task.name}" end