Class: Atcoder
Constant Summary
Constants included from Log
Class Method Summary collapse
Instance Method Summary collapse
-
#initialize ⇒ Atcoder
constructor
A new instance of Atcoder.
- #login(username = nil, password = nil) ⇒ Object
-
#submit(task) ⇒ Object
引数はcontest, taskクラス.
-
#task_url(task) ⇒ Object
引数はtaskクラス.
Methods included from Log
#log_debug, #log_error, #log_info, #log_warn
Constructor Details
#initialize ⇒ Atcoder
Returns a new instance of Atcoder.
7 8 9 10 11 |
# File 'lib/atcoder_tools/atcoder.rb', line 7 def initialize @settings = Settings.new @agent = Mechanize.new @agent.user_agent_alias = 'Mac Mozilla' end |
Class Method Details
.submit(task) ⇒ Object
18 19 20 21 22 |
# 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) ⇒ Object
13 14 15 16 |
# 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 |
Instance Method Details
#login(username = nil, password = nil) ⇒ Object
54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 |
# 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) ⇒ Object
引数はcontest, taskクラス
30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 |
# 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) ⇒ Object
引数はtaskクラス
25 26 27 |
# 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 |