albion-api 0.0.1

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.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: e270371de44a7af735659f767d31c8a24820385f
4
+ data.tar.gz: 1c21d9ea0beaab949b04d3ac6e48310120dae7d0
5
+ SHA512:
6
+ metadata.gz: 90260faab449f607d55b9019f98b1adb4062c32290efb4b87eb4166cfbce553cf713a39f5f6590e2ae1ac7863d55ea3cbfa43c081789fd73bc05600da7919e20
7
+ data.tar.gz: 62b7ee5085a557c573f91ba6bcd94b55de18db8393c7d317a50750cc3f4ad8198d128ea60f773b60428b8c4f7f10c64563ea86b4469fd49e77dabca21eceb7a1
@@ -0,0 +1,20 @@
1
+ require 'httparty'
2
+
3
+ BASE_API_URL = "https://gameinfo.albiononline.com/api/gameinfo".freeze
4
+
5
+ # this module contains all of the classes needed to make requests to the Albion Online API
6
+ module AlbionApi
7
+ class AlbionRequest
8
+ include HTTParty
9
+ base_uri BASE_API_URL
10
+ end
11
+
12
+ def self.base_api_url
13
+ BASE_API_URL
14
+ end
15
+ end
16
+
17
+ # require all of our classes that belong to this module
18
+ require 'albion-api/user_killboard.rb'
19
+ require 'albion-api/user_search.rb'
20
+ require 'albion-api/guild_search.rb'
@@ -0,0 +1,43 @@
1
+ module AlbionApi
2
+ # this class is used to look up information about a guild
3
+ class GuildSearch < AlbionRequest
4
+ def initialize(guild_name)
5
+ @guild_name = guild_name
6
+ end
7
+
8
+ def find
9
+ response = self.class.get("/search?q=#{guild_name}")
10
+ Response.new(response)
11
+ end
12
+
13
+ private
14
+
15
+ attr_accessor :guild_name
16
+
17
+ # the response class for the GuildSearch request
18
+ class Response
19
+ def initialize(response)
20
+ guild_info = response['guilds'][0]
21
+ @_guild_api_id = guild_info['Id']
22
+ @_alliance_name = guild_info['AllianceName']
23
+ @_alliance_api_id = guild_info['AllianceId']
24
+ end
25
+
26
+ def guild_api_id
27
+ @_guild_api_id
28
+ end
29
+
30
+ def alliance_name
31
+ @_alliance_name
32
+ end
33
+
34
+ def alliance_api_id
35
+ @_alliance_api_id
36
+ end
37
+
38
+ private
39
+
40
+ attr_accessor :_guild_api_id, :_alliance_name, :_alliance_api_id
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,83 @@
1
+ module AlbionApi
2
+ # this class can make the calls to the UserKillboard APIs
3
+ class UserKillboard < AlbionRequest
4
+ def initialize(character_api_id)
5
+ @character_api_id = character_api_id
6
+ end
7
+
8
+ def top_kills_in_range(start_time, end_time)
9
+ # get the difference between the end and start time
10
+ # determine how long ago it was from now, likely 1 day max
11
+ # make the top kills request with teh proper `range` param
12
+ # filter the raw response down to only those kills within the timestamp range
13
+ # return a response class
14
+ @raw_kills = []
15
+ page = 0
16
+ resp = top_kills
17
+ until resp.empty? do
18
+ @raw_kills.concat JSON.parse(resp.body)
19
+ page += 1
20
+ resp = top_kills(page)
21
+ end
22
+ Response.new(filter_kills(start_time, end_time))
23
+ end
24
+
25
+ private
26
+
27
+ attr_accessor :character_api_id, :raw_kills
28
+
29
+ def top_kills(page = 0)
30
+ offset = page * 51
31
+ self.class.get("/players/#{@character_api_id}/topkills?range=month&limit=51&offset=#{offset}")
32
+ end
33
+
34
+ def filter_kills(start_time, end_time)
35
+ @raw_kills.select do |kill|
36
+ Time.parse(kill['TimeStamp']).between?(start_time, end_time) && kill['GvGMatch'].nil?
37
+ end.flatten
38
+ end
39
+
40
+ # class that contains the relevant information about a killboard API response
41
+ class Response
42
+ def initialize(response)
43
+ @_group_members = extract_group_members(response)
44
+ @_items_dropped = extract_dropped_items(response)
45
+ @_players_killed = extract_players_killed(response)
46
+ end
47
+
48
+ def group_members
49
+ _group_members
50
+ end
51
+
52
+ def items_dropped
53
+ _items_dropped
54
+ end
55
+
56
+ def players_killed
57
+ _players_killed
58
+ end
59
+
60
+ private
61
+
62
+ attr_accessor :_group_members, :_items_dropped, :_players_killed
63
+
64
+ def extract_group_members(response)
65
+ response.collect { |kill| kill['GroupMembers'] }.flatten.collect do |member|
66
+ member['Name']
67
+ end
68
+ end
69
+
70
+ def extract_dropped_items(response)
71
+ response.collect { |kill| kill['Victim'] }.flatten.collect do |victim|
72
+ victim['Inventory'].concat(victim['Equipment'].values).compact
73
+ end
74
+ end
75
+
76
+ def extract_players_killed(response)
77
+ response.collect { |kill| kill['Victim'] }.flatten.collect do |victim|
78
+ victim['Name']
79
+ end
80
+ end
81
+ end
82
+ end
83
+ end
@@ -0,0 +1,32 @@
1
+ module AlbionApi
2
+ # this is the class used to search for users, namely to get their API ID
3
+ class UserSearch < AlbionRequest
4
+ def initialize(character_name)
5
+ @character_name = character_name
6
+ end
7
+
8
+ def find
9
+ response = self.class.get("/search?q=#{character_name}")
10
+ Response.new(response)
11
+ end
12
+
13
+ private
14
+
15
+ attr_accessor :character_name
16
+
17
+ # this class wraps the response from the API
18
+ class Response
19
+ def initialize(response)
20
+ @_api_id = response['players'][0]['Id']
21
+ end
22
+
23
+ def api_id
24
+ @_api_id
25
+ end
26
+
27
+ private
28
+
29
+ attr_accessor :_api_id
30
+ end
31
+ end
32
+ end
metadata ADDED
@@ -0,0 +1,47 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: albion-api
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Kyle Montag
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2017-10-02 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description: This is a gem that wraps the Albion Online API.
14
+ email: thekylemontag@gmail.com
15
+ executables: []
16
+ extensions: []
17
+ extra_rdoc_files: []
18
+ files:
19
+ - lib/albion-api.rb
20
+ - lib/albion-api/guild_search.rb
21
+ - lib/albion-api/user_killboard.rb
22
+ - lib/albion-api/user_search.rb
23
+ homepage: https://github.com/kmontag42/albion-api
24
+ licenses:
25
+ - MIT
26
+ metadata: {}
27
+ post_install_message:
28
+ rdoc_options: []
29
+ require_paths:
30
+ - lib
31
+ required_ruby_version: !ruby/object:Gem::Requirement
32
+ requirements:
33
+ - - ">="
34
+ - !ruby/object:Gem::Version
35
+ version: '0'
36
+ required_rubygems_version: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ requirements: []
42
+ rubyforge_project:
43
+ rubygems_version: 2.6.11
44
+ signing_key:
45
+ specification_version: 4
46
+ summary: A Ruby Library for the Albion Online API
47
+ test_files: []