battlenet_info 0.1.2 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/lib/battlenet_info.rb +20 -20
- data/lib/exceptions.rb +2 -2
- metadata +22 -10
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 27e137e29486a3824c7c4f1653b7ab3fe9ef2388
|
4
|
+
data.tar.gz: cb40755126edfebafbd9d6fe594023ad10c364eb
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 0cab450782e73e00d334d9585c7caaddefc317537172f6af38bc6912070335011b3fd10c86d45ab9235404cbfd9e5ff553ebaec73bef3dadc5b2ac40acca46eb
|
7
|
+
data.tar.gz: a626d94de1a67b5c75bddbefd530f6c7fac8f9deb37a0abe94d5a203c86a3c96e0cb4cabff119c1ee51f54272aeafa65728d5fc6515bffcb9dfdf185e2371a2f
|
data/lib/battlenet_info.rb
CHANGED
@@ -1,10 +1,13 @@
|
|
1
1
|
require 'net/http'
|
2
|
+
require "nokogiri"
|
2
3
|
require 'exceptions.rb'
|
3
4
|
|
4
5
|
class BattleNetInfo
|
5
6
|
|
6
7
|
EXCEPTION_MESSAGE = 'Profile not found or Battle.Net temporary unavailable'
|
7
8
|
|
9
|
+
attr_reader :profile_url, :ladder_url
|
10
|
+
|
8
11
|
def initialize(url)
|
9
12
|
@profile_url = url
|
10
13
|
splitter = '/' unless @profile_url[-1, 1] == '/'
|
@@ -19,40 +22,36 @@ class BattleNetInfo
|
|
19
22
|
@ladder_content ||= download_ladder_content
|
20
23
|
end
|
21
24
|
|
22
|
-
# <b>DEPRECATED:</b> Now calls from each method if needed
|
23
|
-
def download_data
|
24
|
-
warn "[DEPRECATION] `download_data` is deprecated. Now calls from each method if needed."
|
25
|
-
end
|
26
|
-
|
27
25
|
def valid_url?
|
28
26
|
(@profile_url =~ /http:\/\/\w+\.battle.net\/sc2\/\w+\/profile\/\d+\/\d\/\w+/i) != nil
|
29
27
|
end
|
30
28
|
|
31
29
|
def server
|
32
30
|
match_data = /http:\/\/(?<server>\w+)/i.match @profile_url
|
33
|
-
|
31
|
+
|
34
32
|
match_data[:server]
|
35
33
|
end
|
36
34
|
|
37
35
|
def player_name
|
38
36
|
match_data = /profile\/\d+\/\d\/(?<name>\w+)/i.match @profile_url
|
39
|
-
|
37
|
+
|
40
38
|
match_data[:name]
|
41
39
|
end
|
42
40
|
|
43
41
|
def achievement_points
|
44
|
-
download_profile_content if self.profile_content.empty?
|
45
42
|
match_data = /<h3>(?<achievement_points>\d+)<\/h3>/i.match self.profile_content
|
46
|
-
|
43
|
+
|
47
44
|
match_data[:achievement_points].to_i
|
48
45
|
end
|
49
46
|
|
50
47
|
def race
|
48
|
+
raise RaceTemporaryUnvailable
|
51
49
|
match_data = /class=\Wrace-(?<race>\w+)\W/i.match self.profile_content
|
52
|
-
|
50
|
+
|
53
51
|
match_data[:race]
|
54
52
|
end
|
55
53
|
|
54
|
+
# TODO: calculate loses again
|
56
55
|
def stats
|
57
56
|
match_data = /<div\s+class=\Wtooltip-title\W>#{self.player_name}<\/div>[\n\t\s]+<strong>[\w\s]+\W<\/strong>\s*\d+<br\s*\/>[\t\n\s]+<strong>[\w\s]+\W\s*<\/strong>\s*\w+\s*<\/div>[\t\n\s]+<\/td>[\t\n\s]+<td\sclass=\Walign-center\W>(?<points>\d+)<\/td>[\t\n\s]+<td\sclass=\Walign-center\W>(?<wins>\d+)<\/td>/mi.match self.ladder_content
|
58
57
|
|
@@ -68,8 +67,9 @@ class BattleNetInfo
|
|
68
67
|
end
|
69
68
|
|
70
69
|
def league
|
71
|
-
|
72
|
-
|
70
|
+
html_doc = Nokogiri::HTML(profile_content)
|
71
|
+
badge_data = html_doc.at_css("#season-snapshot").children.css(".badge-item").first.at_css("span.badge")[:class]
|
72
|
+
match_data = /badge-(?<league>\w+)\sbadge-medium-(?<top>\d+)/.match badge_data
|
73
73
|
|
74
74
|
"#{match_data[:league]}_#{match_data[:top]}"
|
75
75
|
end
|
@@ -77,7 +77,7 @@ class BattleNetInfo
|
|
77
77
|
def portrait_html_style(new_path)
|
78
78
|
match_data = /<span\s+class=\Wicon-frame\s+\W[\s\t\n]+(?<picture_style>\w+\=[\w\s\W]+portraits[\w\s\W]+90px;)\W>[\t\n\s]+<\/span>/im.match self.profile_content
|
79
79
|
|
80
|
-
match_data[:picture_style].sub('/sc2/
|
80
|
+
match_data[:picture_style].sub('http://media.blizzard.com/sc2/portraits/', new_path)
|
81
81
|
end
|
82
82
|
|
83
83
|
def to_hash
|
@@ -93,22 +93,22 @@ class BattleNetInfo
|
|
93
93
|
:rank => self.rank,
|
94
94
|
:league => self.league
|
95
95
|
}
|
96
|
-
|
97
|
-
player_data
|
98
96
|
end
|
99
97
|
|
100
98
|
private
|
101
99
|
|
102
100
|
def download_profile_content
|
103
|
-
|
104
|
-
raise ProfileNotFound.new(EXCEPTION_MESSAGE) unless response.is_a? Net::HTTPOK
|
105
|
-
@profile_content = response.body
|
101
|
+
@profile_content = get_content(@profile_url)
|
106
102
|
end
|
107
103
|
|
108
104
|
def download_ladder_content
|
109
|
-
|
105
|
+
@ladder_content = get_content(@ladder_url)
|
106
|
+
end
|
107
|
+
|
108
|
+
def get_content(url)
|
109
|
+
response = Net::HTTP.get_response(URI.parse(url)) if self.valid_url?
|
110
110
|
raise ProfileNotFound.new(EXCEPTION_MESSAGE) unless response.is_a? Net::HTTPOK
|
111
|
-
|
111
|
+
response.body
|
112
112
|
end
|
113
113
|
|
114
114
|
end
|
data/lib/exceptions.rb
CHANGED
@@ -1,2 +1,2 @@
|
|
1
|
-
class ProfileNotFound <
|
2
|
-
end
|
1
|
+
class ProfileNotFound < StandardError; end
|
2
|
+
class RaceTemporaryUnvailable < StandardError; end
|
metadata
CHANGED
@@ -1,16 +1,29 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: battlenet_info
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
5
|
-
prerelease:
|
4
|
+
version: 0.2.0
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Vitaly Tatarintsev
|
9
8
|
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date:
|
13
|
-
dependencies:
|
11
|
+
date: 2013-03-10 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: nokogiri
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ~>
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 1.5.6
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ~>
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 1.5.6
|
14
27
|
description: A simple Battle.Net info parser gem
|
15
28
|
email: Kalastiuz@gmail.com
|
16
29
|
executables: []
|
@@ -21,26 +34,25 @@ files:
|
|
21
34
|
- lib/exceptions.rb
|
22
35
|
homepage: https://github.com/ck3g/battlenet_info
|
23
36
|
licenses: []
|
37
|
+
metadata: {}
|
24
38
|
post_install_message:
|
25
39
|
rdoc_options: []
|
26
40
|
require_paths:
|
27
41
|
- lib
|
28
42
|
required_ruby_version: !ruby/object:Gem::Requirement
|
29
|
-
none: false
|
30
43
|
requirements:
|
31
|
-
- -
|
44
|
+
- - '>='
|
32
45
|
- !ruby/object:Gem::Version
|
33
46
|
version: '0'
|
34
47
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
35
|
-
none: false
|
36
48
|
requirements:
|
37
|
-
- -
|
49
|
+
- - '>='
|
38
50
|
- !ruby/object:Gem::Version
|
39
51
|
version: '0'
|
40
52
|
requirements: []
|
41
53
|
rubyforge_project:
|
42
|
-
rubygems_version:
|
54
|
+
rubygems_version: 2.0.0
|
43
55
|
signing_key:
|
44
|
-
specification_version:
|
56
|
+
specification_version: 4
|
45
57
|
summary: Battle.Net info
|
46
58
|
test_files: []
|