poj_org 0.1.1 → 0.1.2
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/poj_org.rb +23 -23
- data/lib/poj_org/problem.rb +14 -14
- data/lib/poj_org/source.rb +20 -15
- metadata +3 -3
data/lib/poj_org.rb
CHANGED
@@ -1,34 +1,34 @@
|
|
1
1
|
require 'net/http'
|
2
2
|
|
3
3
|
class PojOrg
|
4
|
-
|
5
|
-
|
6
|
-
|
4
|
+
@@user = nil
|
5
|
+
@@password = nil
|
6
|
+
@@authenticated = false
|
7
7
|
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
end
|
8
|
+
def self.authenticate(user, password)
|
9
|
+
if login(user, password)
|
10
|
+
@@user = user
|
11
|
+
@@password = password
|
12
|
+
@@authenticated = true
|
13
|
+
else
|
14
|
+
@@authenticated = false
|
16
15
|
end
|
16
|
+
end
|
17
17
|
|
18
|
-
|
19
|
-
|
20
|
-
|
18
|
+
def self.authenticated?
|
19
|
+
@@authenticated
|
20
|
+
end
|
21
21
|
|
22
|
-
|
22
|
+
private
|
23
23
|
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
24
|
+
def self.login(user = nil, password = nil)
|
25
|
+
login = Net::HTTP.post_form(
|
26
|
+
URI('http://poj.org/login'),
|
27
|
+
'user_id1' => user || @@user,
|
28
|
+
'password1' => password || @@password
|
29
|
+
)
|
30
|
+
login.body['failed'] ? false : login['set-cookie']
|
31
|
+
end
|
32
32
|
end
|
33
33
|
|
34
34
|
require 'poj_org/problem'
|
data/lib/poj_org/problem.rb
CHANGED
@@ -1,18 +1,18 @@
|
|
1
1
|
class PojOrg::Problem
|
2
|
-
|
3
|
-
|
4
|
-
|
2
|
+
def initialize(id)
|
3
|
+
@id = id
|
4
|
+
end
|
5
5
|
|
6
|
-
|
7
|
-
|
8
|
-
|
6
|
+
def url
|
7
|
+
"http://poj.org/problem?id=#{@id}"
|
8
|
+
end
|
9
9
|
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
10
|
+
def details
|
11
|
+
html = open(url).read
|
12
|
+
details = {
|
13
|
+
:title => html[/(?<=<div class="ptt" lang="en-US">).+?(?=<\/div>)/],
|
14
|
+
:time_limit_in_ms => html[/(?<=<b>Time Limit:<\/b>)\s*\d+/].to_i,
|
15
|
+
:memory_limit_in_kb => html[/(?<=<b>Memory Limit:<\/b>)\s*\d+/].to_i
|
16
|
+
}
|
17
|
+
end
|
18
18
|
end
|
data/lib/poj_org/source.rb
CHANGED
@@ -1,20 +1,25 @@
|
|
1
|
+
require 'open-uri'
|
1
2
|
require 'cgi'
|
2
3
|
|
3
4
|
class PojOrg::Source
|
4
|
-
|
5
|
-
|
6
|
-
|
5
|
+
def initialize(id)
|
6
|
+
@id = id
|
7
|
+
end
|
7
8
|
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
9
|
+
def url
|
10
|
+
"http://poj.org/showsource?solution_id=#{@id}"
|
11
|
+
end
|
12
|
+
|
13
|
+
def details
|
14
|
+
return nil unless PojOrg::authenticated?
|
15
|
+
cookie = PojOrg::login
|
16
|
+
html = open(url, 'Cookie' => cookie).read
|
17
|
+
details = {
|
18
|
+
:user => (/<td><b>User:.+?<a.+?>(.+?)<\/a><\/td>/).match(html)[1],
|
19
|
+
:time_in_ms => (/<td><b>Time:.+?(\d+)MS<\/td>/).match(html)[1].to_i,
|
20
|
+
:memory_in_kb => (/<td><b>Memory:.+?(\d+)K<\/td>/).match(html)[1].to_i,
|
21
|
+
:language => (/<td><b>Language:<\/b>\s*(.+?)<\/td>/).match(html)[1],
|
22
|
+
:source => CGI.unescapeHTML((/<pre.+?>(.+)<\/pre>/m).match(html)[1])
|
23
|
+
}
|
24
|
+
end
|
20
25
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: poj_org
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.2
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-08-
|
12
|
+
date: 2012-08-23 00:00:00.000000000 Z
|
13
13
|
dependencies: []
|
14
14
|
description: Fetch details of problem of source code from poj.org
|
15
15
|
email: pinepara@gmail.com
|
@@ -20,7 +20,7 @@ files:
|
|
20
20
|
- lib/poj_org.rb
|
21
21
|
- lib/poj_org/problem.rb
|
22
22
|
- lib/poj_org/source.rb
|
23
|
-
homepage:
|
23
|
+
homepage: https://github.com/pinepara/poj_org
|
24
24
|
licenses: []
|
25
25
|
post_install_message:
|
26
26
|
rdoc_options: []
|