blizzard_api 0.2.1 → 0.2.2
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 +4 -4
- data/.rubocop.yml +4 -0
- data/.rubocop_todo.yml +0 -6
- data/CHANGELOG.md +3 -0
- data/Gemfile.lock +2 -2
- data/README.md +93 -34
- data/lib/blizzard_api/configuration.rb +32 -0
- data/lib/blizzard_api/request.rb +17 -10
- data/lib/blizzard_api/version.rb +1 -1
- data/lib/blizzard_api/wow.rb +111 -47
- data/lib/blizzard_api/wow/community/character.rb +1 -22
- data/lib/blizzard_api/wow/game_data/achievement.rb +101 -0
- data/lib/blizzard_api/wow/game_data/connected_realm.rb +1 -15
- data/lib/blizzard_api/wow/game_data/creature.rb +99 -0
- data/lib/blizzard_api/wow/game_data/generic_data_endpoint.rb +14 -7
- data/lib/blizzard_api/wow/{community → game_data}/guild.rb +42 -3
- data/lib/blizzard_api/wow/game_data/guild_crest.rb +50 -0
- data/lib/blizzard_api/wow/game_data/mount.rb +37 -0
- data/lib/blizzard_api/wow/game_data/mythic_keystone.rb +97 -0
- data/lib/blizzard_api/wow/game_data/mythic_keystone_leaderboard.rb +48 -0
- data/lib/blizzard_api/wow/game_data/mythic_raid_leaderboard.rb +28 -0
- data/lib/blizzard_api/wow/{community/pets.rb → game_data/pet.rb} +14 -1
- data/lib/blizzard_api/wow/game_data/playable_class.rb +10 -4
- data/lib/blizzard_api/wow/game_data/pvp_season.rb +53 -0
- data/lib/blizzard_api/wow/game_data/pvp_tier.rb +33 -0
- data/lib/blizzard_api/wow/game_data/race.rb +1 -15
- data/lib/blizzard_api/wow/game_data/realm.rb +0 -14
- data/lib/blizzard_api/wow/game_data/region.rb +0 -13
- data/lib/blizzard_api/wow/game_data/wow_token.rb +25 -0
- data/lib/blizzard_api/wow/profile/character_profile.rb +77 -0
- metadata +15 -6
- data/lib/blizzard_api/wow/community/achievements.rb +0 -45
- data/lib/blizzard_api/wow/community/mount.rb +0 -24
@@ -60,28 +60,7 @@ module BlizzardApi
|
|
60
60
|
|
61
61
|
opts = { ttl: CACHE_DAY, fields: fields.join(',') }.merge(options)
|
62
62
|
|
63
|
-
api_request "#{base_url(:community)}/character/#{realm}/#{
|
64
|
-
end
|
65
|
-
|
66
|
-
##
|
67
|
-
# Return the mythic keystone profile of a character
|
68
|
-
#
|
69
|
-
# @note This endpoint requires a user token obtained through the user authorization flow
|
70
|
-
# @see https://develop.battle.net/documentation/guides/using-oauth/authorization-code-flow
|
71
|
-
#
|
72
|
-
# @param realm [String] The character realm's slug
|
73
|
-
# @param character [String] The character name
|
74
|
-
# @param user_token [String] A token obtained by the authorization flow. See link below.
|
75
|
-
# @param season [Integer] Season ID if you want only a specific season or nil to include all.
|
76
|
-
# @!macro request_options
|
77
|
-
#
|
78
|
-
# @!macro response
|
79
|
-
def get_keystone_profile(realm, character, user_token, season = nil, options = {})
|
80
|
-
opts = { ttl: CACHE_HOUR, namespace: "profile-#{region}" }.merge(options)
|
81
|
-
opts[:access_token] = user_token
|
82
|
-
url = "#{base_url(:profile)}/character/#{realm}/#{URI.encode(character)}/mythic-keystone-profile"
|
83
|
-
url += "/season/#{season}" unless season.nil?
|
84
|
-
api_request url, opts
|
63
|
+
api_request "#{base_url(:community)}/character/#{CGI.escape(realm)}/#{CGI.escape(character)}", opts
|
85
64
|
end
|
86
65
|
|
87
66
|
##
|
@@ -0,0 +1,101 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module BlizzardApi
|
4
|
+
module Wow
|
5
|
+
##
|
6
|
+
# This class allows access to World of Warcraft achievements
|
7
|
+
#
|
8
|
+
# @see https://develop.battle.net/documentation/api-reference/world-of-warcraft-game-data-api
|
9
|
+
#
|
10
|
+
# You can get an instance of this class using the default region as follows:
|
11
|
+
# api_instance = BlizzardApi::Wow.achievement
|
12
|
+
class Achievement < Wow::GenericDataEndpoint
|
13
|
+
##
|
14
|
+
# Fetch all possible data for one of the items listed by the {#index} using its *id*
|
15
|
+
#
|
16
|
+
# @param id [Integer] One of the IDs returned by the {#index}
|
17
|
+
#
|
18
|
+
# @!macro request_options
|
19
|
+
# @option options [Boolean] :use_community_endpoint If set to true, this method will call the community endpoint
|
20
|
+
# instead of the data endpoint https://develop.battle.net/documentation/api-reference/world-of-warcraft-community-api
|
21
|
+
#
|
22
|
+
# @!macro response
|
23
|
+
def get(id, options = {})
|
24
|
+
return super id, options unless options.include? :use_community_endpoint
|
25
|
+
|
26
|
+
api_request "#{base_url(:community)}/achievement/#{id}", { ttl: CACHE_TRIMESTER }.merge(options)
|
27
|
+
end
|
28
|
+
|
29
|
+
##
|
30
|
+
# This method overrides the inherited default behavior to prevent high server load and fetch time
|
31
|
+
#
|
32
|
+
# @!macro response
|
33
|
+
def complete
|
34
|
+
raise BlizzardApi::ApiException, 'There are too many achievements to fetch complete data'
|
35
|
+
end
|
36
|
+
|
37
|
+
##
|
38
|
+
# Return a list of possible achievement categories.
|
39
|
+
#
|
40
|
+
# @!macro request_options
|
41
|
+
#
|
42
|
+
# @!macro response
|
43
|
+
def categories(options = {})
|
44
|
+
api_request "#{endpoint_uri('category')}/index", default_options.merge(options)
|
45
|
+
end
|
46
|
+
|
47
|
+
##
|
48
|
+
# Return a achievement category.
|
49
|
+
#
|
50
|
+
# @!macro request_options
|
51
|
+
#
|
52
|
+
# @!macro response
|
53
|
+
def category(id, options = {})
|
54
|
+
api_request "#{endpoint_uri('category')}/#{id}", default_options.merge(options)
|
55
|
+
end
|
56
|
+
|
57
|
+
##
|
58
|
+
# Return a list of possible character achievements.
|
59
|
+
# This endpoint uses a community endpoint. It is recommended to use the new data endpoint using {#index}.
|
60
|
+
# @see https://us.battle.net/forums/en/bnet/topic/20771546990
|
61
|
+
#
|
62
|
+
# @!macro request_options
|
63
|
+
#
|
64
|
+
# @!macro response
|
65
|
+
def character_achievement_index(options = {})
|
66
|
+
api_request "#{base_url(:community)}/data/character/achievements", { ttl: CACHE_TRIMESTER }.merge(options)
|
67
|
+
end
|
68
|
+
|
69
|
+
##
|
70
|
+
# Return a list of possible guild achievements
|
71
|
+
# This endpoint uses a community endpoint. It is recommended to use the new data endpoint using {#index}.
|
72
|
+
# @see https://us.battle.net/forums/en/bnet/topic/20771546990
|
73
|
+
#
|
74
|
+
# @!macro request_options
|
75
|
+
#
|
76
|
+
# @!macro response
|
77
|
+
def guild_achievement_index(options = {})
|
78
|
+
api_request "#{base_url(:community)}/data/guild/achievements", { ttl: CACHE_TRIMESTER }.merge(options)
|
79
|
+
end
|
80
|
+
|
81
|
+
##
|
82
|
+
# Fetch media assets for the specified achievement
|
83
|
+
#
|
84
|
+
# @!macro request_options
|
85
|
+
#
|
86
|
+
# @!macro response
|
87
|
+
def media(id, options = {})
|
88
|
+
api_request "#{base_url(:media)}/achievement/#{id}", default_options.merge(options)
|
89
|
+
end
|
90
|
+
|
91
|
+
protected
|
92
|
+
|
93
|
+
def endpoint_setup
|
94
|
+
@endpoint = 'achievement'
|
95
|
+
@namespace = endpoint_namespace :static
|
96
|
+
@collection = 'achievements'
|
97
|
+
@ttl = CACHE_TRIMESTER
|
98
|
+
end
|
99
|
+
end
|
100
|
+
end
|
101
|
+
end
|
@@ -8,22 +8,8 @@ module BlizzardApi
|
|
8
8
|
# @see https://develop.battle.net/documentation/api-reference/world-of-warcraft-game-data-api
|
9
9
|
#
|
10
10
|
# You can get an instance of this class using the default region as follows:
|
11
|
-
# api_instance = BlizzardApi::Wow.
|
11
|
+
# api_instance = BlizzardApi::Wow.connected_realm
|
12
12
|
class ConnectedRealm < Wow::GenericDataEndpoint
|
13
|
-
##
|
14
|
-
# @!macro complete
|
15
|
-
def complete(options = {})
|
16
|
-
[].tap do |data|
|
17
|
-
index_data = index options
|
18
|
-
index_data[:connected_realms].each do |realm|
|
19
|
-
realm_id = %r{connected-realm/([0-9]+)}.match(realm[:href])[1]
|
20
|
-
realm_data = get realm_id, options
|
21
|
-
realm_data.delete :_links
|
22
|
-
data.push realm_data
|
23
|
-
end
|
24
|
-
end
|
25
|
-
end
|
26
|
-
|
27
13
|
protected
|
28
14
|
|
29
15
|
def endpoint_setup
|
@@ -0,0 +1,99 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module BlizzardApi
|
4
|
+
module Wow
|
5
|
+
##
|
6
|
+
# This class allows access to World of Warcraft achievements
|
7
|
+
#
|
8
|
+
# @see https://develop.battle.net/documentation/api-reference/world-of-warcraft-game-data-api
|
9
|
+
#
|
10
|
+
# You can get an instance of this class using the default region as follows:
|
11
|
+
# api_instance = BlizzardApi::Wow.creature
|
12
|
+
class Creature < Wow::GenericDataEndpoint
|
13
|
+
def index
|
14
|
+
raise BlizzardApi::ApiException, 'Creatures endpoint doesn\'t have a index method'
|
15
|
+
end
|
16
|
+
|
17
|
+
def complete
|
18
|
+
raise BlizzardApi::ApiException, 'There are too many creatures to fetch complete data'
|
19
|
+
end
|
20
|
+
|
21
|
+
##
|
22
|
+
# Fetch all creature families
|
23
|
+
#
|
24
|
+
# @!macro request_options
|
25
|
+
#
|
26
|
+
# @!macro response
|
27
|
+
def families(options = {})
|
28
|
+
api_request "#{endpoint_uri('family')}/index", default_options.merge(options)
|
29
|
+
end
|
30
|
+
|
31
|
+
##
|
32
|
+
# Fetch all possible data for one of the items listed by the {#families} using its *id*
|
33
|
+
#
|
34
|
+
# @param id [Integer] Creature family id
|
35
|
+
#
|
36
|
+
# @!macro request_options
|
37
|
+
#
|
38
|
+
# @!macro response
|
39
|
+
def family(id, options = {})
|
40
|
+
api_request "#{endpoint_uri('family')}/#{id}", default_options.merge(options)
|
41
|
+
end
|
42
|
+
|
43
|
+
##
|
44
|
+
# Fetch media for one of the items listed by the {#families} using its *id*
|
45
|
+
#
|
46
|
+
# @param id [Integer] Creature family id
|
47
|
+
#
|
48
|
+
# @!macro request_options
|
49
|
+
#
|
50
|
+
# @!macro response
|
51
|
+
def family_media(id, options = {})
|
52
|
+
api_request "#{base_url(:media)}/creature-family/#{id}", default_options.merge(options)
|
53
|
+
end
|
54
|
+
|
55
|
+
##
|
56
|
+
# Fetch all creature types
|
57
|
+
#
|
58
|
+
# @!macro request_options
|
59
|
+
#
|
60
|
+
# @!macro response
|
61
|
+
def types(options = {})
|
62
|
+
api_request "#{endpoint_uri('type')}/index", default_options.merge(options)
|
63
|
+
end
|
64
|
+
|
65
|
+
##
|
66
|
+
# Fetch all possible data for one of the items listed by the {#types} using its *id*
|
67
|
+
#
|
68
|
+
# @param id [Integer] Creature type id
|
69
|
+
#
|
70
|
+
# @!macro request_options
|
71
|
+
#
|
72
|
+
# @!macro response
|
73
|
+
def type(id, options = {})
|
74
|
+
api_request "#{endpoint_uri('type')}/#{id}", default_options.merge(options)
|
75
|
+
end
|
76
|
+
|
77
|
+
##
|
78
|
+
# Fetch media for one of the items listed by the {#types} using its *id*
|
79
|
+
#
|
80
|
+
# @param id [Integer] Creature type id
|
81
|
+
#
|
82
|
+
# @!macro request_options
|
83
|
+
#
|
84
|
+
# @!macro response
|
85
|
+
def display_media(id, options = {})
|
86
|
+
api_request "#{base_url(:media)}/creature-display/#{id}", default_options.merge(options)
|
87
|
+
end
|
88
|
+
|
89
|
+
protected
|
90
|
+
|
91
|
+
def endpoint_setup
|
92
|
+
@endpoint = 'creature'
|
93
|
+
@namespace = endpoint_namespace :static
|
94
|
+
@collection = 'achievements'
|
95
|
+
@ttl = CACHE_TRIMESTER
|
96
|
+
end
|
97
|
+
end
|
98
|
+
end
|
99
|
+
end
|
@@ -19,33 +19,40 @@ module BlizzardApi
|
|
19
19
|
# @!macro request_options
|
20
20
|
# @!macro response
|
21
21
|
def index(options = {})
|
22
|
-
api_request "#{
|
22
|
+
api_request "#{endpoint_uri}/index", default_options.merge(options)
|
23
23
|
end
|
24
24
|
|
25
25
|
##
|
26
|
-
# Fetch all possible data for one of items listed by the {#index} using its *id*
|
26
|
+
# Fetch all possible data for one of the items listed by the {#index} using its *id*
|
27
27
|
#
|
28
28
|
# @param id [Integer] One of the IDs returned by the {#index}
|
29
29
|
# @!macro request_options
|
30
30
|
#
|
31
31
|
# @!macro response
|
32
32
|
def get(id, options = {})
|
33
|
-
api_request "#{
|
33
|
+
api_request "#{endpoint_uri}/#{id}", default_options.merge(options)
|
34
34
|
end
|
35
35
|
|
36
36
|
##
|
37
37
|
# @!macro complete
|
38
38
|
def complete(options = {})
|
39
|
-
|
40
|
-
|
41
|
-
collection.each do |item|
|
42
|
-
item.
|
39
|
+
[].tap do |complete_data|
|
40
|
+
index_data = index options
|
41
|
+
index_data[@collection.to_sym].each do |item|
|
42
|
+
link = item.key?(:key) ? item[:key][:href] : item[:href]
|
43
|
+
item_data = request link
|
44
|
+
complete_data.push item_data
|
43
45
|
end
|
44
46
|
end
|
45
47
|
end
|
46
48
|
|
47
49
|
protected
|
48
50
|
|
51
|
+
def endpoint_uri(variant = nil)
|
52
|
+
endpoint = variant ? "#{@endpoint}-#{variant}" : @endpoint
|
53
|
+
"#{base_url(:game_data)}/#{endpoint}"
|
54
|
+
end
|
55
|
+
|
49
56
|
def endpoint_setup
|
50
57
|
raise NotImplementedError, 'You must override this method to properly set up the endpoint'
|
51
58
|
end
|
@@ -6,6 +6,7 @@ module BlizzardApi
|
|
6
6
|
# This class allows access to World of Warcraft guild data
|
7
7
|
#
|
8
8
|
# @see https://develop.battle.net/documentation/api-reference/world-of-warcraft-community-api
|
9
|
+
# @see https://develop.battle.net/documentation/api-reference/world-of-warcraft-game-data-api
|
9
10
|
#
|
10
11
|
# You can get an instance of this class using the default region as follows:
|
11
12
|
# api_instance = BlizzardApi::Wow.guild
|
@@ -53,14 +54,52 @@ module BlizzardApi
|
|
53
54
|
# @param guild [String] The guild's name
|
54
55
|
# @param fields [Array<String>] An array containing all the fields you want to be included in the response.
|
55
56
|
# @!macro request_options
|
57
|
+
# @option options [Boolean] :use_community_endpoint If set to true, this method will call the community endpoint
|
58
|
+
# instead of the data endpoint https://develop.battle.net/documentation/api-reference/world-of-warcraft-community-api
|
56
59
|
#
|
57
60
|
# @!macro response
|
58
|
-
def get(realm, guild,
|
59
|
-
|
61
|
+
def get(realm, guild, options = {}, fields = [])
|
62
|
+
return guild_request(realm, guild, options) unless options.include? :use_community_endpoint
|
60
63
|
|
64
|
+
validate_fields fields if options.include? :validate_fields
|
61
65
|
opts = { ttl: CACHE_DAY, fields: fields.join(',') }.merge(options)
|
66
|
+
api_request "#{base_url(:community)}/guild/#{CGI.escape(realm)}/#{CGI.escape(guild)}", opts
|
67
|
+
end
|
68
|
+
|
69
|
+
##
|
70
|
+
# Return all guild members for a specified guild
|
71
|
+
#
|
72
|
+
# @param realm [String] The guild realm's slug
|
73
|
+
# @param guild [String] The guild's name
|
74
|
+
#
|
75
|
+
# @!macro request_options
|
76
|
+
#
|
77
|
+
# @!macro response
|
78
|
+
def roster(realm, guild, options = {})
|
79
|
+
guild_request realm, guild, options, 'roster'
|
80
|
+
end
|
81
|
+
|
82
|
+
##
|
83
|
+
# Return all guild achievements for a specified guild
|
84
|
+
#
|
85
|
+
# @param realm [String] The guild realm's slug
|
86
|
+
# @param guild [String] The guild's name
|
87
|
+
#
|
88
|
+
# @!macro request_options
|
89
|
+
#
|
90
|
+
# @!macro response
|
91
|
+
def achievements(realm, guild, options = {})
|
92
|
+
guild_request realm, guild, options, 'achievements'
|
93
|
+
end
|
94
|
+
|
95
|
+
private
|
62
96
|
|
63
|
-
|
97
|
+
def guild_request(realm, guild, options = {}, variant = nil)
|
98
|
+
realm = CGI.escape string_to_slug(realm)
|
99
|
+
guild = CGI.escape string_to_slug(guild)
|
100
|
+
url = "#{base_url(:game_data)}/guild/#{realm}/#{guild}"
|
101
|
+
url += "/#{variant}" if variant
|
102
|
+
api_request url, { ttl: CACHE_DAY, namespace: endpoint_namespace(:profile) }.merge(options)
|
64
103
|
end
|
65
104
|
end
|
66
105
|
end
|
@@ -0,0 +1,50 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module BlizzardApi
|
4
|
+
module Wow
|
5
|
+
##
|
6
|
+
# This class allows access to World of Warcraft guild crest data
|
7
|
+
#
|
8
|
+
# @see https://develop.battle.net/documentation/api-reference/world-of-warcraft-game-data-api
|
9
|
+
#
|
10
|
+
# You can get an instance of this class using the default region as follows:
|
11
|
+
# api_instance = BlizzardApi::Wow.guild_crest
|
12
|
+
class GuildCrest < Wow::GenericDataEndpoint
|
13
|
+
def get
|
14
|
+
raise BlizzardApi::ApiException, 'This endpoint doens\'t have a get method'
|
15
|
+
end
|
16
|
+
|
17
|
+
##
|
18
|
+
# Return guild border assets by its id
|
19
|
+
#
|
20
|
+
# @param id [Integer] Border id
|
21
|
+
#
|
22
|
+
# @!macro request_options
|
23
|
+
#
|
24
|
+
# @!macro response
|
25
|
+
def border_media(id, options = {})
|
26
|
+
api_request "#{base_url(:media)}/#{@endpoint}/border/#{id}", default_options.merge(options)
|
27
|
+
end
|
28
|
+
|
29
|
+
##
|
30
|
+
# Return guild embelm assets by its id
|
31
|
+
#
|
32
|
+
# @param id [Integer] Emblem id
|
33
|
+
#
|
34
|
+
# @!macro request_options
|
35
|
+
#
|
36
|
+
# @!macro response
|
37
|
+
def emblem_media(id, options = {})
|
38
|
+
api_request "#{base_url(:media)}/#{@endpoint}/emblem/#{id}", default_options.merge(options)
|
39
|
+
end
|
40
|
+
|
41
|
+
protected
|
42
|
+
|
43
|
+
def endpoint_setup
|
44
|
+
@endpoint = 'guild-crest'
|
45
|
+
@namespace = endpoint_namespace(:static)
|
46
|
+
@ttl = CACHE_TRIMESTER
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module BlizzardApi
|
4
|
+
module Wow
|
5
|
+
##
|
6
|
+
# This class allows access to World of Warcraft mounts
|
7
|
+
#
|
8
|
+
# @see https://develop.battle.net/documentation/api-reference/world-of-warcraft-game-data-api
|
9
|
+
#
|
10
|
+
# You can get an instance of this class using the default region as follows:
|
11
|
+
# api_instance = BlizzardApi::Wow.mount
|
12
|
+
class Mount < Wow::GenericDataEndpoint
|
13
|
+
##
|
14
|
+
# Returns a index of mounts
|
15
|
+
#
|
16
|
+
# @!macro request_options
|
17
|
+
# @option options [Boolean] :use_community_endpoint If set to true, this method will call the community endpoint
|
18
|
+
# instead of the data endpoint https://develop.battle.net/documentation/api-reference/world-of-warcraft-community-api
|
19
|
+
#
|
20
|
+
# @!macro response
|
21
|
+
def index(options = {})
|
22
|
+
return super options unless options.include? :use_community_endpoint
|
23
|
+
|
24
|
+
api_request "#{base_url(:community)}/mount/", { ttl: CACHE_TRIMESTER }.merge(options)
|
25
|
+
end
|
26
|
+
|
27
|
+
protected
|
28
|
+
|
29
|
+
def endpoint_setup
|
30
|
+
@endpoint = 'mount'
|
31
|
+
@namespace = endpoint_namespace :static
|
32
|
+
@collection = 'mounts'
|
33
|
+
@ttl = CACHE_TRIMESTER
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|