sportradar-api 0.9.59 → 0.10.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (53) hide show
  1. checksums.yaml +4 -4
  2. data/.env.sample +5 -1
  3. data/Gemfile.lock +4 -4
  4. data/README.md +1 -1
  5. data/lib/sportradar/api.rb +1 -0
  6. data/lib/sportradar/api/basketball.rb +15 -6
  7. data/lib/sportradar/api/basketball/game.rb +285 -0
  8. data/lib/sportradar/api/basketball/injury.rb +6 -6
  9. data/lib/sportradar/api/basketball/nba.rb +22 -25
  10. data/lib/sportradar/api/basketball/nba/conference.rb +1 -1
  11. data/lib/sportradar/api/basketball/nba/division.rb +2 -1
  12. data/lib/sportradar/api/basketball/nba/game.rb +12 -249
  13. data/lib/sportradar/api/basketball/nba/hierarchy.rb +5 -4
  14. data/lib/sportradar/api/basketball/nba/player.rb +8 -8
  15. data/lib/sportradar/api/basketball/nba/quarter.rb +1 -1
  16. data/lib/sportradar/api/basketball/nba/schedule.rb +17 -6
  17. data/lib/sportradar/api/basketball/nba/scoring.rb +15 -95
  18. data/lib/sportradar/api/basketball/nba/season.rb +6 -5
  19. data/lib/sportradar/api/basketball/nba/team.rb +5 -122
  20. data/lib/sportradar/api/basketball/ncaamb.rb +133 -0
  21. data/lib/sportradar/api/basketball/ncaamb/conference.rb +41 -0
  22. data/lib/sportradar/api/basketball/ncaamb/division.rb +42 -0
  23. data/lib/sportradar/api/basketball/ncaamb/game.rb +60 -0
  24. data/lib/sportradar/api/basketball/ncaamb/half.rb +49 -0
  25. data/lib/sportradar/api/basketball/ncaamb/hierarchy.rb +65 -0
  26. data/lib/sportradar/api/basketball/ncaamb/player.rb +162 -0
  27. data/lib/sportradar/api/basketball/ncaamb/schedule.rb +41 -0
  28. data/lib/sportradar/api/basketball/ncaamb/season.rb +42 -0
  29. data/lib/sportradar/api/basketball/ncaamb/team.rb +40 -0
  30. data/lib/sportradar/api/basketball/play.rb +15 -5
  31. data/lib/sportradar/api/basketball/plays.rb +1 -0
  32. data/lib/sportradar/api/basketball/plays/base.rb +30 -6
  33. data/lib/sportradar/api/basketball/plays/deadball.rb +11 -0
  34. data/lib/sportradar/api/basketball/plays/end_period.rb +2 -2
  35. data/lib/sportradar/api/basketball/plays/free_throw_miss.rb +3 -1
  36. data/lib/sportradar/api/basketball/plays/rebound.rb +5 -1
  37. data/lib/sportradar/api/basketball/plays/shot_made.rb +4 -3
  38. data/lib/sportradar/api/basketball/plays/shot_miss.rb +4 -3
  39. data/lib/sportradar/api/basketball/plays/timeout.rb +0 -3
  40. data/lib/sportradar/api/basketball/plays/turnover.rb +1 -1
  41. data/lib/sportradar/api/basketball/record.rb +32 -0
  42. data/lib/sportradar/api/basketball/scoring.rb +103 -0
  43. data/lib/sportradar/api/basketball/team.rb +148 -0
  44. data/lib/sportradar/api/data.rb +2 -0
  45. data/lib/sportradar/api/poll.rb +40 -0
  46. data/lib/sportradar/api/request.rb +15 -6
  47. data/lib/sportradar/api/version.rb +1 -1
  48. metadata +18 -7
  49. data/lib/sportradar/api/basketball/bio.rb +0 -33
  50. data/lib/sportradar/api/basketball/nba/overview.rb +0 -64
  51. data/lib/sportradar/api/basketball/nba/record.rb +0 -34
  52. data/lib/sportradar/api/basketball/overview.rb +0 -74
  53. data/lib/sportradar/api/basketball/profile.rb +0 -48
@@ -3,18 +3,18 @@ module Sportradar
3
3
  module Basketball
4
4
  class Nba
5
5
  class Season < Basketball::Season
6
- attr_accessor :response
6
+ attr_accessor :response, :id, :name, :alias
7
7
 
8
8
  def initialize(data, **opts)
9
9
  @response = data
10
10
  @api = opts[:api]
11
11
 
12
- @id = response['id']
13
- @name = response['name']
14
- @alias = response['alias']
12
+ @id = data.dig('league', 'id')
13
+ @name = data.dig('league', 'name')
14
+ @alias = data.dig('league', 'alias')
15
15
  @games_hash = {}
16
16
 
17
- update_games(data.dig('season_schedule', 'games', 'game'))
17
+ update_games(data['games'])
18
18
  end
19
19
 
20
20
  def games
@@ -39,4 +39,5 @@ __END__
39
39
 
40
40
  sd = sr.daily_schedule;
41
41
  sr = Sportradar::Api::Basketball::Nba.new
42
+ ss = sr.standings;
42
43
  ss = sr.schedule;
@@ -2,63 +2,17 @@ module Sportradar
2
2
  module Api
3
3
  module Basketball
4
4
  class Nba
5
- class Team < Data
6
- attr_accessor :response, :id, :market, :name, :alias, :full_name, :venue, :records, :player_stats, :team_stats
5
+ class Team < Sportradar::Api::Basketball::Team
7
6
  @all_hash = {}
8
- def self.new(data, **opts)
9
- existing = @all_hash[data['id']]
10
- if existing
11
- existing.update(data, **opts)
12
- existing
13
- else
14
- @all_hash[data['id']] = super
15
- end
16
- end
17
- def self.all
18
- @all_hash.values
19
- end
20
7
 
21
- def initialize(data, **opts)
22
- @response = data
23
- @api = opts[:api]
24
- @games_hash = {}
25
- @players_hash = {}
26
- @player_stats = {}
27
- @records = {}
28
-
29
- case response
30
- when String
31
- @id = response
32
- when Hash
33
- @id = data['id']
34
- update(response, **opts)
35
- end
8
+ def player_class
9
+ Player
36
10
  end
37
11
 
38
- def profile
39
- Profile.new(self)
12
+ def api
13
+ @api || Sportradar::Api::Basketball::Nba.new
40
14
  end
41
15
 
42
- def update(data, **opts)
43
- handle_names(data)
44
-
45
- @venue = Venue.new(data['venue']) if data['venue']
46
-
47
- @alias = data['alias'] if data['alias']
48
- @points = data['points'].to_i if data['points']
49
- @home = data['home'] == 'true' if data['home']
50
- @away = data['away'] == 'true' if data['away']
51
- # @scoring = data.dig('scoring', 'quarter') if data.dig('scoring', 'quarter')
52
-
53
- parse_records(data) if data['records']
54
- parse_players(data.dig('players', 'player'), opts[:game]) if data.dig('players', 'player')
55
- parse_stats(data['statistics']) if data['statistics']
56
- if opts[:game]
57
- add_game(opts[:game])
58
- opts[:game].update_score(id => @points) if @points
59
- opts[:game].update_stats(self, @stats) if @stats
60
- end
61
- end
62
16
  def handle_names(data)
63
17
  # need to do some more work here
64
18
  @name = data['name'] if data['name']
@@ -80,77 +34,6 @@ module Sportradar
80
34
  end
81
35
  end
82
36
 
83
- def record(type = 'overall')
84
- @records[type]
85
- end
86
-
87
- def games
88
- @games_hash.values
89
- end
90
- def add_game(game)
91
- @games_hash[game.id] = game.id if game
92
- end
93
-
94
- def parse_stats(data)
95
- @stats = data
96
- end
97
-
98
- def players
99
- get_roster if @players_hash.empty?
100
- @players_hash.values
101
- end
102
- alias :roster :players
103
- def parse_players(data, game)
104
- create_data(@players_hash, data, klass: Player, api: api, team: self, game: game)
105
- end
106
- def update_player_stats(player, stats, game = nil)
107
- game ? game.update_player_stats(player, stats) : @player_stats.merge!(player.id => stats.merge!(player: player))
108
- end
109
-
110
- def get_roster
111
- data = api.get_data(path_roster)['team']
112
- update(data)
113
- data
114
- end
115
-
116
- def get_season_stats
117
- data = api.get_data(path_season_stats).dig('season', 'team')
118
- parse_season_stats(data)
119
- end
120
-
121
- def parse_records(data)
122
- @records['overall'] = Record.new(data, type: 'overall')
123
- data['records'].each { |type, record| @records[type] = Record.new(record, type: type) }
124
- end
125
-
126
- def parse_season_stats(data)
127
- @team_stats = data.dig('team_records')
128
- update(data)
129
- player_data = data.dig('player_records', 'player')
130
- create_data(@players_hash, player_data, klass: Player, api: api, team: self)
131
- data
132
- end
133
-
134
- def path_base
135
- "teams/#{ id }"
136
- end
137
- def path_base_stats(season_year = api.default_year, nba_season = api.default_season)
138
- "seasontd/#{season_year}/#{nba_season}/teams/#{id}/"
139
- end
140
- def path_roster
141
- "#{ path_base }/profile"
142
- end
143
- def path_season_stats
144
- "#{ path_base_stats }/statistics"
145
- end
146
-
147
-
148
- def api
149
- @api || Sportradar::Api::Basketball::Nba.new
150
- end
151
-
152
- KEYS_SCHEDULE = ["name", "alias", "id", "__content__"]
153
-
154
37
  end
155
38
  end
156
39
  end
@@ -0,0 +1,133 @@
1
+ module Sportradar
2
+ module Api
3
+ module Basketball
4
+ class Ncaamb < Request
5
+ attr_accessor :league, :access_level, :simulation, :error
6
+
7
+ def initialize(access_level = default_access_level)
8
+ @league = 'ncaamb'
9
+ raise Sportradar::Api::Error::InvalidAccessLevel unless allowed_access_levels.include? access_level
10
+ @access_level = access_level
11
+ end
12
+
13
+ def schedule(season_year = default_year, ncaamb_season = default_season)
14
+ raise Sportradar::Api::Error::InvalidSeason unless allowed_seasons.include? ncaamb_season
15
+ response = get request_url("games/#{season_year}/#{ncaamb_season}/schedule")
16
+ if response.success?
17
+ Sportradar::Api::Basketball::Ncaamb::Season.new(response.to_h, api: self)
18
+ else
19
+ @error = response
20
+ end
21
+ end
22
+
23
+ def daily_schedule(date = default_date, ncaa_season = default_season)
24
+ response = get request_url("games/#{ date.year }/#{ date.month }/#{ date.day }/schedule")
25
+ if response.success?
26
+ Sportradar::Api::Basketball::Ncaamb::Schedule.new(response.to_h, api: self)
27
+ else
28
+ @error = response
29
+ end
30
+ end
31
+
32
+ def rankings(poll_name, ncaamb_week = nil, season_year = default_year)
33
+ # response = get request_url("polls/#{poll_name}/#{season_year}/rankings")
34
+ response = get request_url("polls/#{poll_name}/#{season_year}/#{ncaamb_week}/rankings")
35
+ if response.success?
36
+ Sportradar::Api::Poll.new(response.to_h)
37
+ else
38
+ @error = response
39
+ end
40
+ end
41
+
42
+ def hierarchy
43
+ response = get request_url("league/hierarchy")
44
+ if response.success?
45
+ Sportradar::Api::Basketball::Ncaamb::Hierarchy.new(response.to_h, api: self)
46
+ else
47
+ response
48
+ end
49
+ end
50
+
51
+ def standings(season_year = default_year, ncaamb_season = default_season)
52
+ response = get request_url("seasontd/#{season_year}/#{ncaamb_season}/standings")
53
+ if response.success?
54
+ Sportradar::Api::Basketball::Ncaamb::Division.new(response.to_h, api: self)
55
+ else
56
+ response
57
+ end
58
+ end
59
+
60
+ def get_data(url)
61
+ get request_url(url)
62
+ end
63
+
64
+ def default_year
65
+ 2016
66
+ end
67
+ def default_date
68
+ Date.today
69
+ end
70
+ def default_season
71
+ 'reg'
72
+ end
73
+ def default_access_level
74
+ if (ENV['SPORTRADAR_ENV'] || ENV['RACK_ENV'] || ENV['RAILS_ENV']) == 'production'
75
+ 'p'
76
+ else
77
+ 't'
78
+ end
79
+ end
80
+
81
+ def content_format
82
+ 'json'
83
+ end
84
+
85
+ private
86
+
87
+ def check_simulation(game_id)
88
+ @simulation = true if simulation_games.include?(game_id)
89
+ end
90
+
91
+ def request_url(path)
92
+ # puts "/ncaamb-#{access_level}#{version}/#{path}"
93
+ if simulation
94
+ # "/nfl-sim1/#{path}"
95
+ else
96
+ "/ncaamb-#{access_level}#{version}/#{path}"
97
+ end
98
+ end
99
+
100
+ def api_key
101
+ if access_level != 't'
102
+ Sportradar::Api.api_key_params('ncaamb', 'production')
103
+ else
104
+ Sportradar::Api.api_key_params('ncaamb')
105
+ end
106
+ end
107
+
108
+ def version
109
+ Sportradar::Api.version('nba')
110
+ end
111
+
112
+ def allowed_access_levels
113
+ %w[p t]
114
+ end
115
+
116
+ def allowed_seasons
117
+ ["pre", "reg", 'ct', "pst"]
118
+ end
119
+
120
+ end
121
+ end
122
+ end
123
+ end
124
+
125
+ __END__
126
+
127
+ sr = Sportradar::Api::Basketball::Ncaamb.new
128
+ ss = sr.schedule;
129
+ ds = sr.daily_schedule;
130
+
131
+ # not ready
132
+ lh = sr.league_hierarchy;
133
+ ls = sr.standings;
@@ -0,0 +1,41 @@
1
+ module Sportradar
2
+ module Api
3
+ module Basketball
4
+ class Ncaamb
5
+ class Conference < Data
6
+ attr_accessor :response, :id, :name, :alias
7
+
8
+ def initialize(data, **opts)
9
+ # @response = data
10
+ @api = opts[:api]
11
+
12
+ @id = data["id"]
13
+ @name = data["name"]
14
+ @alias = data["alias"]
15
+ @assigned_teams = nil
16
+
17
+ @teams_hash = create_data({}, data["teams"], klass: Team, conference: self, api: @api) # if data["team"]
18
+ end
19
+
20
+ def teams
21
+ @assigned_teams || @teams_hash.values
22
+ end
23
+ def teams=(array)
24
+ @assigned_teams = array
25
+ end
26
+ def team(code_name)
27
+ teams_by_name[code_name]
28
+ end
29
+ private def teams_by_name
30
+ @teams_by_name ||= teams.map { |t| [t.alias, t] }.to_h
31
+ end
32
+ def conferences
33
+ teams.flat_map(&:conferences)
34
+ end
35
+
36
+ end
37
+ end
38
+ end
39
+ end
40
+ end
41
+
@@ -0,0 +1,42 @@
1
+ module Sportradar
2
+ module Api
3
+ module Basketball
4
+ class Ncaamb
5
+ class Division < Data
6
+ attr_accessor :response, :id, :name, :alias
7
+
8
+ def initialize(data, **opts)
9
+ # @response = data
10
+ @api = opts[:api]
11
+
12
+ @id = data["id"]
13
+ @name = data["name"]
14
+ @alias = data["alias"]
15
+ update(data, **opts)
16
+ end
17
+
18
+ def update(data, **opts)
19
+ @conferences_hash = create_data({}, data["conferences"], klass: Conference, division: self, api: @api) if data["conferences"]
20
+ end
21
+
22
+ def conferences
23
+ @conferences_hash.values
24
+ end
25
+
26
+ def conference(code_name)
27
+ conferences_by_name[code_name]
28
+ end
29
+
30
+ def conferences_by_name
31
+ @conferences_by_name ||= conferences.map { |c| [c.alias, c] }.to_h
32
+ end
33
+
34
+ def teams
35
+ conferences.flat_map(&:teams)
36
+ end
37
+
38
+ end
39
+ end
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,60 @@
1
+ module Sportradar
2
+ module Api
3
+ module Basketball
4
+ class Ncaamb
5
+ class Game < Sportradar::Api::Basketball::Game
6
+
7
+ # NCAA MB specific
8
+
9
+ def team_class
10
+ Team
11
+ end
12
+ def period_class
13
+ Half
14
+ end
15
+
16
+ def period_name
17
+ 'half'
18
+ end
19
+ alias :half :period
20
+ alias :halfs :periods
21
+
22
+ def api
23
+ @api || Sportradar::Api::Basketball::Ncaamb.new
24
+ end
25
+
26
+ end
27
+ end
28
+ end
29
+ end
30
+ end
31
+
32
+ __END__
33
+
34
+ ss = sr.schedule;
35
+ sr = Sportradar::Api::Basketball::Ncaamb.new
36
+ gid = "29111b80-992d-4e32-a88d-220fb4bd3121"
37
+ g = Sportradar::Api::Basketball::Ncaamb::Game.new({'id' => gid}, api: sr)
38
+ sd = sr.daily_schedule;
39
+ sd = sr.daily_schedule(Date.new(2017,1,21))
40
+ g = sd.games.detect{ |g| g.id == gid }
41
+ g = sd.games.last;
42
+ box = g.get_box;
43
+ sum = g.get_summary;
44
+ pbp = g.get_pbp;
45
+ g.periods.size
46
+ g.plays.size
47
+
48
+ Sportradar::Api::Basketball::Nba::Team.all.size # => 32 - includes all star teams
49
+
50
+ g1 = sd.games.first;
51
+ sd = sr.schedule;
52
+ sd = sr.daily_schedule;
53
+ sr = Sportradar::Api::Basketball::Nba.new
54
+ sd = sr.daily_schedule(Date.yesterday);
55
+ g = sd.games.last;
56
+ g.get_summary;
57
+ g.get_pbp;
58
+ g.get_box;
59
+ g.scoring
60
+ g.get_pbp; g.changed? :pbp