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
@@ -27,7 +27,7 @@ module Sportradar
27
27
  end
28
28
 
29
29
  def api
30
- @api || Sportradar::Api::Basketball::Nba.new
30
+ @api || Sportradar::Api::Basketball::Nba::Api.new
31
31
  end
32
32
 
33
33
  def handle_names(data)
@@ -1,82 +1,175 @@
1
1
  module Sportradar
2
2
  module Api
3
3
  module Basketball
4
- class Ncaamb < Request
5
- attr_accessor :league, :access_level, :simulation, :error
4
+ class Ncaamb < 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]
6
16
 
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
17
+ @divisions_hash = create_data({}, {"id" => "c5a8d640-5093-4044-851d-2c562e929994", "name" => "NCAA Division I", "alias" => "D1"}, klass: Division, api: api)
18
+ @weeks_hash = {}
19
+ @games_hash = {}
20
+ @tournaments_hash = {}
21
+ @teams_hash = {}
22
+
23
+ update(data, **opts)
11
24
  end
12
25
 
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
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 tournaments(season_year = default_year, ncaamb_season = 'pst')
24
- raise Sportradar::Api::Error::InvalidSeason unless allowed_seasons.include? ncaamb_season
25
- response = get request_url("tournaments/#{season_year}/#{ncaamb_season}/schedule")
26
- if response.success?
27
- Sportradar::Api::Basketball::Ncaamb::Season.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')
28
38
  else
29
- @error = response
39
+ @season = data['season'] if data['season']
40
+ @type = data['type'] if data['type']
30
41
  end
42
+
43
+ create_data(@teams_hash, data['teams'], klass: Team, api: api) if data['teams']
44
+ create_data(@divisions_hash, data['divisions'], klass: Division, api: api) if data['divisions']
45
+ create_data(@games_hash, data['games'], klass: Game, api: api) if data['games']
46
+ create_data(@tournaments_hash, data['tournaments'], klass: Tournament, api: api) if data['tournaments']
31
47
  end
32
48
 
33
- def conference_tournaments(season_year = default_year)
34
- tournaments(season_year, 'ct')
49
+ def divisions
50
+ @divisions_hash.values
51
+ end
52
+ def division(code_name)
53
+ divisions_by_name[code_name]
54
+ end
55
+ private def divisions_by_name
56
+ @divisions_by_name ||= divisions.map { |d| [d.alias, d] }.to_h
57
+ end
58
+ def conferences
59
+ divisions.flat_map(&:conferences)
35
60
  end
36
61
 
37
- def daily_schedule(date = default_date)
38
- response = get request_url("games/#{ date.year }/#{ date.month }/#{ date.day }/schedule")
39
- if response.success?
40
- Sportradar::Api::Basketball::Ncaamb::Schedule.new(response.to_h, api: self)
41
- else
42
- @error = response
43
- end
62
+ def schedule
63
+ get_schedule if games.empty?
64
+ self
44
65
  end
45
66
 
46
- def rankings(poll_name, ncaamb_week = nil, season_year = default_year)
47
- # response = get request_url("polls/#{poll_name}/#{season_year}/rankings")
48
- response = get request_url("polls/#{poll_name}/#{season_year}/#{ncaamb_week}/rankings")
49
- if response.success?
50
- Sportradar::Api::Poll.new(response.to_h)
51
- else
52
- @error = response
53
- end
67
+ def standings
68
+ get_standings if divisions.empty? || teams.first&.record.nil?
69
+ self
54
70
  end
55
71
 
56
72
  def hierarchy
57
- response = get request_url("league/hierarchy")
58
- if response.success?
59
- Sportradar::Api::Basketball::Ncaamb::Hierarchy.new(response.to_h, api: self)
60
- else
61
- response
62
- end
73
+ get_hierarchy if divisions.empty?
74
+ self
75
+ end
76
+
77
+ def tournaments
78
+ get_tournaments if tournaments.empty?
79
+ self
80
+ end
81
+
82
+ def games
83
+ @games_hash.values
63
84
  end
64
85
 
65
- def standings(season_year = default_year, ncaamb_season = default_season)
66
- response = get request_url("seasontd/#{season_year}/#{ncaamb_season}/standings")
67
- if response.success?
68
- Sportradar::Api::Basketball::Ncaamb::Division.new(response.to_h, api: self)
86
+ def teams
87
+ teams = divisions.flat_map(&:teams)
88
+ if teams.empty?
89
+ if @teams_hash.empty?
90
+ get_hierarchy
91
+ divisions.flat_map(&:teams)
92
+ else
93
+ @teams_hash.values
94
+ end
69
95
  else
70
- response
96
+ teams
71
97
  end
72
98
  end
73
99
 
74
- def get_data(url)
75
- get request_url(url)
100
+ def team(team_id)
101
+ teams.detect { |team| team.id == team_id }
102
+ end
103
+
104
+ def get_schedule
105
+ data = api.get_data(path_schedule).to_h
106
+ ingest_schedule(data)
107
+ end
108
+ def ingest_schedule(data)
109
+ update(data)
110
+ data
111
+ end
112
+
113
+ def get_tournaments(tourney_season = 'pst')
114
+ data = api.get_data(path_tournaments(tourney_season)).to_h
115
+ ingest_tournaments(data)
116
+ end
117
+ def ingest_tournaments(data)
118
+ update(data)
119
+ data
120
+ end
121
+
122
+ def get_conference_tournaments
123
+ data = api.get_data(path_conference_tournaments).to_h
124
+ ingest_conference_tournaments(data)
125
+ end
126
+ def ingest_conference_tournaments(data)
127
+ update(data)
128
+ data
129
+ end
130
+
131
+ def get_daily_schedule(date = default_date)
132
+ data = api.get_data(path_daily_schedule(date)).to_h
133
+ ingest_daily_schedule(data)
134
+ end
135
+ def ingest_daily_schedule(data)
136
+ update(data)
137
+ data
138
+ end
139
+
140
+ def get_rankings(poll_name, ncaamb_week = nil)
141
+ data = api.get_data(path_rankings(poll_name, ncaamb_week)).to_h
142
+ ingest_rankings(data)
143
+ end
144
+ def ingest_rankings(data)
145
+ update(data)
146
+ data
147
+ end
148
+
149
+ def get_hierarchy
150
+ data = api.get_data(path_hierarchy).to_h
151
+ ingest_hierarchy(data)
152
+ end
153
+ def ingest_hierarchy(data)
154
+ update(data)
155
+ data
156
+ end
157
+
158
+ def get_standings
159
+ data = api.get_data(path_standings).to_h
160
+ ingest_standings(data)
161
+ end
162
+ def ingest_standings(data)
163
+ division('D1').update(data)
164
+ data
165
+ end
166
+
167
+ def api
168
+ @api || Sportradar::Api::Basketball::Ncaamb::Api.new
76
169
  end
77
170
 
78
171
  def default_year
79
- 2016
172
+ (Date.today - 210).year
80
173
  end
81
174
  def default_date
82
175
  Date.today
@@ -84,51 +177,41 @@ module Sportradar
84
177
  def default_season
85
178
  'reg'
86
179
  end
87
- def default_access_level
88
- if (ENV['SPORTRADAR_ENV'] || ENV['RACK_ENV'] || ENV['RAILS_ENV']) == 'production'
89
- 'p'
90
- else
91
- 't'
92
- end
180
+ def season_year
181
+ @season || default_year
93
182
  end
94
-
95
- def content_format
96
- 'json'
183
+ alias :year :season_year
184
+ def ncaamb_season
185
+ @type || default_season
97
186
  end
187
+ alias :season :ncaamb_season
98
188
 
99
- private
189
+ def path_schedule
190
+ "games/#{season_year}/#{ncaamb_season}/schedule"
191
+ end
100
192
 
101
- def check_simulation(game_id)
102
- @simulation = true if simulation_games.include?(game_id)
193
+ def path_tournaments(tourney_season = 'pst')
194
+ "tournaments/#{season_year}/#{tourney_season}/schedule"
103
195
  end
104
196
 
105
- def request_url(path)
106
- # puts "/ncaamb-#{access_level}#{version}/#{path}"
107
- if simulation
108
- # "/nfl-sim1/#{path}"
109
- else
110
- "/ncaamb-#{access_level}#{version}/#{path}"
111
- end
197
+ def path_conference_tournaments
198
+ path_tournaments('ct')
112
199
  end
113
200
 
114
- def api_key
115
- if !['t', 'sim'].include?(access_level)
116
- Sportradar::Api.api_key_params('ncaamb', 'production')
117
- else
118
- Sportradar::Api.api_key_params('ncaamb')
119
- end
201
+ def path_daily_schedule(date = default_date)
202
+ "games/#{ date.year }/#{ date.month }/#{ date.day }/schedule"
120
203
  end
121
204
 
122
- def version
123
- Sportradar::Api.version('nba')
205
+ def path_rankings(poll_name, ncaamb_week = nil, season_year = default_year)
206
+ "polls/#{poll_name}/#{season_year}/#{ncaamb_week}/rankings"
124
207
  end
125
208
 
126
- def allowed_access_levels
127
- %w[p t sim]
209
+ def path_hierarchy
210
+ "league/hierarchy"
128
211
  end
129
212
 
130
- def allowed_seasons
131
- ["pre", "reg", 'ct', "pst"]
213
+ def path_standings
214
+ "seasontd/#{season_year}/#{ncaamb_season}/standings"
132
215
  end
133
216
 
134
217
  end
@@ -0,0 +1,77 @@
1
+ module Sportradar
2
+ module Api
3
+ module Basketball
4
+ class Ncaamb
5
+ class Api < Request
6
+ attr_accessor :league, :access_level, :error
7
+
8
+ def initialize(access_level = default_access_level)
9
+ @league = 'ncaamb'
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
+ "/ncaamb-#{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('ncaamb', 'production')
44
+ else
45
+ Sportradar::Api.api_key_params('ncaamb')
46
+ end
47
+ end
48
+
49
+ def version
50
+ Sportradar::Api.version('ncaamb')
51
+ end
52
+
53
+ def allowed_access_levels
54
+ %w[p t sim]
55
+ end
56
+
57
+ def allowed_seasons
58
+ ["pre", "reg", 'ct', "pst"]
59
+ end
60
+
61
+ end
62
+ end
63
+ end
64
+ end
65
+ end
66
+
67
+ __END__
68
+
69
+ sr = Sportradar::Api::Basketball::Ncaamb.new
70
+ ss = sr.schedule(2015, 'ct');
71
+ ss = sr.schedule(2015, 'pst');
72
+ rank = sr.rankings('US');
73
+ ds = sr.daily_schedule;
74
+
75
+ # not ready
76
+ lh = sr.league_hierarchy;
77
+ ls = sr.standings;
@@ -13,8 +13,13 @@ module Sportradar
13
13
  @name = data["name"]
14
14
  @alias = data["alias"]
15
15
  @assigned_teams = nil
16
+ @teams_hash = {}
16
17
 
17
- @teams_hash = create_data({}, data["teams"], klass: Team, conference: self, api: @api) # if data["team"]
18
+ update(data, **opts)
19
+ end
20
+
21
+ def update(data, **opts)
22
+ create_data(@teams_hash, data["teams"], klass: Team, conference: self, api: @api) # if data["team"]
18
23
  end
19
24
 
20
25
  def teams
@@ -12,11 +12,13 @@ module Sportradar
12
12
  @id = data["id"]
13
13
  @name = data["name"]
14
14
  @alias = data["alias"]
15
+ @conferences_hash = {}
16
+
15
17
  update(data, **opts)
16
18
  end
17
19
 
18
20
  def update(data, **opts)
19
- @conferences_hash = create_data({}, data["conferences"], klass: Conference, division: self, api: @api) if data["conferences"]
21
+ create_data(@conferences_hash, data["conferences"], klass: Conference, division: self, api: @api) if data["conferences"]
20
22
  end
21
23
 
22
24
  def conferences
@@ -30,7 +30,7 @@ module Sportradar
30
30
  alias :halfs :periods
31
31
 
32
32
  def api
33
- @api || Sportradar::Api::Basketball::Ncaamb.new
33
+ @api || Sportradar::Api::Basketball::Ncaamb::Api.new
34
34
  end
35
35
 
36
36
  def sim!
@@ -35,7 +35,7 @@ module Sportradar
35
35
  end
36
36
 
37
37
  def api
38
- @api || Sportradar::Api::Basketball::Ncaamb.new
38
+ @api || Sportradar::Api::Basketball::Ncaamb::Api.new
39
39
  end
40
40
 
41
41
  end
@@ -139,7 +139,7 @@ module Sportradar
139
139
  end
140
140
 
141
141
  def api
142
- @api || Sportradar::Api::Basketball::Nba.new
142
+ @api || Sportradar::Api::Basketball::Ncaamb::Api.new
143
143
  end
144
144
 
145
145
 
@@ -31,7 +31,7 @@ module Sportradar
31
31
  end
32
32
 
33
33
  def api
34
- @api || Sportradar::Api::Basketball::Ncaamb.new
34
+ @api || Sportradar::Api::Basketball::Ncaamb::Api.new
35
35
  end
36
36
 
37
37
  def good_guys?