sportradar-api 0.11.69 → 0.12.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (31) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile.lock +1 -1
  3. data/lib/sportradar/api/baseball.rb +1 -21
  4. data/lib/sportradar/api/baseball/game.rb +1 -1
  5. data/lib/sportradar/api/baseball/mlb.rb +234 -43
  6. data/lib/sportradar/api/baseball/mlb/api.rb +75 -0
  7. data/lib/sportradar/api/baseball/player.rb +1 -1
  8. data/lib/sportradar/api/baseball/team.rb +1 -1
  9. data/lib/sportradar/api/basketball.rb +2 -2
  10. data/lib/sportradar/api/basketball/nba.rb +145 -74
  11. data/lib/sportradar/api/basketball/nba/api.rb +71 -0
  12. data/lib/sportradar/api/basketball/nba/conference.rb +10 -3
  13. data/lib/sportradar/api/basketball/nba/division.rb +11 -4
  14. data/lib/sportradar/api/basketball/nba/game.rb +1 -1
  15. data/lib/sportradar/api/basketball/nba/player.rb +1 -1
  16. data/lib/sportradar/api/basketball/nba/team.rb +1 -1
  17. data/lib/sportradar/api/basketball/ncaamb.rb +165 -82
  18. data/lib/sportradar/api/basketball/ncaamb/api.rb +77 -0
  19. data/lib/sportradar/api/basketball/ncaamb/conference.rb +6 -1
  20. data/lib/sportradar/api/basketball/ncaamb/division.rb +3 -1
  21. data/lib/sportradar/api/basketball/ncaamb/game.rb +1 -1
  22. data/lib/sportradar/api/basketball/ncaamb/hierarchy.rb +1 -1
  23. data/lib/sportradar/api/basketball/ncaamb/player.rb +1 -1
  24. data/lib/sportradar/api/basketball/ncaamb/team.rb +1 -1
  25. data/lib/sportradar/api/basketball/ncaamb/tournament.rb +1 -1
  26. data/lib/sportradar/api/football/nfl.rb +2 -1
  27. data/lib/sportradar/api/football/nfl/api.rb +1 -1
  28. data/lib/sportradar/api/version.rb +1 -1
  29. metadata +5 -4
  30. data/lib/sportradar/api/baseball/mlb/hierarchy.rb +0 -273
  31. data/lib/sportradar/api/basketball/nba/hierarchy.rb +0 -47
@@ -101,7 +101,7 @@ module Sportradar
101
101
  end
102
102
 
103
103
  def api
104
- @api || Sportradar::Api::Baseball::Mlb.new
104
+ @api || Sportradar::Api::Baseball::Mlb::Api.new
105
105
  end
106
106
 
107
107
  end
@@ -138,7 +138,7 @@ module Sportradar
138
138
  end
139
139
 
140
140
  def api
141
- @api || Sportradar::Api::Baseball::Mlb.new
141
+ @api || Sportradar::Api::Baseball::Mlb::Api.new
142
142
  end
143
143
 
144
144
  end
@@ -9,7 +9,7 @@ require_relative 'basketball/plays'
9
9
  require_relative 'basketball/scoring'
10
10
 
11
11
  require_relative 'basketball/nba'
12
- require_relative 'basketball/nba/hierarchy'
12
+ require_relative 'basketball/nba/api'
13
13
  require_relative 'basketball/nba/conference'
14
14
  require_relative 'basketball/nba/division'
15
15
  require_relative 'basketball/nba/season'
@@ -21,6 +21,7 @@ require_relative 'basketball/nba/player'
21
21
  require_relative 'basketball/nba/quarter'
22
22
 
23
23
  require_relative 'basketball/ncaamb'
24
+ require_relative 'basketball/ncaamb/api'
24
25
  require_relative 'basketball/ncaamb/season'
25
26
  require_relative 'basketball/ncaamb/schedule'
26
27
  require_relative 'basketball/ncaamb/tournament'
@@ -28,7 +29,6 @@ require_relative 'basketball/ncaamb/round'
28
29
  require_relative 'basketball/ncaamb/bracket'
29
30
  require_relative 'basketball/ncaamb/game'
30
31
  require_relative 'basketball/ncaamb/half'
31
- require_relative 'basketball/ncaamb/hierarchy'
32
32
  require_relative 'basketball/ncaamb/division'
33
33
  require_relative 'basketball/ncaamb/conference'
34
34
  require_relative 'basketball/ncaamb/team'
@@ -1,68 +1,110 @@
1
1
  module Sportradar
2
2
  module Api
3
3
  module Basketball
4
- class Nba < Request
5
- attr_accessor :league, :access_level, :simulation, :error
4
+ class Nba < Data
5
+ attr_accessor :response, :id, :name, :alias
6
+ def all_attributes
7
+ [:name, :alias, :conferences, :divisions, :teams]
8
+ end
9
+
10
+ def initialize(data = {}, **opts)
11
+ @response = data
12
+ @api = opts[:api]
13
+ @id = data['id']
14
+ @season = opts[:year]
15
+ @type = opts[:type]
16
+
17
+ @conferences_hash = {}
18
+ @weeks_hash = {}
19
+ @games_hash = {}
20
+ @series_hash = {}
21
+ @teams_hash = {}
6
22
 
7
- def initialize(access_level = default_access_level)
8
- @league = 'nba'
9
- raise Sportradar::Api::Error::InvalidAccessLevel unless allowed_access_levels.include? access_level
10
- @access_level = access_level
23
+ update(data, **opts)
11
24
  end
12
25
 
13
- def schedule(season_year = default_year, nba_season = default_season)
14
- raise Sportradar::Api::Error::InvalidSeason unless allowed_seasons.include? nba_season
15
- response = get request_url("games/#{season_year}/#{nba_season}/schedule")
16
- if response.success?
17
- Sportradar::Api::Basketball::Nba::Season.new(response.to_h, api: self)
18
- else
19
- @error = response
26
+ def update(data, **opts)
27
+ @id = data['id'] if data['id']
28
+
29
+ if data['league']
30
+ @id = data.dig('league', 'id')
31
+ @name = data.dig('league', 'name')
32
+ @alias = data.dig('league', 'alias')
20
33
  end
21
- end
22
34
 
23
- def daily_schedule(date = default_date, nba_season = default_season)
24
- response = get request_url("games/#{ date.year }/#{ date.month }/#{ date.day }/schedule")
25
- if response.success?
26
- Sportradar::Api::Basketball::Nba::Schedule.new(response.to_h, api: self)
35
+ if data['season'].is_a?(Hash)
36
+ @season = data.dig('season', 'year')
37
+ @type = data.dig('season', 'type')
27
38
  else
28
- @error = response
39
+ @season = data['season'] if data['season']
40
+ @type = data['type'] if data['type']
29
41
  end
42
+
43
+ create_data(@teams_hash, data['teams'], klass: Team, api: api) if data['teams']
44
+ create_data(@conferences_hash, data['conferences'], klass: Conference, api: api) if data['conferences']
45
+ create_data(@games_hash, data['games'], klass: Game, api: api) if data['games']
46
+ create_data(@series_hash, data['series'], klass: Series, api: api) if data['series']
30
47
  end
31
48
 
32
- def series_schedule(season_year = default_year)
33
- response = get request_url("series/#{season_year}/pst/schedule")
34
- if response.success?
35
- Sportradar::Api::Basketball::Nba::Season.new(response.to_h, api: self)
36
- else
37
- @error = response
38
- end
49
+ def conferences
50
+ @conferences_hash.values
51
+ end
52
+ def divisions
53
+ conferences.flat_map(&:divisions)
39
54
  end
40
55
 
41
- def league_hierarchy
42
- response = get request_url("league/hierarchy")
43
- if response.success?
44
- Sportradar::Api::Basketball::Nba::Hierarchy.new(response.to_h, api: self)
45
- else
46
- response
47
- end
56
+ def schedule
57
+ get_schedule if games.empty?
58
+ self
59
+ end
60
+
61
+ def standings
62
+ get_standings if divisions.empty? || teams.first&.record.nil?
63
+ self
64
+ end
65
+
66
+ def hierarchy
67
+ get_hierarchy if divisions.empty?
68
+ self
48
69
  end
49
- alias :hierarchy :league_hierarchy
50
70
 
51
- def standings(season_year = default_year, nba_season = default_season)
52
- response = get request_url("seasontd/#{season_year}/#{nba_season}/standings")
53
- if response.success?
54
- Sportradar::Api::Basketball::Nba::Hierarchy.new(response.to_h, api: self)
71
+ def series_schedule
72
+ get_series_schedule if series.empty?
73
+ self
74
+ end
75
+
76
+ def games
77
+ @games_hash.values
78
+ end
79
+
80
+ def series
81
+ @series_hash.values
82
+ end
83
+
84
+ def teams
85
+ teams = divisions.flat_map(&:teams)
86
+ if teams.empty?
87
+ if @teams_hash.empty?
88
+ get_hierarchy
89
+ divisions.flat_map(&:teams)
90
+ else
91
+ @teams_hash.values
92
+ end
55
93
  else
56
- response
94
+ teams
57
95
  end
58
96
  end
59
97
 
60
- def get_data(url)
61
- get request_url(url)
98
+ def team(team_id)
99
+ teams.detect { |team| team.id == team_id }
100
+ end
101
+
102
+ def api
103
+ @api || Sportradar::Api::Basketball::Nba::Api.new
62
104
  end
63
105
 
64
106
  def default_year
65
- 2016
107
+ (Date.today - 210).year
66
108
  end
67
109
  def default_date
68
110
  Date.today
@@ -70,51 +112,78 @@ module Sportradar
70
112
  def default_season
71
113
  'reg'
72
114
  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
115
+ def season_year
116
+ @season || default_year
79
117
  end
118
+ alias :year :season_year
119
+ def nba_season
120
+ @type || default_season
121
+ end
122
+ alias :season :nba_season
80
123
 
81
- def content_format
82
- 'json'
124
+ def path_schedule
125
+ "games/#{season_year}/#{nba_season}/schedule"
83
126
  end
84
127
 
85
- private
128
+ def path_daily_schedule(date = default_date)
129
+ "games/#{ date.year }/#{ date.month }/#{ date.day }/schedule"
130
+ end
86
131
 
87
- def check_simulation(game_id)
88
- @simulation = true if simulation_games.include?(game_id)
132
+ def path_series_schedule
133
+ "series/#{season_year}/pst/schedule"
89
134
  end
90
135
 
91
- def request_url(path)
92
- # puts "/nba-#{access_level}#{version}/#{path}"
93
- if simulation
94
- # "/nfl-sim1/#{path}"
95
- else
96
- "/nba-#{access_level}#{version}/#{path}"
97
- end
136
+ def path_hierarchy
137
+ "league/hierarchy"
98
138
  end
99
139
 
100
- def api_key
101
- if !['t', 'sim'].include?(access_level)
102
- Sportradar::Api.api_key_params('nba', 'production')
103
- else
104
- Sportradar::Api.api_key_params('nba')
105
- end
140
+ def path_standings
141
+ "seasontd/#{season_year}/#{nba_season}/standings"
142
+ end
143
+
144
+ def get_schedule
145
+ data = api.get_data(path_schedule).to_h
146
+ ingest_schedule(data)
147
+ end
148
+ def ingest_schedule(data)
149
+ update(data, source: :schedule)
150
+ data
151
+ end
152
+
153
+ def get_daily_schedule(date = default_date)
154
+ data = api.get_data(path_daily_schedule(date)).to_h
155
+ ingest_daily_schedule(data)
156
+ end
157
+ def ingest_daily_schedule(data)
158
+ update(data, source: :daily_schedule)
159
+ data
106
160
  end
107
161
 
108
- def version
109
- Sportradar::Api.version('nba')
162
+ def get_series_schedule
163
+ data = api.get_data(path_series_schedule).to_h
164
+ ingest_series_schedule(data)
165
+ end
166
+ def ingest_series_schedule(data)
167
+ update(data, source: :series_schedule)
168
+ data
110
169
  end
111
170
 
112
- def allowed_access_levels
113
- %w[p t sim]
171
+ def get_hierarchy
172
+ data = api.get_data(path_hierarchy).to_h
173
+ ingest_hierarchy(data)
174
+ end
175
+ def ingest_hierarchy(data)
176
+ update(data, source: :hierarchy)
177
+ data
114
178
  end
115
179
 
116
- def allowed_seasons
117
- ["pre", "reg", "pst"]
180
+ def get_standings
181
+ data = api.get_data(path_standings).to_h
182
+ ingest_standings(data)
183
+ end
184
+ def ingest_standings(data)
185
+ update(data, source: :standings)
186
+ data
118
187
  end
119
188
 
120
189
  end
@@ -124,6 +193,8 @@ end
124
193
 
125
194
  __END__
126
195
 
196
+ st = sr.standings;
127
197
  sr = Sportradar::Api::Basketball::Nba.new
128
- lh = sr.league_hierarchy;
129
- ls = sr.standings;
198
+ lh = sr.hierarchy;
199
+ t = lh.teams.first;
200
+ t.venue.id
@@ -0,0 +1,71 @@
1
+ module Sportradar
2
+ module Api
3
+ module Basketball
4
+ class Nba
5
+ class Api < Request
6
+ attr_accessor :league, :access_level, :error
7
+
8
+ def initialize(access_level = default_access_level)
9
+ @league = 'nba'
10
+ raise Sportradar::Api::Error::InvalidAccessLevel unless allowed_access_levels.include? access_level
11
+ @access_level = access_level
12
+ end
13
+
14
+ def default_year
15
+ (Date.today - 210).year
16
+ end
17
+ def default_date
18
+ Date.today
19
+ end
20
+ def default_season
21
+ 'reg'
22
+ end
23
+ def default_access_level
24
+ if (ENV['SPORTRADAR_ENV'] || ENV['RACK_ENV'] || ENV['RAILS_ENV']) == 'production'
25
+ 'p'
26
+ else
27
+ 't'
28
+ end
29
+ end
30
+
31
+ def content_format
32
+ 'json'
33
+ end
34
+
35
+ private
36
+
37
+ def request_url(path)
38
+ "/nba-#{access_level}#{version}/#{path}"
39
+ end
40
+
41
+ def api_key
42
+ if !['t', 'sim'].include?(access_level) || (access_level == 'sim' && default_access_level == 'p')
43
+ Sportradar::Api.api_key_params('nba', 'production')
44
+ else
45
+ Sportradar::Api.api_key_params('nba')
46
+ end
47
+ end
48
+
49
+ def version
50
+ Sportradar::Api.version('nba')
51
+ end
52
+
53
+ def allowed_access_levels
54
+ %w[p t sim]
55
+ end
56
+
57
+ def allowed_seasons
58
+ ["pre", "reg", "pst"]
59
+ end
60
+
61
+ end
62
+ end
63
+ end
64
+ end
65
+ end
66
+
67
+ __END__
68
+
69
+ sr = Sportradar::Api::Basketball::Nba.new
70
+ lh = sr.league_hierarchy;
71
+ ls = sr.standings;
@@ -9,10 +9,17 @@ module Sportradar
9
9
  @response = data
10
10
  @api = opts[:api]
11
11
 
12
- @id = data["id"]
13
- @name = data["name"]
12
+ @divisions_hash = {}
13
+
14
+ update(data, **opts)
15
+ end
16
+
17
+ def update(data, **opts)
18
+ @id = data["id"]
19
+ @name = data["name"]
14
20
  @alias = data["alias"]
15
- @divisions_hash = create_data({}, data["divisions"], klass: Division, conference: self, api: @api) # if response["division"]
21
+
22
+ create_data(@divisions_hash, data["divisions"], klass: Division, conference: self, api: @api) if response["divisions"]
16
23
  end
17
24
 
18
25
  def divisions
@@ -9,11 +9,18 @@ module Sportradar
9
9
  @response = data
10
10
  @api = opts[:api]
11
11
 
12
- @id = data["id"]
13
- @name = data["name"]
14
- @alias = data["alias"]
15
12
  @assigned_teams = nil
16
- @teams_hash = create_data({}, data["teams"], klass: Team, division: self, api: @api) # if response["team"]
13
+ @teams_hash = {}
14
+
15
+ update(data, **opts)
16
+ end
17
+
18
+ def update(data, **opts)
19
+ @id = data["id"]
20
+ @name = data["name"]
21
+ @alias = data["alias"]
22
+
23
+ create_data(@teams_hash, data["teams"], klass: Team, division: self, api: @api) if response["teams"]
17
24
  end
18
25
 
19
26
  def teams
@@ -20,7 +20,7 @@ module Sportradar
20
20
  alias :quarters :periods
21
21
 
22
22
  def api
23
- @api || Sportradar::Api::Basketball::Nba.new
23
+ @api || Sportradar::Api::Basketball::Nba::Api.new
24
24
  end
25
25
 
26
26
  def sim!
@@ -137,7 +137,7 @@ module Sportradar
137
137
  end
138
138
 
139
139
  def api
140
- @api || Sportradar::Api::Basketball::Nba.new
140
+ @api || Sportradar::Api::Basketball::Nba::Api.new
141
141
  end
142
142
 
143
143