sightstone 0.1.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/lib/sightstone.rb +32 -0
- data/lib/sightstone/champion.rb +18 -0
- data/lib/sightstone/league.rb +48 -0
- data/lib/sightstone/masterybook.rb +36 -0
- data/lib/sightstone/match_history.rb +51 -0
- data/lib/sightstone/modules/champion_module.rb +47 -0
- data/lib/sightstone/modules/game_module.rb +50 -0
- data/lib/sightstone/modules/league_module.rb +53 -0
- data/lib/sightstone/modules/stats_module.rb +74 -0
- data/lib/sightstone/modules/summoner_module.rb +88 -0
- data/lib/sightstone/modules/team_module.rb +56 -0
- data/lib/sightstone/player_stats_summary.rb +30 -0
- data/lib/sightstone/ranked_stats.rb +40 -0
- data/lib/sightstone/runebook.rb +37 -0
- data/lib/sightstone/stat.rb +13 -0
- data/lib/sightstone/summoner.rb +16 -0
- data/lib/sightstone/team.rb +77 -0
- metadata +88 -0
checksums.yaml
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
---
|
|
2
|
+
SHA1:
|
|
3
|
+
metadata.gz: 587af5785d237527f2a8e316356ce84b8c39e544
|
|
4
|
+
data.tar.gz: 3a2cb00c736b6deb110b2f395a0d737e69e689fe
|
|
5
|
+
SHA512:
|
|
6
|
+
metadata.gz: e1e208bec4e4c1621cab7a4715ce688e49070366186e7a8d08b7d92039e153643f2ddcbb25b79a8777eed6c8961790531f6516a4ecb44fed4f8938e6047f5008
|
|
7
|
+
data.tar.gz: b4f3c49ea4792c541c5531e576ecc3128b47fd6c7ba19dd7b84f20ad294a002fd011d0f35e565f402f5801043531850795f10b1da80577d0e692abf00dcd98ec
|
data/lib/sightstone.rb
ADDED
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
require 'rest_client'
|
|
2
|
+
require 'JSON'
|
|
3
|
+
require 'sightstone/modules/champion_module'
|
|
4
|
+
require 'sightstone/modules/summoner_module'
|
|
5
|
+
require 'sightstone/modules/game_module'
|
|
6
|
+
require 'sightstone/modules/league_module'
|
|
7
|
+
require 'sightstone/modules/stats_module'
|
|
8
|
+
require 'sightstone/modules/team_module'
|
|
9
|
+
|
|
10
|
+
class Sightstone
|
|
11
|
+
attr_accessor :region, :api_key
|
|
12
|
+
attr_accessor :summoner, :champion, :game, :league, :stats, :team
|
|
13
|
+
|
|
14
|
+
def initialize(api_key, region)
|
|
15
|
+
@api_key = api_key
|
|
16
|
+
@region = region
|
|
17
|
+
|
|
18
|
+
@summoner = SummonerModule.new(self)
|
|
19
|
+
@champion = ChampionModule.new(self)
|
|
20
|
+
@game = GameModule.new(self)
|
|
21
|
+
@league = LeagueModule.new(self)
|
|
22
|
+
@stats = StatsModule.new(self)
|
|
23
|
+
@team = TeamModule.new(self)
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
# Error classes
|
|
28
|
+
class SightstoneApiException < Exception; end
|
|
29
|
+
|
|
30
|
+
class SummonerNotFoundException < SightstoneApiException; end
|
|
31
|
+
|
|
32
|
+
class SightstoneConnectionException < SightstoneApiException; end
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
class Champion
|
|
2
|
+
attr_accessor :active, :attackRank, :botEnabled, :botMmEnabled
|
|
3
|
+
attr_accessor :defenseRank, :difficultyRank, :freeToPlay, :id, :magicRank, :name, :rankedPlayEnabled
|
|
4
|
+
|
|
5
|
+
def initialize(data)
|
|
6
|
+
@active = data['active']
|
|
7
|
+
@attackRank = data['attackRank']
|
|
8
|
+
@botEnabled = data['botEnabled']
|
|
9
|
+
@defenseRank = data['defenseRank']
|
|
10
|
+
@difficultyRank = data['difficultyRank']
|
|
11
|
+
@freeToPlay = data['freeToPlay']
|
|
12
|
+
@id = data['id']
|
|
13
|
+
@magicRank = data['magicRank']
|
|
14
|
+
@name = data['name']
|
|
15
|
+
@rankedPlayEnabled = data['rankedPlayEnabled']
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
end
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
class League
|
|
2
|
+
attr_accessor :entries, :name, :queue, :tier, :timestamp
|
|
3
|
+
|
|
4
|
+
def initialize(data)
|
|
5
|
+
@name = data['name']
|
|
6
|
+
@queue = data['queue']
|
|
7
|
+
@tier = data['tier']
|
|
8
|
+
@timestamp = data['timestamp']
|
|
9
|
+
@entries = []
|
|
10
|
+
data['entries'].each do |entry|
|
|
11
|
+
@entries << LeagueItem.new(entry)
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
class LeagueItem
|
|
17
|
+
attr_accessor :isFreshBlood, :isHotStreak, :isActive, :isVeteran, :lastPlayed, :leagueName, :leaguePoints, :losses, :miniSeries, :playerOrTeamId, :playerOrTeamName, :queueType, :rank, :tier, :timeUntilDecay, :wins
|
|
18
|
+
|
|
19
|
+
def initialize(data)
|
|
20
|
+
@isFreshBlood=data['isFreshBlood']
|
|
21
|
+
@isHotStreak=data['isHotStreak']
|
|
22
|
+
@isActive=data['isActive']
|
|
23
|
+
@isVeteran=data['isVeteran']
|
|
24
|
+
@lastPlayed=data['lastPlayed']
|
|
25
|
+
@leagueName=data['leageuName']
|
|
26
|
+
@leaguePoints=data['leaguePoints']
|
|
27
|
+
@losses=data['losses']
|
|
28
|
+
@miniSeries= MiniSeries.new(data['miniSeries']) if data.has_key? 'miniSeries'
|
|
29
|
+
@playerOrTeamId=data['playerOrTeamId']
|
|
30
|
+
@playerOrTeamName=data['playerOrTeamName']
|
|
31
|
+
@queueType=data['queueType']
|
|
32
|
+
@rank=data['rank']
|
|
33
|
+
@tier=data['tier']
|
|
34
|
+
@timeUntilDecay=data['timeUntilDecay']
|
|
35
|
+
@wins=data['wins']
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
class MiniSeries
|
|
40
|
+
attr_accessor :losses, :wins, :target, :progress, :timeLeftToPlayMillis
|
|
41
|
+
def initialize(data)
|
|
42
|
+
@losses = data['losses']
|
|
43
|
+
@wins = data['wins']
|
|
44
|
+
@target = data['target']
|
|
45
|
+
@progress = data['progress']
|
|
46
|
+
@timeLeftToPlayMillis = data['timeLeftToPlayMillies']
|
|
47
|
+
end
|
|
48
|
+
end
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
class MasteryBook
|
|
2
|
+
attr_accessor :pages, :summonerId
|
|
3
|
+
|
|
4
|
+
def initialize(data)
|
|
5
|
+
@summonerId = data['summonerId']
|
|
6
|
+
@pages = []
|
|
7
|
+
data['pages'].each do |page|
|
|
8
|
+
@pages << MasteryPage.new(page)
|
|
9
|
+
end
|
|
10
|
+
end
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
class MasteryPage
|
|
14
|
+
attr_accessor :id, :talents, :name, :current
|
|
15
|
+
|
|
16
|
+
def initialize(data)
|
|
17
|
+
@id = data['id']
|
|
18
|
+
@name = data['name']
|
|
19
|
+
@current = data['current']
|
|
20
|
+
@talents = []
|
|
21
|
+
data['talents'].each do |talent|
|
|
22
|
+
@talents << Talent.new(talent)
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
class Talent
|
|
29
|
+
attr_accessor :id,:rank, :name
|
|
30
|
+
|
|
31
|
+
def initialize(data)
|
|
32
|
+
@id = data['id']
|
|
33
|
+
@name = data['name']
|
|
34
|
+
@rank = data['rank']
|
|
35
|
+
end
|
|
36
|
+
end
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
require 'sightstone/stat'
|
|
2
|
+
|
|
3
|
+
class MatchHistory
|
|
4
|
+
attr_accessor :games, :summonerId
|
|
5
|
+
|
|
6
|
+
def initialize(data)
|
|
7
|
+
@summonerId = data['summonerId']
|
|
8
|
+
@games = []
|
|
9
|
+
data['games'].each do |game|
|
|
10
|
+
games << Game.new(game)
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
class Game
|
|
16
|
+
attr_accessor :championId, :createDate, :createDateString, :fellowPlayers, :gameId, :gameMode, :gameType, :invalid, :level, :mapId, :spell1, :spell2, :statistics, :subType, :teamId
|
|
17
|
+
|
|
18
|
+
def initialize(data)
|
|
19
|
+
@championId=data['championId']
|
|
20
|
+
@createDate=data['createDate']
|
|
21
|
+
@createDateString=data['createDateString']
|
|
22
|
+
@fellowPlayers=[]
|
|
23
|
+
data['fellowPlayers'].each do |player|
|
|
24
|
+
@fellowPlayers << Player.new(player)
|
|
25
|
+
end
|
|
26
|
+
@gameId=data['gameId']
|
|
27
|
+
@gameMode=data['gameMode']
|
|
28
|
+
@gameType=data['gameType']
|
|
29
|
+
@invalid=data['invalid']
|
|
30
|
+
@level=data['level']
|
|
31
|
+
@mapId=data['mapId']
|
|
32
|
+
@spell1=data['spell1]']
|
|
33
|
+
@spell2=data['spell2']
|
|
34
|
+
@statistics = []
|
|
35
|
+
data['statistics'].each do |stat|
|
|
36
|
+
@statistics << Stat.new(stat)
|
|
37
|
+
end
|
|
38
|
+
@subType=data['subType']
|
|
39
|
+
@teamId=data['teamId']
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
class Player
|
|
44
|
+
attr_accessor :championId, :summonerId, :teamId
|
|
45
|
+
|
|
46
|
+
def initialize(data)
|
|
47
|
+
@championId = data['championId']
|
|
48
|
+
@summonerId = data['summonerId']
|
|
49
|
+
@teamId = data['teamId']
|
|
50
|
+
end
|
|
51
|
+
end
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
require 'sightstone/champion'
|
|
2
|
+
|
|
3
|
+
class ChampionModule
|
|
4
|
+
|
|
5
|
+
def initialize(sightstone)
|
|
6
|
+
@sightstone = sightstone
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
def champions(free_to_play=false)
|
|
10
|
+
uri = "https://prod.api.pvp.net/api/lol/#{@sightstone.region}/v1.1/champion"
|
|
11
|
+
response = _get_api_response(uri, {'freeToPlay' => free_to_play})
|
|
12
|
+
puts response
|
|
13
|
+
|
|
14
|
+
_parse_response(response) { |resp|
|
|
15
|
+
data = JSON.parse(resp)
|
|
16
|
+
champions = []
|
|
17
|
+
data['champions'].each do |champ|
|
|
18
|
+
champions << Champion.new(champ)
|
|
19
|
+
end
|
|
20
|
+
return champions
|
|
21
|
+
}
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
private
|
|
25
|
+
def _get_api_response(uri, headers={})
|
|
26
|
+
params = {'api_key' => @sightstone.api_key}.merge headers
|
|
27
|
+
RestClient.get(uri, headers={:params => params}) {|response, request, result| response }
|
|
28
|
+
rescue SocketError => e
|
|
29
|
+
nil
|
|
30
|
+
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def _parse_response(response, &block)
|
|
34
|
+
response_code = if response.nil?
|
|
35
|
+
500
|
|
36
|
+
else
|
|
37
|
+
response.code
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
if response_code == 200
|
|
41
|
+
block.call(response.body)
|
|
42
|
+
elsif response_code == 500
|
|
43
|
+
raise Sightstone::SightstoneConnectionException
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
end
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
require 'sightstone/summoner'
|
|
2
|
+
require 'sightstone/match_history'
|
|
3
|
+
|
|
4
|
+
class GameModule
|
|
5
|
+
|
|
6
|
+
def initialize(sightstone)
|
|
7
|
+
@sightstone = sightstone
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def recent(summoner)
|
|
11
|
+
id = if summoner.is_a? Summoner
|
|
12
|
+
summoner.id
|
|
13
|
+
else
|
|
14
|
+
summoner
|
|
15
|
+
end
|
|
16
|
+
uri = "http://prod.api.pvp.net/api/lol/#{@sightstone.region}/v1.1/game/by-summoner/#{id}/recent"
|
|
17
|
+
|
|
18
|
+
response = _get_api_response(uri)
|
|
19
|
+
_parse_response(response) { |resp|
|
|
20
|
+
data = JSON.parse(resp)
|
|
21
|
+
return MatchHistory.new(data)
|
|
22
|
+
}
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
private
|
|
26
|
+
|
|
27
|
+
def _get_api_response(uri)
|
|
28
|
+
params = {'api_key' => @sightstone.api_key}
|
|
29
|
+
RestClient.get(uri, headers={:params => params}) {|response, request, result| response }
|
|
30
|
+
rescue SocketError => e
|
|
31
|
+
nil
|
|
32
|
+
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def _parse_response(response, &block)
|
|
36
|
+
response_code = if response.nil?
|
|
37
|
+
500
|
|
38
|
+
else
|
|
39
|
+
response.code
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
if response_code == 200
|
|
43
|
+
block.call(response.body)
|
|
44
|
+
elsif response_code == 404
|
|
45
|
+
raise Sightstone::SummonerNotFoundException
|
|
46
|
+
elsif response_code == 500
|
|
47
|
+
raise Sightstone::SightstoneConnectionException
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
end
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
require 'sightstone/summoner'
|
|
2
|
+
require 'sightstone/league'
|
|
3
|
+
|
|
4
|
+
class LeagueModule
|
|
5
|
+
def initialize(sightstone)
|
|
6
|
+
@sightstone = sightstone
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
def league(summoner)
|
|
10
|
+
id = if summoner.is_a? Summoner
|
|
11
|
+
summoner.id
|
|
12
|
+
else
|
|
13
|
+
summoner
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
uri = "http://prod.api.pvp.net/api/#{@sightstone.region}/v2.1/league/by-summoner/#{id}"
|
|
17
|
+
response = _get_api_response(uri)
|
|
18
|
+
_parse_response(response) { |resp|
|
|
19
|
+
data = JSON.parse(resp)
|
|
20
|
+
leagueKeys = data.keys
|
|
21
|
+
leagues = []
|
|
22
|
+
leagueKeys.each do |key|
|
|
23
|
+
leagues << League.new(data[key])
|
|
24
|
+
end
|
|
25
|
+
return leagues
|
|
26
|
+
}
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
private
|
|
30
|
+
|
|
31
|
+
def _get_api_response(uri)
|
|
32
|
+
params = {'api_key' => @sightstone.api_key}
|
|
33
|
+
RestClient.get(uri, headers={:params => params}) {|response, request, result| response }
|
|
34
|
+
rescue SocketError => e
|
|
35
|
+
nil
|
|
36
|
+
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
def _parse_response(response, &block)
|
|
40
|
+
response_code = if response.nil?
|
|
41
|
+
500
|
|
42
|
+
else
|
|
43
|
+
response.code
|
|
44
|
+
end
|
|
45
|
+
if response_code == 200
|
|
46
|
+
block.call(response.body)
|
|
47
|
+
elsif response_code == 404
|
|
48
|
+
raise Sightstone::SummonerNotFoundException
|
|
49
|
+
elsif response_code == 500
|
|
50
|
+
raise Sightstone::SightstoneConnectionException
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
end
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
require 'sightstone/summoner'
|
|
2
|
+
require 'sightstone/player_stats_summary'
|
|
3
|
+
require 'sightstone/ranked_stats'
|
|
4
|
+
|
|
5
|
+
class StatsModule
|
|
6
|
+
def initialize(sightstone)
|
|
7
|
+
@sightstone = sightstone
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def summary(summoner, season=nil)
|
|
11
|
+
id = if summoner.is_a? Summoner
|
|
12
|
+
summoner.id
|
|
13
|
+
else
|
|
14
|
+
summoner
|
|
15
|
+
end
|
|
16
|
+
uri = "https://prod.api.pvp.net/api/lol/#{@sightstone.region}/v1.1/stats/by-summoner/#{id}/summary"
|
|
17
|
+
response = if season.nil?
|
|
18
|
+
_get_api_response(uri)
|
|
19
|
+
else
|
|
20
|
+
_get_api_response(uri, {'season' => season})
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
_parse_response(response) { |resp|
|
|
24
|
+
data = JSON.parse(resp)
|
|
25
|
+
return PlayerStatsSummaryList.new(data)
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def ranked(summoner, season=nil)
|
|
31
|
+
id = if summoner.is_a? Summoner
|
|
32
|
+
summoner.id
|
|
33
|
+
else
|
|
34
|
+
summoner
|
|
35
|
+
end
|
|
36
|
+
uri = "https://prod.api.pvp.net/api/lol/#{@sightstone.region}/v1.1/stats/by-summoner/#{id}/ranked"
|
|
37
|
+
response = if season.nil?
|
|
38
|
+
_get_api_response(uri)
|
|
39
|
+
else
|
|
40
|
+
_get_api_response(uri, {'season' => season})
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
_parse_response(response) { |resp|
|
|
44
|
+
data = JSON.parse(resp)
|
|
45
|
+
return RankedStats.new(data)
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
def _get_api_response(uri, header={})
|
|
51
|
+
params = {'api_key' => @sightstone.api_key}.merge header
|
|
52
|
+
RestClient.get(uri, headers={:params => params}) {|response, request, result| response }
|
|
53
|
+
rescue SocketError => e
|
|
54
|
+
nil
|
|
55
|
+
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
def _parse_response(response, &block)
|
|
59
|
+
response_code = if response.nil?
|
|
60
|
+
500
|
|
61
|
+
else
|
|
62
|
+
response.code
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
if response_code == 200
|
|
66
|
+
block.call(response.body)
|
|
67
|
+
elsif response_code == 404
|
|
68
|
+
raise Sightstone::SummonerNotFoundException
|
|
69
|
+
elsif response_code == 500
|
|
70
|
+
raise Sightstone::SightstoneConnectionException
|
|
71
|
+
end
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
end
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
require 'sightstone/summoner'
|
|
2
|
+
require 'sightstone/masterybook'
|
|
3
|
+
require 'sightstone/runebook'
|
|
4
|
+
|
|
5
|
+
class SummonerModule
|
|
6
|
+
def initialize(sightstone)
|
|
7
|
+
@sightstone = sightstone
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def summoner(name_or_id)
|
|
11
|
+
uri = if name_or_id.is_a? Integer
|
|
12
|
+
"http://prod.api.pvp.net/api/lol/#{@sightstone.region}/v1.1/summoner/#{name_or_id}"
|
|
13
|
+
else
|
|
14
|
+
"http://prod.api.pvp.net/api/lol/#{@sightstone.region}/v1.1/summoner/by-name/#{name_or_id}"
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
response = _get_api_response(uri)
|
|
18
|
+
_parse_response(response) { |resp|
|
|
19
|
+
data = JSON.parse(resp)
|
|
20
|
+
return Summoner.new(data)
|
|
21
|
+
}
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
def names(ids)
|
|
26
|
+
ids = ids.join(',')
|
|
27
|
+
uri = "http://prod.api.pvp.net/api/lol/#{@sightstone.region}/v1.1/summoner/#{ids}/name"
|
|
28
|
+
response = _get_api_response(uri)
|
|
29
|
+
_parse_response(response) { |resp|
|
|
30
|
+
data = JSON.parse(resp)
|
|
31
|
+
return data['summoners']
|
|
32
|
+
}
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def runes(summoner)
|
|
36
|
+
id = if summoner.is_a? Summoner
|
|
37
|
+
summoner.id
|
|
38
|
+
else
|
|
39
|
+
summoner
|
|
40
|
+
end
|
|
41
|
+
uri = "http://prod.api.pvp.net/api/lol/#{@sightstone.region}/v1.1/summoner/#{id}/runes"
|
|
42
|
+
response = _get_api_response(uri)
|
|
43
|
+
_parse_response(response) { |resp|
|
|
44
|
+
data = JSON.parse(resp)
|
|
45
|
+
return RuneBook.new(data)
|
|
46
|
+
}
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
def masteries(summoner)
|
|
50
|
+
id = if summoner.is_a? Summoner
|
|
51
|
+
summoner.id
|
|
52
|
+
else
|
|
53
|
+
summoner
|
|
54
|
+
end
|
|
55
|
+
uri = "http://prod.api.pvp.net/api/lol/#{@sightstone.region}/v1.1/summoner/#{id}/masteries"
|
|
56
|
+
response = _get_api_response(uri)
|
|
57
|
+
_parse_response(response) { |resp|
|
|
58
|
+
data = JSON.parse(resp)
|
|
59
|
+
return MasteryBook.new(data)
|
|
60
|
+
}
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
private
|
|
64
|
+
|
|
65
|
+
def _get_api_response(uri)
|
|
66
|
+
params = {'api_key' => @sightstone.api_key}
|
|
67
|
+
RestClient.get(uri, headers={:params => params}) {|response, request, result| response }
|
|
68
|
+
rescue SocketError => e
|
|
69
|
+
nil
|
|
70
|
+
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
def _parse_response(response, &block)
|
|
74
|
+
response_code = if response.nil?
|
|
75
|
+
500
|
|
76
|
+
else
|
|
77
|
+
response.code
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
if response_code == 200
|
|
81
|
+
block.call(response.body)
|
|
82
|
+
elsif response_code == 404
|
|
83
|
+
raise Sightstone::SummonerNotFoundException
|
|
84
|
+
elsif response_code == 500
|
|
85
|
+
raise Sightstone::SightstoneConnectionException
|
|
86
|
+
end
|
|
87
|
+
end
|
|
88
|
+
end
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
require 'sightstone/summoner'
|
|
2
|
+
require 'sightstone/team'
|
|
3
|
+
|
|
4
|
+
class TeamModule
|
|
5
|
+
def initialize(sightstone)
|
|
6
|
+
@sightstone = sightstone
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
def teams(summoner)
|
|
10
|
+
id = if summoner.is_a? Summoner
|
|
11
|
+
summoner.id
|
|
12
|
+
else
|
|
13
|
+
summoner
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
uri = "http://prod.api.pvp.net/api/#{@sightstone.region}/v2.1/team/by-summoner/#{id}"
|
|
17
|
+
|
|
18
|
+
response = _get_api_response(uri)
|
|
19
|
+
_parse_response(response) { |resp|
|
|
20
|
+
data = JSON.parse(resp)
|
|
21
|
+
teams = []
|
|
22
|
+
data.each do |team|
|
|
23
|
+
teams << Team.new(team)
|
|
24
|
+
end
|
|
25
|
+
return teams
|
|
26
|
+
}
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
private
|
|
32
|
+
|
|
33
|
+
def _get_api_response(uri)
|
|
34
|
+
params = {'api_key' => @sightstone.api_key}
|
|
35
|
+
RestClient.get(uri, headers={:params => params}) {|response, request, result| response }
|
|
36
|
+
rescue SocketError => e
|
|
37
|
+
nil
|
|
38
|
+
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
def _parse_response(response, &block)
|
|
42
|
+
response_code = if response.nil?
|
|
43
|
+
500
|
|
44
|
+
else
|
|
45
|
+
response.code
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
if response_code == 200
|
|
49
|
+
block.call(response.body)
|
|
50
|
+
elsif response_code == 404
|
|
51
|
+
raise Sightstone::SummonerNotFoundException
|
|
52
|
+
elsif response_code == 500
|
|
53
|
+
raise Sightstone::SightstoneConnectionException
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
end
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
require 'sightstone/stat'
|
|
2
|
+
|
|
3
|
+
class PlayerStatsSummaryList
|
|
4
|
+
|
|
5
|
+
attr_accessor :summonerId, :playerStatSummaries
|
|
6
|
+
|
|
7
|
+
def initialize(data)
|
|
8
|
+
@summonerId = data['playerStatSummary']
|
|
9
|
+
@playerStatSummaries = []
|
|
10
|
+
data['playerStatSummaries'].each do |summary|
|
|
11
|
+
@playerStatSummaries << PlayerStatSummary.new(summary)
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
class PlayerStatSummary
|
|
17
|
+
attr_accessor :wins, :losses, :modifyDateStr, :modifyDate, :playerStatSummaryType, :aggregatedStats
|
|
18
|
+
|
|
19
|
+
def initialize(data)
|
|
20
|
+
@wins = data['wins']
|
|
21
|
+
@losses = data['losses']
|
|
22
|
+
@modifyDatStr = data['modifyDateStr']
|
|
23
|
+
@modifyDate = data['modifyDate']
|
|
24
|
+
@playerStatSummaryType = data['playerStatSummaryType']
|
|
25
|
+
@aggregatedStats = []
|
|
26
|
+
data['aggregatedStats'].each do |stat|
|
|
27
|
+
@aggregatedStats << Stat.new(data)
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
require 'sightstone/stat'
|
|
2
|
+
|
|
3
|
+
class RankedStats
|
|
4
|
+
attr_accessor :champions, :modifyData, :modifyDateStr, :summonerId
|
|
5
|
+
|
|
6
|
+
def initialize(data)
|
|
7
|
+
@summonerId = data['summonerId']
|
|
8
|
+
@modifyDate = data['modifyDate']
|
|
9
|
+
@modifyDateStr = data['modifyDateStr']
|
|
10
|
+
@champions = []
|
|
11
|
+
|
|
12
|
+
data['champions'].each do |champ|
|
|
13
|
+
@champions << ChampionStats.new(champ)
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
class ChampionStats
|
|
19
|
+
attr_accessor :id, :name, :stats
|
|
20
|
+
|
|
21
|
+
def initialize(data)
|
|
22
|
+
@id = data['id']
|
|
23
|
+
@name = data['name']
|
|
24
|
+
@stats = []
|
|
25
|
+
|
|
26
|
+
data['stats'].each do |stat|
|
|
27
|
+
@stats << ChampionStat.new(stat)
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
class ChampionStat < Stat
|
|
33
|
+
|
|
34
|
+
attr_accessor :count
|
|
35
|
+
|
|
36
|
+
def initialize(data)
|
|
37
|
+
super(data)
|
|
38
|
+
@count = data['c']
|
|
39
|
+
end
|
|
40
|
+
end
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
class RuneBook
|
|
2
|
+
attr_accessor :pages, :summonerId
|
|
3
|
+
|
|
4
|
+
def initialize(data)
|
|
5
|
+
@summonerId = data['summonerId']
|
|
6
|
+
@pages = []
|
|
7
|
+
data['pages'].each do |page|
|
|
8
|
+
@pages << RunePage.new(page)
|
|
9
|
+
end
|
|
10
|
+
end
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
class RunePage
|
|
14
|
+
attr_accessor :id, :slots, :name, :current
|
|
15
|
+
|
|
16
|
+
def initialize(data)
|
|
17
|
+
@id = data['id']
|
|
18
|
+
@name = data['name']
|
|
19
|
+
@current = data['current']
|
|
20
|
+
@slots = {}
|
|
21
|
+
data['slots'].each do |slot|
|
|
22
|
+
@slots[slot['runeSlotId']] = Rune.new(slot['rune'])
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
class Rune
|
|
29
|
+
attr_accessor :id, :description, :name, :tier
|
|
30
|
+
|
|
31
|
+
def initialize(data)
|
|
32
|
+
@id = data['id']
|
|
33
|
+
@description = data['description']
|
|
34
|
+
@name = data['name']
|
|
35
|
+
@tier = data['tier']
|
|
36
|
+
end
|
|
37
|
+
end
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
|
|
2
|
+
|
|
3
|
+
class Summoner
|
|
4
|
+
|
|
5
|
+
attr_accessor :name, :id, :profileIconId, :revisionDate, :level
|
|
6
|
+
|
|
7
|
+
def initialize(data)
|
|
8
|
+
@name = data['name']
|
|
9
|
+
@id = data['id']
|
|
10
|
+
@profileIconId = data['profileIconId']
|
|
11
|
+
@revisionDate = data['revisionDate']
|
|
12
|
+
@level = data['summonerLevel']
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
end
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
class Team
|
|
2
|
+
attr_accessor :teamStatSummary, :status, :tag, :roster, :lastGameDate, :modifyDate, :teamId, :timestamp, :lastJoinDate, :secondLastJoinDate, :matchHistory, :lastJoinedRankedTeamQueueDate, :name, :thirdLastJoinDate, :createDate
|
|
3
|
+
def initialize(data)
|
|
4
|
+
@status = data['status']
|
|
5
|
+
@tag = data['tag']
|
|
6
|
+
@roster = Roster.new(data['roster'])
|
|
7
|
+
@lastGameDate = data['lastGameDate']
|
|
8
|
+
@modifyDate = data['modifyDate']
|
|
9
|
+
@teamId = data['teamId']['fullId']
|
|
10
|
+
@timestamp = data['timestamp']
|
|
11
|
+
@lastJoinDate = data['lastJoinDate']
|
|
12
|
+
@secondLastJoinDate = data['secondLastJoinDate']
|
|
13
|
+
@matchHistory = []
|
|
14
|
+
data['matchHistory'].each do |game|
|
|
15
|
+
matchHistory << Game.new(game)
|
|
16
|
+
end
|
|
17
|
+
@lastJoinedRankedTeamQueueDate=data['lastJoinedRankedTeamQueueDate']
|
|
18
|
+
@name = data['name']
|
|
19
|
+
@thirdLastJoinDate = data['thirdLastJoinDate']
|
|
20
|
+
@createDate = data['createDate']
|
|
21
|
+
@teamStatSummary = []
|
|
22
|
+
data['teamStatSummary']['teamStatDetails'].each do |detail|
|
|
23
|
+
teamStatSummary << TeamStat.new(detail)
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
class Roster
|
|
30
|
+
attr_accessor :ownerId, :memberList
|
|
31
|
+
def initialize(data)
|
|
32
|
+
@ownerId = data['ownerId']
|
|
33
|
+
@memberList = []
|
|
34
|
+
data['memberList'].each do |m|
|
|
35
|
+
memberList << Member.new(m)
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
class Member
|
|
41
|
+
attr_accessor :joinDate, :inviteDate, :status, :playerId
|
|
42
|
+
def initialize(data)
|
|
43
|
+
@joinDate = data['joinDate']
|
|
44
|
+
@inviteDate = data['inviteDate']
|
|
45
|
+
@status = data['status']
|
|
46
|
+
@playerId = data['playerId']
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
class TeamStat
|
|
51
|
+
attr_accessor :wins, :losses, :averageGamesPlayed, :teamId, :teamStatType
|
|
52
|
+
def initialize(data)
|
|
53
|
+
@wins = data['wins']
|
|
54
|
+
@losses = data['losses']
|
|
55
|
+
@averageGamesPlayed = data['averageGamesPlayed']
|
|
56
|
+
@teamId = data['teamId']
|
|
57
|
+
@teamStatType = data['teamStatType']
|
|
58
|
+
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
class Game
|
|
63
|
+
attr_accessor :gameMode, :mapId, :assists, :opposingTeamName, :invalid, :deaths, :gameId, :kills, :win, :date, :opposingTeamKills
|
|
64
|
+
def initialize(data)
|
|
65
|
+
@gameMode = data['gameMode']
|
|
66
|
+
@mapId = data['mapId']
|
|
67
|
+
@assists = data['assists']
|
|
68
|
+
@opposingTeamName = data['opposingTeamName']
|
|
69
|
+
@invalid = data['invalid']
|
|
70
|
+
@deaths = data['deaths']
|
|
71
|
+
@gameId = data['gameId']
|
|
72
|
+
@kills = data['kills']
|
|
73
|
+
@win = data['win']
|
|
74
|
+
@date = data['date']
|
|
75
|
+
@opposingTeamKills = data['opposingTeamKills']
|
|
76
|
+
end
|
|
77
|
+
end
|
metadata
ADDED
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
|
2
|
+
name: sightstone
|
|
3
|
+
version: !ruby/object:Gem::Version
|
|
4
|
+
version: 0.1.0
|
|
5
|
+
platform: ruby
|
|
6
|
+
authors:
|
|
7
|
+
- Daniel Bauer
|
|
8
|
+
autorequire:
|
|
9
|
+
bindir: bin
|
|
10
|
+
cert_chain: []
|
|
11
|
+
date: 2012-12-12 00:00:00.000000000 Z
|
|
12
|
+
dependencies:
|
|
13
|
+
- !ruby/object:Gem::Dependency
|
|
14
|
+
name: rest-client
|
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
|
16
|
+
requirements:
|
|
17
|
+
- - '>='
|
|
18
|
+
- !ruby/object:Gem::Version
|
|
19
|
+
version: '0'
|
|
20
|
+
type: :runtime
|
|
21
|
+
prerelease: false
|
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
23
|
+
requirements:
|
|
24
|
+
- - '>='
|
|
25
|
+
- !ruby/object:Gem::Version
|
|
26
|
+
version: '0'
|
|
27
|
+
- !ruby/object:Gem::Dependency
|
|
28
|
+
name: json
|
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
|
30
|
+
requirements:
|
|
31
|
+
- - '>='
|
|
32
|
+
- !ruby/object:Gem::Version
|
|
33
|
+
version: '0'
|
|
34
|
+
type: :runtime
|
|
35
|
+
prerelease: false
|
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
37
|
+
requirements:
|
|
38
|
+
- - '>='
|
|
39
|
+
- !ruby/object:Gem::Version
|
|
40
|
+
version: '0'
|
|
41
|
+
description: Ruby wrapper for riots league of legends api
|
|
42
|
+
email: danijob88@googlemail.com
|
|
43
|
+
executables: []
|
|
44
|
+
extensions: []
|
|
45
|
+
extra_rdoc_files: []
|
|
46
|
+
files:
|
|
47
|
+
- lib/sightstone/champion.rb
|
|
48
|
+
- lib/sightstone/league.rb
|
|
49
|
+
- lib/sightstone/masterybook.rb
|
|
50
|
+
- lib/sightstone/match_history.rb
|
|
51
|
+
- lib/sightstone/modules/champion_module.rb
|
|
52
|
+
- lib/sightstone/modules/game_module.rb
|
|
53
|
+
- lib/sightstone/modules/league_module.rb
|
|
54
|
+
- lib/sightstone/modules/stats_module.rb
|
|
55
|
+
- lib/sightstone/modules/summoner_module.rb
|
|
56
|
+
- lib/sightstone/modules/team_module.rb
|
|
57
|
+
- lib/sightstone/player_stats_summary.rb
|
|
58
|
+
- lib/sightstone/ranked_stats.rb
|
|
59
|
+
- lib/sightstone/runebook.rb
|
|
60
|
+
- lib/sightstone/stat.rb
|
|
61
|
+
- lib/sightstone/summoner.rb
|
|
62
|
+
- lib/sightstone/team.rb
|
|
63
|
+
- lib/sightstone.rb
|
|
64
|
+
homepage: http://rubygems.org/gems/outrage
|
|
65
|
+
licenses:
|
|
66
|
+
- MIT
|
|
67
|
+
metadata: {}
|
|
68
|
+
post_install_message:
|
|
69
|
+
rdoc_options: []
|
|
70
|
+
require_paths:
|
|
71
|
+
- lib
|
|
72
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
|
73
|
+
requirements:
|
|
74
|
+
- - '>='
|
|
75
|
+
- !ruby/object:Gem::Version
|
|
76
|
+
version: '0'
|
|
77
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
78
|
+
requirements:
|
|
79
|
+
- - '>='
|
|
80
|
+
- !ruby/object:Gem::Version
|
|
81
|
+
version: '0'
|
|
82
|
+
requirements: []
|
|
83
|
+
rubyforge_project:
|
|
84
|
+
rubygems_version: 2.1.10
|
|
85
|
+
signing_key:
|
|
86
|
+
specification_version: 4
|
|
87
|
+
summary: Ruby wrapper for riots league of legends api
|
|
88
|
+
test_files: []
|