blizzard_api 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.gitignore +12 -0
- data/.gitlab-ci.yml +28 -0
- data/.rubocop.yml +13 -0
- data/.rubocop_todo.yml +7 -0
- data/.travis.yml +7 -0
- data/CHANGELOG.md +4 -0
- data/Gemfile +8 -0
- data/Gemfile.lock +44 -0
- data/LICENSE.txt +21 -0
- data/README.md +208 -0
- data/Rakefile +12 -0
- data/bin/console +14 -0
- data/bin/setup +8 -0
- data/blizzard_api.gemspec +42 -0
- data/lib/blizzard_api.rb +14 -0
- data/lib/blizzard_api/configuration.rb +82 -0
- data/lib/blizzard_api/diablo.rb +76 -0
- data/lib/blizzard_api/diablo/community/act.rb +35 -0
- data/lib/blizzard_api/diablo/community/artisan.rb +38 -0
- data/lib/blizzard_api/diablo/community/character.rb +38 -0
- data/lib/blizzard_api/diablo/community/follower.rb +25 -0
- data/lib/blizzard_api/diablo/community/item.rb +26 -0
- data/lib/blizzard_api/diablo/community/item_type.rb +35 -0
- data/lib/blizzard_api/diablo/community/profile.rb +77 -0
- data/lib/blizzard_api/diablo/game_data/era.rb +21 -0
- data/lib/blizzard_api/diablo/game_data/generic_data_endpoint.rb +58 -0
- data/lib/blizzard_api/diablo/game_data/season.rb +21 -0
- data/lib/blizzard_api/diablo/request.rb +15 -0
- data/lib/blizzard_api/exception.rb +12 -0
- data/lib/blizzard_api/request.rb +182 -0
- data/lib/blizzard_api/starcraft.rb +40 -0
- data/lib/blizzard_api/starcraft/community/account.rb +23 -0
- data/lib/blizzard_api/starcraft/community/ladder.rb +34 -0
- data/lib/blizzard_api/starcraft/community/profile.rb +76 -0
- data/lib/blizzard_api/starcraft/game_data/league.rb +27 -0
- data/lib/blizzard_api/starcraft/request.rb +36 -0
- data/lib/blizzard_api/version.rb +6 -0
- data/lib/blizzard_api/wow.rb +167 -0
- data/lib/blizzard_api/wow/community/achievements.rb +45 -0
- data/lib/blizzard_api/wow/community/auction.rb +25 -0
- data/lib/blizzard_api/wow/community/boss.rb +35 -0
- data/lib/blizzard_api/wow/community/challenge.rb +35 -0
- data/lib/blizzard_api/wow/community/character.rb +103 -0
- data/lib/blizzard_api/wow/community/guild.rb +67 -0
- data/lib/blizzard_api/wow/community/item.rb +46 -0
- data/lib/blizzard_api/wow/community/mount.rb +24 -0
- data/lib/blizzard_api/wow/community/pets.rb +85 -0
- data/lib/blizzard_api/wow/community/pvp.rb +34 -0
- data/lib/blizzard_api/wow/community/quest.rb +25 -0
- data/lib/blizzard_api/wow/community/recipe.rb +25 -0
- data/lib/blizzard_api/wow/community/spell.rb +25 -0
- data/lib/blizzard_api/wow/community/zone.rb +35 -0
- data/lib/blizzard_api/wow/game_data/connected_realm.rb +37 -0
- data/lib/blizzard_api/wow/game_data/generic_data_endpoint.rb +58 -0
- data/lib/blizzard_api/wow/game_data/mythic_keystone_affix.rb +23 -0
- data/lib/blizzard_api/wow/game_data/playable_class.rb +62 -0
- data/lib/blizzard_api/wow/game_data/playable_specialization.rb +70 -0
- data/lib/blizzard_api/wow/game_data/power_type.rb +23 -0
- data/lib/blizzard_api/wow/game_data/race.rb +51 -0
- data/lib/blizzard_api/wow/game_data/realm.rb +48 -0
- data/lib/blizzard_api/wow/game_data/region.rb +49 -0
- data/lib/blizzard_api/wow/request.rb +16 -0
- metadata +198 -0
@@ -0,0 +1,21 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module BlizzardApi
|
4
|
+
module Diablo
|
5
|
+
##
|
6
|
+
# This class allows access to Diablo III era data
|
7
|
+
#
|
8
|
+
# @see https://develop.battle.net/documentation/api-reference/diablo-3-game-data-api
|
9
|
+
#
|
10
|
+
# You can get an instance of this class using the default region as follows:
|
11
|
+
# api_instance = BlizzardApi::Diablo.era
|
12
|
+
class Era < Diablo::GenericDataEndpoint
|
13
|
+
protected
|
14
|
+
|
15
|
+
def endpoint_setup
|
16
|
+
@endpoint = 'era'
|
17
|
+
@ttl = CACHE_TRIMESTER
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,58 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module BlizzardApi
|
4
|
+
module Diablo
|
5
|
+
# Generic endpoint to support most data requests with minor configurations
|
6
|
+
class GenericDataEndpoint < Diablo::Request
|
7
|
+
def initialize(region = nil)
|
8
|
+
super region
|
9
|
+
endpoint_setup
|
10
|
+
@ttl ||= CACHE_DAY
|
11
|
+
end
|
12
|
+
|
13
|
+
##
|
14
|
+
# Get information about the resource
|
15
|
+
#
|
16
|
+
# @!macro request_options
|
17
|
+
#
|
18
|
+
# @!macro response
|
19
|
+
def index(options = {})
|
20
|
+
api_request "#{base_url(:game_data)}/#{@endpoint}/", default_options.merge(options)
|
21
|
+
end
|
22
|
+
|
23
|
+
##
|
24
|
+
# Fetch all possible data for one of items listed by the {#index} using its *id*
|
25
|
+
#
|
26
|
+
# @param [Integer] id One of the IDs returned by the {#index}
|
27
|
+
# @!macro request_options
|
28
|
+
#
|
29
|
+
# @!macro response
|
30
|
+
def get(id, options = {})
|
31
|
+
api_request "#{base_url(:game_data)}/#{@endpoint}/#{id}", default_options.merge(options)
|
32
|
+
end
|
33
|
+
|
34
|
+
##
|
35
|
+
# Fetch leaderboard data for the current endpoint
|
36
|
+
#
|
37
|
+
# @param [Integer] id One of the IDs returned by the {index}
|
38
|
+
# @param [Integer] leaderboard_id Leaderboard id
|
39
|
+
# @!macro request_options
|
40
|
+
#
|
41
|
+
# @!macro response
|
42
|
+
def leaderboard(id, leaderboard_id, options = {})
|
43
|
+
opts = default_options.merge(options)
|
44
|
+
api_request "#{base_url(:game_data)}/#{@endpoint}/#{id}/leaderboard/#{leaderboard_id}", opts
|
45
|
+
end
|
46
|
+
|
47
|
+
protected
|
48
|
+
|
49
|
+
def endpoint_setup
|
50
|
+
raise NotImplementedError
|
51
|
+
end
|
52
|
+
|
53
|
+
def default_options
|
54
|
+
{ ttl: @ttl }
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module BlizzardApi
|
4
|
+
module Diablo
|
5
|
+
##
|
6
|
+
# This class allows access to Diablo III season data
|
7
|
+
#
|
8
|
+
# @see https://develop.battle.net/documentation/api-reference/diablo-3-game-data-api
|
9
|
+
#
|
10
|
+
# You can get an instance of this class using the default region as follows:
|
11
|
+
# api_instance = BlizzardApi::Diablo.season
|
12
|
+
class Season < Diablo::GenericDataEndpoint
|
13
|
+
protected
|
14
|
+
|
15
|
+
def endpoint_setup
|
16
|
+
@endpoint = 'season'
|
17
|
+
@ttl = CACHE_TRIMESTER
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module BlizzardApi
|
4
|
+
module Diablo
|
5
|
+
# World of Warcraft requests
|
6
|
+
class Request < BlizzardApi::Request
|
7
|
+
##
|
8
|
+
# @!macro regions
|
9
|
+
def initialize(region = nil)
|
10
|
+
super region
|
11
|
+
@game = 'd3'
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,182 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
##
|
4
|
+
# @!macro [new] request_options
|
5
|
+
# @param {Hash} options You can specify some options
|
6
|
+
# @option options [String] :region Overrides the default region for a single call
|
7
|
+
# @option options [String] :locale Overrides the default locale for a single call
|
8
|
+
# @option options [String] :namespace Overrides the default namespace for a single call
|
9
|
+
# @option options [String] :access_token Overrides the access_token for a single call
|
10
|
+
# @option options [Boolean] :ignore_cache If set to true the request will not use the cache
|
11
|
+
# @option options [Integer] :ttl Override the default time (in seconds) a request should be cached
|
12
|
+
|
13
|
+
##
|
14
|
+
# @!macro [new] regions
|
15
|
+
# @param {Symbol} region One of the valid API regions *:us*, *:eu*, *:ko*, and *:tw*
|
16
|
+
# @note This gem do not support nor will support China endpoints
|
17
|
+
|
18
|
+
##
|
19
|
+
# @!macro [new] response
|
20
|
+
# @return [OpenStruct,Array] API Response. The actual type of the returned object depends on the *format* option
|
21
|
+
# in the configuration module
|
22
|
+
|
23
|
+
##
|
24
|
+
# @!macro [new] complete
|
25
|
+
# Iterates through the {index} response data and fetch additional information using {get}, it results in a more
|
26
|
+
# complete set of data
|
27
|
+
# @note IT MAY PERFORM MANY REQUESTS TO FETCH ALL DATA
|
28
|
+
# @!macro request_options
|
29
|
+
# @!macro response
|
30
|
+
|
31
|
+
module BlizzardApi
|
32
|
+
##
|
33
|
+
# Simplifies the requests to Blizzard APIS
|
34
|
+
class Request
|
35
|
+
# One minute cache
|
36
|
+
CACHE_MINUTE = 60
|
37
|
+
# One hour cache
|
38
|
+
CACHE_HOUR = 60 * CACHE_MINUTE
|
39
|
+
# One day cache
|
40
|
+
CACHE_DAY = 24 * CACHE_HOUR
|
41
|
+
# One week cache
|
42
|
+
CACHE_WEEK = CACHE_DAY * 7
|
43
|
+
# One (commercial) month cache
|
44
|
+
CACHE_MONTH = CACHE_DAY * 30
|
45
|
+
# Three (commercial) months cache
|
46
|
+
CACHE_TRIMESTER = CACHE_MONTH * 3
|
47
|
+
|
48
|
+
##
|
49
|
+
# @!attribute region
|
50
|
+
# @return [String] Api region
|
51
|
+
attr_accessor :region
|
52
|
+
|
53
|
+
##
|
54
|
+
# @!macro regions
|
55
|
+
def initialize(region = nil)
|
56
|
+
self.region = region || BlizzardApi.region
|
57
|
+
@redis = Redis.new(host: BlizzardApi.redis_host, port: BlizzardApi.redis_port) if BlizzardApi.use_cache
|
58
|
+
# Use the shared access_token, or create one if it doesn't exists. This avoids unnecessary calls to create tokens.
|
59
|
+
@access_token = BlizzardApi.access_token || create_access_token
|
60
|
+
end
|
61
|
+
|
62
|
+
require 'net/http'
|
63
|
+
require 'uri'
|
64
|
+
require 'json'
|
65
|
+
require 'redis'
|
66
|
+
|
67
|
+
protected
|
68
|
+
|
69
|
+
def base_url(scope)
|
70
|
+
case scope
|
71
|
+
when :game_data
|
72
|
+
"https://#{region}.api.blizzard.com/data/#{@game}"
|
73
|
+
when :community
|
74
|
+
"https://#{region}.api.blizzard.com/#{@game}"
|
75
|
+
when :profile
|
76
|
+
"https://#{region}.api.blizzard.com/profile/#{@game}"
|
77
|
+
else
|
78
|
+
raise ArgumentError
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
##
|
83
|
+
# Returns a valid namespace string for consuming the api endpoints
|
84
|
+
#
|
85
|
+
# @param [Symbol] scope Scope of the namespace to be used. *:dynamic* or *:static*
|
86
|
+
def endpoint_namespace(scope)
|
87
|
+
case scope
|
88
|
+
when :dynamic
|
89
|
+
"dynamic-#{region}"
|
90
|
+
when :static
|
91
|
+
"static-#{region}"
|
92
|
+
else
|
93
|
+
raise ArgumentError, 'Invalid namespace scope'
|
94
|
+
end
|
95
|
+
end
|
96
|
+
|
97
|
+
def create_access_token
|
98
|
+
uri = URI.parse("https://#{BlizzardApi.region}.battle.net/oauth/token")
|
99
|
+
|
100
|
+
http = Net::HTTP.new(uri.host, uri.port)
|
101
|
+
http.use_ssl = true
|
102
|
+
|
103
|
+
request = Net::HTTP::Post.new(uri.path)
|
104
|
+
request.basic_auth(BlizzardApi.app_id, BlizzardApi.app_secret)
|
105
|
+
request['Content-Type'] = 'application/x-www-form-urlencoded'
|
106
|
+
request.set_form_data grant_type: 'client_credentials'
|
107
|
+
|
108
|
+
response = http.request(request)
|
109
|
+
BlizzardApi.access_token = JSON.parse(response.body)['access_token']
|
110
|
+
end
|
111
|
+
|
112
|
+
def request(url, options = {})
|
113
|
+
# Creates the whole url for request
|
114
|
+
parsed_url = URI.parse(url)
|
115
|
+
|
116
|
+
data = options[:ignore_cache] ? nil : find_in_cache(parsed_url.to_s)
|
117
|
+
# If data was found that means cache is enabled and valid
|
118
|
+
return format_response data if data
|
119
|
+
|
120
|
+
# Override access_token
|
121
|
+
@access_token = options[:access_token] if options.include? :access_token
|
122
|
+
|
123
|
+
response = consume_api parsed_url
|
124
|
+
|
125
|
+
unless options[:ignore_cache]
|
126
|
+
ttl = options[:ttl] || CACHE_DAY
|
127
|
+
save_in_cache parsed_url.to_s, response.body, ttl
|
128
|
+
end
|
129
|
+
|
130
|
+
format_response response.body
|
131
|
+
end
|
132
|
+
|
133
|
+
def api_request(uri, query_string = {})
|
134
|
+
# List of request options
|
135
|
+
options_key = %i[ignore_cache ttl format access_token]
|
136
|
+
|
137
|
+
# Separates request options from api fields and options. Any user-defined option will be treated as api field.
|
138
|
+
options = query_string.select { |k, _v| query_string.delete(k) || true if options_key.include? k }
|
139
|
+
|
140
|
+
# In case uri already have query string parameters joins them with &
|
141
|
+
if query_string.size.positive?
|
142
|
+
query_string = URI.encode_www_form(query_string, false)
|
143
|
+
uri = uri.include?('?') ? "#{uri}&#{query_string}" : "#{uri}?#{query_string}"
|
144
|
+
end
|
145
|
+
|
146
|
+
request uri, options
|
147
|
+
end
|
148
|
+
|
149
|
+
private
|
150
|
+
|
151
|
+
def consume_api(url)
|
152
|
+
# Creates a HTTP connection and request to ensure thread safety
|
153
|
+
http = Net::HTTP.new(url.host, url.port)
|
154
|
+
http.use_ssl = true
|
155
|
+
request = Net::HTTP::Get.new(url)
|
156
|
+
|
157
|
+
# Blizzard API documentation states the preferred way to send the access_token is using Bearer token on header
|
158
|
+
request['Authorization'] = "Bearer #{@access_token}"
|
159
|
+
|
160
|
+
# Executes the request
|
161
|
+
http.request(request).tap do |response|
|
162
|
+
raise ApiException.new 'Request failed', response.code unless response.code.to_i == 200
|
163
|
+
end
|
164
|
+
end
|
165
|
+
|
166
|
+
def save_in_cache(resource_url, data, ttl)
|
167
|
+
return nil unless BlizzardApi.use_cache
|
168
|
+
|
169
|
+
@redis.setex resource_url, ttl, data
|
170
|
+
end
|
171
|
+
|
172
|
+
def find_in_cache(resource_url)
|
173
|
+
return false unless BlizzardApi.use_cache
|
174
|
+
|
175
|
+
@redis.get resource_url if @redis.exists resource_url
|
176
|
+
end
|
177
|
+
|
178
|
+
def format_response(data)
|
179
|
+
JSON.parse(data, symbolize_names: true)
|
180
|
+
end
|
181
|
+
end
|
182
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module BlizzardApi
|
4
|
+
# Starcraft II related classes
|
5
|
+
module Starcraft
|
6
|
+
require_relative 'starcraft/request'
|
7
|
+
|
8
|
+
# Starcraft II data api
|
9
|
+
require_relative 'starcraft/game_data/league'
|
10
|
+
|
11
|
+
##
|
12
|
+
# @return {League}
|
13
|
+
def league
|
14
|
+
BlizzardApi::Starcraft::League.new
|
15
|
+
end
|
16
|
+
|
17
|
+
# Starcraft community api
|
18
|
+
require_relative 'starcraft/community/profile'
|
19
|
+
require_relative 'starcraft/community/ladder'
|
20
|
+
require_relative 'starcraft/community/account'
|
21
|
+
|
22
|
+
##
|
23
|
+
# @return {Profile}
|
24
|
+
def profile
|
25
|
+
BlizzardApi::Starcraft::Profile.new
|
26
|
+
end
|
27
|
+
|
28
|
+
##
|
29
|
+
# @return {Ladder}
|
30
|
+
def ladder
|
31
|
+
BlizzardApi::Starcraft::Ladder.new
|
32
|
+
end
|
33
|
+
|
34
|
+
##
|
35
|
+
# @return {Account}
|
36
|
+
def account
|
37
|
+
BlizzardApi::Starcraft::Account.new
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module BlizzardApi
|
4
|
+
module Starcraft
|
5
|
+
##
|
6
|
+
# This class allows access to Starcraft II league data
|
7
|
+
#
|
8
|
+
# @see https://develop.battle.net/documentation/api-reference/starcraft-2-game-data-api
|
9
|
+
#
|
10
|
+
# You can get an instance of this class using the default region as follows:
|
11
|
+
# api_instance = BlizzardApi::Starcraft.account
|
12
|
+
class Account < Starcraft::Request
|
13
|
+
##
|
14
|
+
# Returns information about a player account
|
15
|
+
#
|
16
|
+
# @param [Integer] account_id Account ID
|
17
|
+
# @!macro request_options
|
18
|
+
def player(account_id, options = {})
|
19
|
+
api_request "#{base_url(:community)}/player/#{account_id}", { ttl: CACHE_DAY }.merge(options)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module BlizzardApi
|
4
|
+
module Starcraft
|
5
|
+
##
|
6
|
+
# This class allows access to Starcraft II ladder data
|
7
|
+
#
|
8
|
+
# @see https://develop.battle.net/documentation/api-reference/starcraft-2-game-data-api
|
9
|
+
#
|
10
|
+
# You can get an instance of this class using the default region as follows:
|
11
|
+
# api_instance = BlizzardApi::Starcraft.ladder
|
12
|
+
class Ladder < Starcraft::Request
|
13
|
+
##
|
14
|
+
# Grandmaster endpoint
|
15
|
+
#
|
16
|
+
# @!macro sc2_regions
|
17
|
+
# @!macro request_options
|
18
|
+
def grandmaster(region_id, options = {})
|
19
|
+
reg = resolve_region(region_id)
|
20
|
+
api_request "#{base_url(:community)}/ladder/grandmaster/#{reg}", { ttl: CACHE_DAY }.merge(options)
|
21
|
+
end
|
22
|
+
|
23
|
+
##
|
24
|
+
# Season endpoint
|
25
|
+
#
|
26
|
+
# @!macro sc2_regions
|
27
|
+
# @!macro request_options
|
28
|
+
def season(region_id, options = {})
|
29
|
+
reg = resolve_region(region_id)
|
30
|
+
api_request "#{base_url(:community)}/ladder/season/#{reg}", { ttl: CACHE_DAY }.merge(options)
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
@@ -0,0 +1,76 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module BlizzardApi
|
4
|
+
module Starcraft
|
5
|
+
##
|
6
|
+
# This class allows access to Starcraft II profile data
|
7
|
+
#
|
8
|
+
# @see https://develop.battle.net/documentation/api-reference/starcraft-2-game-data-api
|
9
|
+
#
|
10
|
+
# You can get an instance of this class using the default region as follows:
|
11
|
+
# api_instance = BlizzardApi::Starcraft.profile
|
12
|
+
class Profile < Starcraft::Request
|
13
|
+
##
|
14
|
+
# Static profile data
|
15
|
+
#
|
16
|
+
# @!macro sc2_regions
|
17
|
+
# @!macro request_options
|
18
|
+
def static(region_id, options = {})
|
19
|
+
reg = resolve_region(region_id)
|
20
|
+
api_request "#{base_url(:community)}/static/profile/#{reg}", { ttl: CACHE_DAY }.merge(options)
|
21
|
+
end
|
22
|
+
|
23
|
+
##
|
24
|
+
# Metadata
|
25
|
+
#
|
26
|
+
# @!macro sc2_regions
|
27
|
+
# @param [Integer] realm_id Realm ID
|
28
|
+
# @param [Integer] profile_id Profile ID
|
29
|
+
# @!macro request_options
|
30
|
+
def metadata(region_id, realm_id, profile_id, options = {})
|
31
|
+
reg = resolve_region(region_id)
|
32
|
+
opts = { ttl: CACHE_DAY }.merge(options)
|
33
|
+
api_request "#{base_url(:community)}/metadata/profile/#{reg}/#{realm_id}/#{profile_id}", opts
|
34
|
+
end
|
35
|
+
|
36
|
+
##
|
37
|
+
# Profile data
|
38
|
+
#
|
39
|
+
# @!macro sc2_regions
|
40
|
+
# @param [Integer] realm_id Realm ID
|
41
|
+
# @param [Integer] profile_id Profile ID
|
42
|
+
# @!macro request_options
|
43
|
+
def profile(region_id, realm_id, profile_id, options = {})
|
44
|
+
reg = resolve_region(region_id)
|
45
|
+
opts = { ttl: CACHE_DAY }.merge(options)
|
46
|
+
api_request "#{base_url(:community)}/profile/#{reg}/#{realm_id}/#{profile_id}", opts
|
47
|
+
end
|
48
|
+
|
49
|
+
##
|
50
|
+
# Ladder summary
|
51
|
+
#
|
52
|
+
# @!macro sc2_regions
|
53
|
+
# @param [Integer] realm_id Realm ID
|
54
|
+
# @param [Integer] profile_id Profile ID
|
55
|
+
# @!macro request_options
|
56
|
+
def ladder_summary(region_id, realm_id, profile_id, options = {})
|
57
|
+
reg = resolve_region(region_id)
|
58
|
+
opts = { ttl: CACHE_DAY }.merge(options)
|
59
|
+
api_request "#{base_url(:community)}profile/#{reg}/#{realm_id}/#{profile_id}/ladder/summary ", opts
|
60
|
+
end
|
61
|
+
|
62
|
+
##
|
63
|
+
# Ladder data
|
64
|
+
#
|
65
|
+
# @!macro sc2_regions
|
66
|
+
# @param [Integer] realm_id Realm ID
|
67
|
+
# @param [Integer] profile_id Profile ID
|
68
|
+
# @!macro request_options
|
69
|
+
def ladder(region_id, realm_id, profile_id, ladder_id, options = {})
|
70
|
+
reg = resolve_region(region_id)
|
71
|
+
opts = { ttl: CACHE_DAY }.merge(options)
|
72
|
+
api_request "#{base_url(:community)}/profile/#{reg}/#{realm_id}/#{profile_id}/ladder/#{ladder_id}", opts
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|