sportradar-api 0.13.0 → 0.13.21
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/Gemfile.lock +4 -3
- data/lib/sportradar/api/baseball/game.rb +1 -1
- data/lib/sportradar/api/baseball/mlb/api.rb +1 -1
- data/lib/sportradar/api/basketball/game.rb +5 -4
- data/lib/sportradar/api/basketball/nba/game.rb +1 -1
- data/lib/sportradar/api/basketball/nba/quarter.rb +9 -2
- data/lib/sportradar/api/basketball/ncaamb/game.rb +5 -1
- data/lib/sportradar/api/basketball/ncaamb/half.rb +9 -0
- data/lib/sportradar/api/basketball/ncaamb.rb +2 -2
- data/lib/sportradar/api/basketball/play.rb +3 -1
- data/lib/sportradar/api/basketball/plays/base.rb +8 -1
- data/lib/sportradar/api/basketball/plays/jumpball_violation.rb +11 -0
- data/lib/sportradar/api/basketball/plays.rb +1 -0
- data/lib/sportradar/api/basketball/team.rb +1 -1
- data/lib/sportradar/api/football/ncaafb/game.rb +1 -1
- data/lib/sportradar/api/football/nfl/game.rb +1 -1
- data/lib/sportradar/api/images.rb +2 -4
- data/lib/sportradar/api/soccer/README.md +4 -0
- data/lib/sportradar/api/soccer/api.rb +1 -1
- data/lib/sportradar/api/soccer/event.rb +15 -14
- data/lib/sportradar/api/soccer/match.rb +161 -6
- data/lib/sportradar/api/soccer/player.rb +16 -4
- data/lib/sportradar/api/soccer/scoring.rb +71 -0
- data/lib/sportradar/api/soccer/team.rb +25 -12
- data/lib/sportradar/api/soccer/tournament.rb +26 -3
- data/lib/sportradar/api/soccer.rb +1 -0
- data/lib/sportradar/api/version.rb +1 -1
- metadata +5 -29
- data/lib/sportradar/api/soccer-old/boxscore.rb +0 -13
- data/lib/sportradar/api/soccer-old/category.rb +0 -17
- data/lib/sportradar/api/soccer-old/fact.rb +0 -61
- data/lib/sportradar/api/soccer-old/hierarchy.rb +0 -14
- data/lib/sportradar/api/soccer-old/match.rb +0 -55
- data/lib/sportradar/api/soccer-old/player.rb +0 -88
- data/lib/sportradar/api/soccer-old/ranking.rb +0 -13
- data/lib/sportradar/api/soccer-old/schedule.rb +0 -22
- data/lib/sportradar/api/soccer-old/season.rb +0 -14
- data/lib/sportradar/api/soccer-old/standing.rb +0 -13
- data/lib/sportradar/api/soccer-old/statistic.rb +0 -14
- data/lib/sportradar/api/soccer-old/summary.rb +0 -13
- data/lib/sportradar/api/soccer-old/team.rb +0 -63
- data/lib/sportradar/api/soccer-old/tournament.rb +0 -20
- data/lib/sportradar/api/soccer-old/tournament_group.rb +0 -35
- data/lib/sportradar/api/soccer-old/venue.rb +0 -21
- data/lib/sportradar/api/soccer-old.rb +0 -158
- data/soccer-old/boxscore_test.rb +0 -14
- data/soccer-old/hierarchy_test.rb +0 -14
- data/soccer-old/match_test.rb +0 -23
- data/soccer-old/player_test.rb +0 -40
- data/soccer-old/ranking_test.rb +0 -16
- data/soccer-old/schedule_test.rb +0 -24
- data/soccer-old/standing_test.rb +0 -14
- data/soccer-old/summary_test.rb +0 -14
- data/soccer-old/team_test.rb +0 -21
- data/soccer-old_test.rb +0 -184
|
@@ -10,6 +10,8 @@ module Sportradar
|
|
|
10
10
|
@response = data
|
|
11
11
|
@id = data['id'] if data['id']
|
|
12
12
|
@api = opts[:api]
|
|
13
|
+
@team = opts[:team]
|
|
14
|
+
|
|
13
15
|
@league_group = league_group || data['league_group'] || @api&.league_group
|
|
14
16
|
|
|
15
17
|
update(data, **opts)
|
|
@@ -34,16 +36,28 @@ module Sportradar
|
|
|
34
36
|
@jersey_number = data['jersey_number'] if data['jersey_number']
|
|
35
37
|
@preferred_foot = data['preferred_foot'] if data['preferred_foot']
|
|
36
38
|
@matches_played = data['matches_played'] if data['matches_played']
|
|
37
|
-
|
|
38
39
|
@stats = data['statistics'] if data['statistics']
|
|
39
|
-
|
|
40
40
|
@date_of_birth = Date.parse(data['date_of_birth']) if data['date_of_birth']
|
|
41
|
+
|
|
42
|
+
@team.update_player_stats(self, data['statistics']) if data['statistics'] && @team
|
|
43
|
+
if opts[:match]
|
|
44
|
+
@team.update_player_stats(self, data, opts[:match])
|
|
45
|
+
end
|
|
46
|
+
|
|
41
47
|
end
|
|
42
48
|
|
|
43
49
|
def display_name
|
|
44
50
|
@name || [@first_name, @last_name].join(' ')
|
|
45
51
|
end
|
|
46
52
|
|
|
53
|
+
def first_name
|
|
54
|
+
@name.split()[1]
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
def last_name
|
|
58
|
+
@name.split()[0].delete(',')
|
|
59
|
+
end
|
|
60
|
+
|
|
47
61
|
def api
|
|
48
62
|
@api || Sportradar::Api::Soccer::Api.new(league_group: @league_group)
|
|
49
63
|
end
|
|
@@ -67,9 +81,7 @@ module Sportradar
|
|
|
67
81
|
url, headers, options, timeout = api.get_request_info(path_profile)
|
|
68
82
|
{url: url, headers: headers, params: options, timeout: timeout, callback: method(:ingest_profile)}
|
|
69
83
|
end
|
|
70
|
-
|
|
71
84
|
end
|
|
72
|
-
|
|
73
85
|
end
|
|
74
86
|
end
|
|
75
87
|
end
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
module Sportradar
|
|
2
|
+
module Api
|
|
3
|
+
module Soccer
|
|
4
|
+
class Scoring < Data
|
|
5
|
+
attr_accessor :response, :api, :id, :home, :away, :scores
|
|
6
|
+
|
|
7
|
+
def initialize(data, **opts)
|
|
8
|
+
@api = opts[:api]
|
|
9
|
+
@match = opts[:match]
|
|
10
|
+
|
|
11
|
+
@scores = {}
|
|
12
|
+
@id = data['id']
|
|
13
|
+
|
|
14
|
+
update(data, **opts)
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def update(data, source: nil, **opts)
|
|
18
|
+
# new_scores = case source
|
|
19
|
+
# when :box
|
|
20
|
+
# parse_from_box(data)
|
|
21
|
+
# when :timeline
|
|
22
|
+
# parse_from_timeline(data)
|
|
23
|
+
# when :summary
|
|
24
|
+
# parse_from_box(data)
|
|
25
|
+
# else
|
|
26
|
+
# if data['period'] || data['half']
|
|
27
|
+
# parse_from_timeline(data)
|
|
28
|
+
# elsif data['team']
|
|
29
|
+
# parse_from_box(data)
|
|
30
|
+
# else # schedule requests
|
|
31
|
+
# {}
|
|
32
|
+
# end
|
|
33
|
+
# end
|
|
34
|
+
new_scores = parse_from_timeline(data)
|
|
35
|
+
# parse data structure
|
|
36
|
+
# handle data from team (all periods)
|
|
37
|
+
# handle data from period (both teams)
|
|
38
|
+
# handle data from match?
|
|
39
|
+
@scores.each { |k, v| v.merge!(new_scores.delete(k) || {} ) }
|
|
40
|
+
new_scores.each { |k, v| @scores.merge!(k => v) }
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
def goals(team_id)
|
|
44
|
+
@score[team_id].to_i
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
private
|
|
49
|
+
|
|
50
|
+
def parse_from_timeline(data)
|
|
51
|
+
if data['period_scores']
|
|
52
|
+
data['period_scores'].map do |hash|
|
|
53
|
+
[hash["number"], {"home"=>hash['home_score'], "away"=>hash['away_score']}]
|
|
54
|
+
end.to_h
|
|
55
|
+
else
|
|
56
|
+
{}
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
# def period_name
|
|
61
|
+
# 'period'
|
|
62
|
+
# end
|
|
63
|
+
|
|
64
|
+
def parse_from_summary(data)
|
|
65
|
+
#
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
end
|
|
69
|
+
end
|
|
70
|
+
end
|
|
71
|
+
end
|
|
@@ -2,10 +2,13 @@ module Sportradar
|
|
|
2
2
|
module Api
|
|
3
3
|
module Soccer
|
|
4
4
|
class Team < Data
|
|
5
|
-
attr_accessor :tournament_id
|
|
6
|
-
attr_reader :id, :league_group, :name, :country, :country_code, :abbreviation, :qualifier
|
|
5
|
+
attr_accessor :tournament_id, :venue, :player_stats
|
|
6
|
+
attr_reader :id, :league_group, :name, :country, :country_code, :abbreviation, :qualifier
|
|
7
7
|
alias :alias :abbreviation
|
|
8
|
-
|
|
8
|
+
alias :market :name
|
|
9
|
+
alias :display_name :name
|
|
10
|
+
alias :full_name :name
|
|
11
|
+
attr_reader :team_stats, :jerseys, :manager, :statistics
|
|
9
12
|
|
|
10
13
|
def initialize(data = {}, league_group: nil, **opts)
|
|
11
14
|
@response = data
|
|
@@ -14,6 +17,7 @@ module Sportradar
|
|
|
14
17
|
@league_group = league_group || data['league_group'] || @api&.league_group
|
|
15
18
|
|
|
16
19
|
@players_hash = {}
|
|
20
|
+
@player_stats = {}
|
|
17
21
|
@matches_hash = {}
|
|
18
22
|
|
|
19
23
|
update(data, **opts)
|
|
@@ -28,7 +32,6 @@ module Sportradar
|
|
|
28
32
|
update(data["team"])
|
|
29
33
|
end
|
|
30
34
|
|
|
31
|
-
|
|
32
35
|
@name = data['name'] if data['name']
|
|
33
36
|
@country = data['country'] if data['country']
|
|
34
37
|
@country_code = data['country_code'] if data['country_code']
|
|
@@ -36,11 +39,15 @@ module Sportradar
|
|
|
36
39
|
@qualifier = data['qualifier'] if data['qualifier']
|
|
37
40
|
@venue = Venue.new(data['venue']) if data['venue']
|
|
38
41
|
|
|
39
|
-
create_data(@players_hash, data['players'], klass: Player, api: api, team: self) if data['players']
|
|
40
|
-
create_data(@players_hash, data['player_statistics'], klass: Player, api: api, team: self) if data['player_statistics']
|
|
42
|
+
create_data(@players_hash, data['players'], klass: Player, api: api, team: self, **opts) if data['players']
|
|
43
|
+
create_data(@players_hash, data['player_statistics'], klass: Player, api: api, team: self, **opts) if data['player_statistics']
|
|
44
|
+
|
|
45
|
+
@team_stats = data['team_statistics'] if data['team_statistics']
|
|
41
46
|
|
|
42
|
-
#
|
|
43
|
-
|
|
47
|
+
# parse_players(data.dig('players'), opts[:match]) if data.dig('players')
|
|
48
|
+
if opts[:match]
|
|
49
|
+
opts[:match].update_stats(self, data['statistics']) if data['statistics']
|
|
50
|
+
end
|
|
44
51
|
|
|
45
52
|
create_data(@matches_hash, Soccer.parse_results(data['results']), klass: Match, api: api, team: self) if data['results']
|
|
46
53
|
create_data(@matches_hash, data['schedule'], klass: Match, api: api, team: self) if data['schedule']
|
|
@@ -54,10 +61,12 @@ module Sportradar
|
|
|
54
61
|
def get_tournament_id(data, **opts)
|
|
55
62
|
@tournament_id ||= if opts[:tournament]
|
|
56
63
|
opts[:tournament].id
|
|
57
|
-
elsif opts[:season]
|
|
58
|
-
opts[:season]
|
|
59
|
-
elsif opts[:match]
|
|
60
|
-
opts[:match]
|
|
64
|
+
elsif opts[:season]&.tournament_id
|
|
65
|
+
opts[:season]&.tournament_id
|
|
66
|
+
elsif opts[:match]&.tournament_id
|
|
67
|
+
opts[:match]&.tournament_id
|
|
68
|
+
elsif data['tournament_id']
|
|
69
|
+
data['tournament_id']
|
|
61
70
|
elsif data['tournament']
|
|
62
71
|
data.dig('tournament', 'id')
|
|
63
72
|
elsif data['season']
|
|
@@ -65,6 +74,10 @@ module Sportradar
|
|
|
65
74
|
end
|
|
66
75
|
end
|
|
67
76
|
|
|
77
|
+
def update_player_stats(player, stats, game = nil)
|
|
78
|
+
game ? game.update_player_stats(player, stats) : @player_stats.merge(player.id => stats.to_h.merge(player: player))
|
|
79
|
+
end
|
|
80
|
+
|
|
68
81
|
def players
|
|
69
82
|
@players_hash.values
|
|
70
83
|
end
|
|
@@ -2,7 +2,9 @@ module Sportradar
|
|
|
2
2
|
module Api
|
|
3
3
|
module Soccer
|
|
4
4
|
class Tournament < Data
|
|
5
|
-
attr_reader :id, :league_group, :name, :category
|
|
5
|
+
attr_reader :id, :league_group, :name, :category, :coverage_info, :live_coverage, :season_coverage_info
|
|
6
|
+
alias :display_name :name
|
|
7
|
+
alias :alias :name
|
|
6
8
|
|
|
7
9
|
def initialize(data = {}, league_group: nil, **opts)
|
|
8
10
|
@response = data
|
|
@@ -24,8 +26,10 @@ module Sportradar
|
|
|
24
26
|
update(data['tournament'])
|
|
25
27
|
end
|
|
26
28
|
|
|
27
|
-
@name
|
|
28
|
-
@category
|
|
29
|
+
@name = data["name"] || @name
|
|
30
|
+
@category = data['category'] || @category
|
|
31
|
+
@coverage_info = data['coverage_info'] || @coverage_info
|
|
32
|
+
@live_coverage = data.dig('coverage_info', 'live_coverage') || @live_coverage
|
|
29
33
|
|
|
30
34
|
parse_info(data)
|
|
31
35
|
parse_season(data)
|
|
@@ -38,6 +42,22 @@ module Sportradar
|
|
|
38
42
|
@seasons_hash.values
|
|
39
43
|
end
|
|
40
44
|
|
|
45
|
+
def schedule
|
|
46
|
+
return self if @schedule_retrieved
|
|
47
|
+
get_schedule
|
|
48
|
+
self
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
def year
|
|
52
|
+
if current_season&.year&.split('/')&.last
|
|
53
|
+
2000 + current_season.year.split('/').last.to_i
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
def current_season
|
|
58
|
+
seasons.detect(&:current?)
|
|
59
|
+
end
|
|
60
|
+
|
|
41
61
|
def standings(type = nil)
|
|
42
62
|
if type
|
|
43
63
|
@standings_hash[type]
|
|
@@ -68,6 +88,7 @@ module Sportradar
|
|
|
68
88
|
|
|
69
89
|
def parse_season(data)
|
|
70
90
|
if data['season_coverage_info']
|
|
91
|
+
@season_coverage_info = data['season_coverage_info'] if data['season_coverage_info']
|
|
71
92
|
data['season_coverage_info']['id'] ||= data['season_coverage_info'].delete('season_id')
|
|
72
93
|
create_data(@seasons_hash, data['season_coverage_info'], klass: Season, api: api, tournament: self)
|
|
73
94
|
end
|
|
@@ -150,6 +171,7 @@ module Sportradar
|
|
|
150
171
|
ingest_schedule(data)
|
|
151
172
|
end
|
|
152
173
|
def ingest_schedule(data)
|
|
174
|
+
@schedule_retrieved = true
|
|
153
175
|
update(data)
|
|
154
176
|
# TODO parse the rest of the data. keys: ["tournament", "sport_events"]
|
|
155
177
|
data
|
|
@@ -216,6 +238,7 @@ module Sportradar
|
|
|
216
238
|
'eu.uefa_champions_league' => "sr:tournament:7",
|
|
217
239
|
'eu.la_liga' => "sr:tournament:8",
|
|
218
240
|
'eu.eng_premier_league' => "sr:tournament:17",
|
|
241
|
+
'eu.premier_league' => "sr:tournament:17",
|
|
219
242
|
'eu.serie_a' => "sr:tournament:23",
|
|
220
243
|
'eu.ligue_1' => "sr:tournament:34",
|
|
221
244
|
'eu.bundesliga' => "sr:tournament:35",
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: sportradar-api
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.13.
|
|
4
|
+
version: 0.13.21
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Ben Eggett
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: exe
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date:
|
|
11
|
+
date: 2018-02-24 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: bundler
|
|
@@ -314,6 +314,7 @@ files:
|
|
|
314
314
|
- lib/sportradar/api/basketball/plays/free_throw_made.rb
|
|
315
315
|
- lib/sportradar/api/basketball/plays/free_throw_miss.rb
|
|
316
316
|
- lib/sportradar/api/basketball/plays/jumpball.rb
|
|
317
|
+
- lib/sportradar/api/basketball/plays/jumpball_violation.rb
|
|
317
318
|
- lib/sportradar/api/basketball/plays/kickball.rb
|
|
318
319
|
- lib/sportradar/api/basketball/plays/lane.rb
|
|
319
320
|
- lib/sportradar/api/basketball/plays/lineup_change.rb
|
|
@@ -432,24 +433,8 @@ files:
|
|
|
432
433
|
- lib/sportradar/api/odds.rb
|
|
433
434
|
- lib/sportradar/api/poll.rb
|
|
434
435
|
- lib/sportradar/api/request.rb
|
|
435
|
-
- lib/sportradar/api/soccer-old.rb
|
|
436
|
-
- lib/sportradar/api/soccer-old/boxscore.rb
|
|
437
|
-
- lib/sportradar/api/soccer-old/category.rb
|
|
438
|
-
- lib/sportradar/api/soccer-old/fact.rb
|
|
439
|
-
- lib/sportradar/api/soccer-old/hierarchy.rb
|
|
440
|
-
- lib/sportradar/api/soccer-old/match.rb
|
|
441
|
-
- lib/sportradar/api/soccer-old/player.rb
|
|
442
|
-
- lib/sportradar/api/soccer-old/ranking.rb
|
|
443
|
-
- lib/sportradar/api/soccer-old/schedule.rb
|
|
444
|
-
- lib/sportradar/api/soccer-old/season.rb
|
|
445
|
-
- lib/sportradar/api/soccer-old/standing.rb
|
|
446
|
-
- lib/sportradar/api/soccer-old/statistic.rb
|
|
447
|
-
- lib/sportradar/api/soccer-old/summary.rb
|
|
448
|
-
- lib/sportradar/api/soccer-old/team.rb
|
|
449
|
-
- lib/sportradar/api/soccer-old/tournament.rb
|
|
450
|
-
- lib/sportradar/api/soccer-old/tournament_group.rb
|
|
451
|
-
- lib/sportradar/api/soccer-old/venue.rb
|
|
452
436
|
- lib/sportradar/api/soccer.rb
|
|
437
|
+
- lib/sportradar/api/soccer/README.md
|
|
453
438
|
- lib/sportradar/api/soccer/api.rb
|
|
454
439
|
- lib/sportradar/api/soccer/event.rb
|
|
455
440
|
- lib/sportradar/api/soccer/fact.rb
|
|
@@ -457,6 +442,7 @@ files:
|
|
|
457
442
|
- lib/sportradar/api/soccer/lineup.rb
|
|
458
443
|
- lib/sportradar/api/soccer/match.rb
|
|
459
444
|
- lib/sportradar/api/soccer/player.rb
|
|
445
|
+
- lib/sportradar/api/soccer/scoring.rb
|
|
460
446
|
- lib/sportradar/api/soccer/season.rb
|
|
461
447
|
- lib/sportradar/api/soccer/standing.rb
|
|
462
448
|
- lib/sportradar/api/soccer/team.rb
|
|
@@ -464,16 +450,6 @@ files:
|
|
|
464
450
|
- lib/sportradar/api/soccer/tournament.rb
|
|
465
451
|
- lib/sportradar/api/soccer/venue.rb
|
|
466
452
|
- lib/sportradar/api/version.rb
|
|
467
|
-
- soccer-old/boxscore_test.rb
|
|
468
|
-
- soccer-old/hierarchy_test.rb
|
|
469
|
-
- soccer-old/match_test.rb
|
|
470
|
-
- soccer-old/player_test.rb
|
|
471
|
-
- soccer-old/ranking_test.rb
|
|
472
|
-
- soccer-old/schedule_test.rb
|
|
473
|
-
- soccer-old/standing_test.rb
|
|
474
|
-
- soccer-old/summary_test.rb
|
|
475
|
-
- soccer-old/team_test.rb
|
|
476
|
-
- soccer-old_test.rb
|
|
477
453
|
- sportradar-api.gemspec
|
|
478
454
|
homepage: https://github.com/beneggett/sportradar-api
|
|
479
455
|
licenses: []
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
module Sportradar
|
|
2
|
-
module Api
|
|
3
|
-
class Soccer::Boxscore < Data
|
|
4
|
-
attr_accessor :response, :matches
|
|
5
|
-
|
|
6
|
-
def initialize(data)
|
|
7
|
-
@response = data
|
|
8
|
-
@matches = parse_into_array(selector: response["boxscore"]["matches"]["match"], klass: Sportradar::Api::Soccer::Match) if response['boxscore'] && response['boxscore']['matches'] && response["boxscore"]["matches"]["match"]
|
|
9
|
-
end
|
|
10
|
-
|
|
11
|
-
end
|
|
12
|
-
end
|
|
13
|
-
end
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
module Sportradar
|
|
2
|
-
module Api
|
|
3
|
-
class Soccer::Category < Data
|
|
4
|
-
attr_accessor :response, :id, :name, :country_code, :country, :tournament_groups
|
|
5
|
-
|
|
6
|
-
def initialize(data)
|
|
7
|
-
@response = data
|
|
8
|
-
@id = data["id"]
|
|
9
|
-
@name = data["name"]
|
|
10
|
-
@country_code = data["country_code"]
|
|
11
|
-
@country = data["country"]
|
|
12
|
-
@tournament_groups = parse_into_array(selector: response["tournament_group"], klass: Sportradar::Api::Soccer::TournamentGroup) if response["tournament_group"]
|
|
13
|
-
end
|
|
14
|
-
|
|
15
|
-
end
|
|
16
|
-
end
|
|
17
|
-
end
|
|
@@ -1,61 +0,0 @@
|
|
|
1
|
-
module Sportradar
|
|
2
|
-
module Api
|
|
3
|
-
class Soccer::Fact < Data
|
|
4
|
-
|
|
5
|
-
attr_accessor :id, :type, :time, :updated_time, :scratch, :reference_id, :clock, :team_id, :description, :period, :x, :y, :player_id, :card, :injury_time, :home_score, :away_score, :player_out_id, :player_in_id, :penalty, :owngoal, :header, :assist1_id, :winner_id, :draw, :response
|
|
6
|
-
|
|
7
|
-
def initialize(data)
|
|
8
|
-
@response = data
|
|
9
|
-
@id = data["id"]
|
|
10
|
-
@type = data["type"]
|
|
11
|
-
@time = data["time"]
|
|
12
|
-
@updated_time = data["updated_time"]
|
|
13
|
-
@scratch = data["scratch"]
|
|
14
|
-
@reference_id = data["reference_id"]
|
|
15
|
-
@clock = data["clock"]
|
|
16
|
-
@team_id = data["team_id"]
|
|
17
|
-
@description = data["description"]
|
|
18
|
-
@period = data["period"]
|
|
19
|
-
@x = data["x"]
|
|
20
|
-
@y = data["y"]
|
|
21
|
-
@player_id = data["player_id"]
|
|
22
|
-
@card = data["card"]
|
|
23
|
-
@injury_time = data["injury_time"]
|
|
24
|
-
@home_score = data["home_score"]
|
|
25
|
-
@away_score = data["away_score"]
|
|
26
|
-
@player_out_id = data["player_out_id"]
|
|
27
|
-
@player_in_id = data["player_in_id"]
|
|
28
|
-
@penalty = data["penalty"]
|
|
29
|
-
@owngoal = data["owngoal"]
|
|
30
|
-
@header = data["header"]
|
|
31
|
-
@assist1_id = data["assist1_id"]
|
|
32
|
-
@winner_id = data["winner_id"]
|
|
33
|
-
@draw = data["draw"]
|
|
34
|
-
end
|
|
35
|
-
|
|
36
|
-
## Fact Types
|
|
37
|
-
# card
|
|
38
|
-
# corner_kick
|
|
39
|
-
# free_kick
|
|
40
|
-
# game_resumed
|
|
41
|
-
# goal
|
|
42
|
-
# goal_kick
|
|
43
|
-
# injury
|
|
44
|
-
# injury_return
|
|
45
|
-
# injury_time
|
|
46
|
-
# keeper_save
|
|
47
|
-
# match_ended
|
|
48
|
-
# match_started
|
|
49
|
-
# offside
|
|
50
|
-
# penalty_awarded
|
|
51
|
-
# penalty_missed
|
|
52
|
-
# period_over
|
|
53
|
-
# period_started
|
|
54
|
-
# shot_blocked
|
|
55
|
-
# shot_off_target
|
|
56
|
-
# shot_on_target
|
|
57
|
-
# substitution
|
|
58
|
-
# throwin
|
|
59
|
-
end
|
|
60
|
-
end
|
|
61
|
-
end
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
module Sportradar
|
|
2
|
-
module Api
|
|
3
|
-
class Soccer::Hierarchy < Data
|
|
4
|
-
attr_accessor :response, :categories
|
|
5
|
-
|
|
6
|
-
def initialize(data)
|
|
7
|
-
@response = data
|
|
8
|
-
@categories = parse_into_array(selector: response["category"], klass: Sportradar::Api::Soccer::Category) if response["category"]
|
|
9
|
-
end
|
|
10
|
-
|
|
11
|
-
end
|
|
12
|
-
end
|
|
13
|
-
end
|
|
14
|
-
|
|
@@ -1,55 +0,0 @@
|
|
|
1
|
-
module Sportradar
|
|
2
|
-
module Api
|
|
3
|
-
class Soccer::Match < Data
|
|
4
|
-
|
|
5
|
-
attr_accessor :id, :status, :scheduled, :scratched, :season_id, :reference_id, :category, :tournament_group, :tournament, :home, :away, :venue, :round, :coverage, :period, :clock, :referee, :facts, :response, :future_game, :winner
|
|
6
|
-
|
|
7
|
-
def initialize(data)
|
|
8
|
-
@response = data
|
|
9
|
-
@id = data["id"]
|
|
10
|
-
@reference_id = data["reference_id"]
|
|
11
|
-
@scheduled = Time.parse(data["scheduled"]) if data["scheduled"]
|
|
12
|
-
@scratched = data["scratched"] == "true"
|
|
13
|
-
@season_id = data["season_id"]
|
|
14
|
-
@status = data["status"]
|
|
15
|
-
@category = Sportradar::Api::Soccer::Category.new data["category"] if data["category"]
|
|
16
|
-
@coverage = OpenStruct.new data["coverage"]
|
|
17
|
-
@round = OpenStruct.new data["round"]
|
|
18
|
-
@tournament = Sportradar::Api::Soccer::Tournament.new data["tournament"] if data["tournament"]
|
|
19
|
-
@tournament_group = Sportradar::Api::Soccer::TournamentGroup.new data["tournament_group"] if data["tournament_group"]
|
|
20
|
-
|
|
21
|
-
@away = Sportradar::Api::Soccer::Team.new data["away"] if data["away"]
|
|
22
|
-
@home = Sportradar::Api::Soccer::Team.new data["home"] if data["home"]
|
|
23
|
-
@venue = Sportradar::Api::Soccer::Venue.new data["venue"] if data["venue"]
|
|
24
|
-
|
|
25
|
-
@future_game = @scheduled > Time.now.utc
|
|
26
|
-
@winner = find_winner if @home && @away && !future_game
|
|
27
|
-
|
|
28
|
-
# Actual stats from match summary
|
|
29
|
-
@period = data["period"]
|
|
30
|
-
@clock = data["clock"]
|
|
31
|
-
@referee = OpenStruct.new data["referee"] if data["referee"]
|
|
32
|
-
@facts = data["facts"]["fact"].map {|fact| Sportradar::Api::Soccer::Fact.new fact } if data["facts"]
|
|
33
|
-
end
|
|
34
|
-
|
|
35
|
-
def find_winner
|
|
36
|
-
if @home.winner == 'draw'
|
|
37
|
-
'draw'
|
|
38
|
-
else
|
|
39
|
-
[@home, @away].find {|team| team.winner == "true" }
|
|
40
|
-
end
|
|
41
|
-
|
|
42
|
-
end
|
|
43
|
-
|
|
44
|
-
def period_name
|
|
45
|
-
period_names = {"P1" => "Period one", "H" => "Halftime", "P2" => "Period two", "PX1" => "Pre-extra time one", "X1" => "Extra time one", "PX2" => "Pre-extra time two", "X2" => "Extra time two", "PP" => "Pre-penalty", "P" => "Penalty"}
|
|
46
|
-
period_names[period] if period
|
|
47
|
-
end
|
|
48
|
-
|
|
49
|
-
def status_description
|
|
50
|
-
status_descriptions = {"scheduled" => "The match is scheduled to be played", "inprogress" => "The match is currently in progress", "postponed" => "The match has been postponed to a future date", "delayed" => "The match has been temporarily delayed and will be continued", "canceled" => "The match has been canceled and will not be played", "closed" => "The match is over"}
|
|
51
|
-
status_descriptions[status] if status
|
|
52
|
-
end
|
|
53
|
-
end
|
|
54
|
-
end
|
|
55
|
-
end
|
|
@@ -1,88 +0,0 @@
|
|
|
1
|
-
module Sportradar
|
|
2
|
-
module Api
|
|
3
|
-
class Soccer::Player < Data
|
|
4
|
-
|
|
5
|
-
attr_accessor :id, :first_name, :last_name, :country_code, :country, :reference_id, :full_first_name, :full_last_name, :position, :started, :jersey_number, :tactical_position, :tactical_order, :statistics, :preferred_foot, :birthdate, :height_in, :weight_lb, :height_cm, :weight_kg, :teams, :response, :rank, :total, :statistics, :last_modified
|
|
6
|
-
|
|
7
|
-
def initialize(data)
|
|
8
|
-
@response = data
|
|
9
|
-
@teams = parse_into_array(selector: response["team"], klass: Sportradar::Api::Soccer::Team) if response["team"]
|
|
10
|
-
@teams = parse_into_array(selector: response["teams"]["team"], klass: Sportradar::Api::Soccer::Team) if response["teams"] && response["teams"]["team"]
|
|
11
|
-
@id = data["id"]
|
|
12
|
-
@first_name = data["first_name"]
|
|
13
|
-
@last_name = data["last_name"]
|
|
14
|
-
@country_code = data["country_code"]
|
|
15
|
-
@country = data["country"]
|
|
16
|
-
@reference_id = data["reference_id"]
|
|
17
|
-
@full_first_name = data["full_first_name"]
|
|
18
|
-
@full_last_name = data["full_last_name"]
|
|
19
|
-
@position = data["position"] || primary_team.try(:position)
|
|
20
|
-
@started = data["started"]
|
|
21
|
-
@jersey_number = data["jersey_number"] || primary_team.try(:jersey_number)
|
|
22
|
-
@tactical_position = data["tactical_position"]
|
|
23
|
-
@tactical_order = data["tactical_order"]
|
|
24
|
-
@last_modified = data["last_modified"]
|
|
25
|
-
|
|
26
|
-
# profile
|
|
27
|
-
@preferred_foot = data["preferred_foot"]
|
|
28
|
-
@birthdate = data["birthdate"]
|
|
29
|
-
@height_in = data["height_in"]
|
|
30
|
-
@weight_lb = data["weight_lb"]
|
|
31
|
-
@height_cm = data["height_cm"]
|
|
32
|
-
@weight_kg = data["weight_kg"]
|
|
33
|
-
@rank = data["rank"]
|
|
34
|
-
@total = OpenStruct.new data["total"] if data["total"]
|
|
35
|
-
@statistics = parse_into_array(selector:response["statistics"]["season"], klass: Sportradar::Api::Soccer::Season) if response["statistics"] && response["statistics"]["season"]
|
|
36
|
-
|
|
37
|
-
end
|
|
38
|
-
|
|
39
|
-
def name
|
|
40
|
-
[first_name, last_name].join(' ')
|
|
41
|
-
end
|
|
42
|
-
|
|
43
|
-
def full_name
|
|
44
|
-
full = [full_first_name, full_last_name].join(' ')
|
|
45
|
-
full == " " ? name : full
|
|
46
|
-
end
|
|
47
|
-
|
|
48
|
-
def position_name
|
|
49
|
-
positions = {"G" => "Goalie", "D" => "Defender", "M" => "Midfielder", "F" => "Forward", "" => "N/A"}
|
|
50
|
-
if position
|
|
51
|
-
positions[position]
|
|
52
|
-
elsif primary_team.present?
|
|
53
|
-
positions[primary_team.position]
|
|
54
|
-
end
|
|
55
|
-
end
|
|
56
|
-
|
|
57
|
-
def primary_team
|
|
58
|
-
if teams.count == 1
|
|
59
|
-
teams.first
|
|
60
|
-
else
|
|
61
|
-
teams.find {|team| team.name != team.country_code}
|
|
62
|
-
end if teams
|
|
63
|
-
end
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
def tactical_position_name
|
|
67
|
-
tactical_positions = { "0" => "Unknown", "1" => "Goalkeeper", "2" => "Right Back", "3" => "Central Defender", "4" => "Left Back", "5" => "Right winger", "6" => "Central Midfielder", "7" => "Left Winger", "8" => "Forward" }
|
|
68
|
-
tactical_positions[tactical_position] if tactical_position
|
|
69
|
-
end
|
|
70
|
-
|
|
71
|
-
def age
|
|
72
|
-
if birthdate.present?
|
|
73
|
-
now = Time.now.utc.to_date
|
|
74
|
-
dob = birthdate.to_date
|
|
75
|
-
now.year - dob.year - ((now.month > dob.month || (now.month == dob.month && now.day >= dob.day)) ? 0 : 1)
|
|
76
|
-
end
|
|
77
|
-
end
|
|
78
|
-
|
|
79
|
-
def height_ft
|
|
80
|
-
if height_in.present?
|
|
81
|
-
feet, inches = height_in.to_i.divmod(12)
|
|
82
|
-
"#{feet}' #{inches}\""
|
|
83
|
-
end
|
|
84
|
-
end
|
|
85
|
-
|
|
86
|
-
end
|
|
87
|
-
end
|
|
88
|
-
end
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
module Sportradar
|
|
2
|
-
module Api
|
|
3
|
-
class Soccer::Ranking < Data
|
|
4
|
-
attr_accessor :response, :categories
|
|
5
|
-
|
|
6
|
-
def initialize(data)
|
|
7
|
-
@response = data
|
|
8
|
-
@categories = parse_into_array(selector: response["category"], klass: Sportradar::Api::Soccer::Category) if response["category"]
|
|
9
|
-
end
|
|
10
|
-
|
|
11
|
-
end
|
|
12
|
-
end
|
|
13
|
-
end
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
module Sportradar
|
|
2
|
-
module Api
|
|
3
|
-
class Soccer::Schedule < Data
|
|
4
|
-
attr_accessor :response, :matches
|
|
5
|
-
|
|
6
|
-
def initialize(data)
|
|
7
|
-
@response = data
|
|
8
|
-
@matches = parse_into_array(selector: response["schedule"]["matches"]["match"], klass: Sportradar::Api::Soccer::Match) if response['schedule'] && response['schedule']['matches'] && response["schedule"]["matches"]["match"]
|
|
9
|
-
end
|
|
10
|
-
|
|
11
|
-
def league(league_name)
|
|
12
|
-
# ActiveSupport
|
|
13
|
-
matches.select{ |match| match.tournament_group.name.parameterize == league_name.parameterize}
|
|
14
|
-
end
|
|
15
|
-
|
|
16
|
-
def available_leagues
|
|
17
|
-
matches.map {|match| match.tournament_group.name}.uniq
|
|
18
|
-
end
|
|
19
|
-
|
|
20
|
-
end
|
|
21
|
-
end
|
|
22
|
-
end
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
module Sportradar
|
|
2
|
-
module Api
|
|
3
|
-
class Soccer::Season < Data
|
|
4
|
-
attr_accessor :response, :year, :statistics
|
|
5
|
-
|
|
6
|
-
def initialize(data)
|
|
7
|
-
@response = data
|
|
8
|
-
@year = data["year"]
|
|
9
|
-
@statistics = parse_into_array(selector: response["statistic"], klass: Sportradar::Api::Soccer::Statistic) if response["statistic"]
|
|
10
|
-
end
|
|
11
|
-
|
|
12
|
-
end
|
|
13
|
-
end
|
|
14
|
-
end
|