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.
- checksums.yaml +4 -4
- data/Gemfile.lock +1 -1
- data/lib/sportradar/api/baseball.rb +1 -21
- data/lib/sportradar/api/baseball/game.rb +1 -1
- data/lib/sportradar/api/baseball/mlb.rb +234 -43
- data/lib/sportradar/api/baseball/mlb/api.rb +75 -0
- data/lib/sportradar/api/baseball/player.rb +1 -1
- data/lib/sportradar/api/baseball/team.rb +1 -1
- data/lib/sportradar/api/basketball.rb +2 -2
- data/lib/sportradar/api/basketball/nba.rb +145 -74
- data/lib/sportradar/api/basketball/nba/api.rb +71 -0
- data/lib/sportradar/api/basketball/nba/conference.rb +10 -3
- data/lib/sportradar/api/basketball/nba/division.rb +11 -4
- data/lib/sportradar/api/basketball/nba/game.rb +1 -1
- data/lib/sportradar/api/basketball/nba/player.rb +1 -1
- data/lib/sportradar/api/basketball/nba/team.rb +1 -1
- data/lib/sportradar/api/basketball/ncaamb.rb +165 -82
- data/lib/sportradar/api/basketball/ncaamb/api.rb +77 -0
- data/lib/sportradar/api/basketball/ncaamb/conference.rb +6 -1
- data/lib/sportradar/api/basketball/ncaamb/division.rb +3 -1
- data/lib/sportradar/api/basketball/ncaamb/game.rb +1 -1
- data/lib/sportradar/api/basketball/ncaamb/hierarchy.rb +1 -1
- data/lib/sportradar/api/basketball/ncaamb/player.rb +1 -1
- data/lib/sportradar/api/basketball/ncaamb/team.rb +1 -1
- data/lib/sportradar/api/basketball/ncaamb/tournament.rb +1 -1
- data/lib/sportradar/api/football/nfl.rb +2 -1
- data/lib/sportradar/api/football/nfl/api.rb +1 -1
- data/lib/sportradar/api/version.rb +1 -1
- metadata +5 -4
- data/lib/sportradar/api/baseball/mlb/hierarchy.rb +0 -273
- data/lib/sportradar/api/basketball/nba/hierarchy.rb +0 -47
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a544bed7327664085716d731056ce27741ae3235
|
4
|
+
data.tar.gz: d48e44f4d80b63b24a482ac6e40bb4f55382f5cf
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 440c2f9bffb27fb8c11d4ccb7d76cfcd6eca961e77b1dafe7d445bb95e685b8391051a38c0a1c8af2b999bd7cbaf4ac5a5be073586e6c084821770fa18e78f28
|
7
|
+
data.tar.gz: 548e34be5cc5b946a92b792df65200f66c852c24ec5f9ff933f2f5d595a416df7fcb623cbe01e69dd54cf7a67693d1f352b6b765949495d5d85377ace8900ee0
|
data/Gemfile.lock
CHANGED
@@ -21,26 +21,6 @@ require_relative 'baseball/lineup'
|
|
21
21
|
require_relative 'baseball/scoring'
|
22
22
|
|
23
23
|
require_relative 'baseball/mlb'
|
24
|
-
require_relative 'baseball/mlb/
|
24
|
+
require_relative 'baseball/mlb/api'
|
25
25
|
require_relative 'baseball/mlb/league'
|
26
26
|
require_relative 'baseball/mlb/division'
|
27
|
-
# require_relative 'baseball/mlb/season'
|
28
|
-
# require_relative 'baseball/mlb/schedule'
|
29
|
-
# require_relative 'baseball/mlb/game'
|
30
|
-
# require_relative 'baseball/mlb/team'
|
31
|
-
# require_relative 'baseball/mlb/player'
|
32
|
-
# require_relative 'baseball/mlb/quarter'
|
33
|
-
|
34
|
-
# require_relative 'baseball/ncaamb'
|
35
|
-
# require_relative 'baseball/ncaamb/season'
|
36
|
-
# require_relative 'baseball/ncaamb/schedule'
|
37
|
-
# require_relative 'baseball/ncaamb/tournament'
|
38
|
-
# require_relative 'baseball/ncaamb/round'
|
39
|
-
# require_relative 'baseball/ncaamb/bracket'
|
40
|
-
# require_relative 'baseball/ncaamb/game'
|
41
|
-
# require_relative 'baseball/ncaamb/half'
|
42
|
-
# require_relative 'baseball/ncaamb/hierarchy'
|
43
|
-
# require_relative 'baseball/ncaamb/division'
|
44
|
-
# require_relative 'baseball/ncaamb/conference'
|
45
|
-
# require_relative 'baseball/ncaamb/team'
|
46
|
-
# require_relative 'baseball/ncaamb/player'
|
@@ -1,29 +1,96 @@
|
|
1
1
|
module Sportradar
|
2
2
|
module Api
|
3
3
|
module Baseball
|
4
|
-
class Mlb <
|
5
|
-
attr_accessor :
|
4
|
+
class Mlb < Data
|
5
|
+
attr_accessor :response, :id, :name, :alias, :year, :type
|
6
|
+
def all_attributes
|
7
|
+
[:name, :alias, :leagues, :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
|
+
@leagues_hash = {}
|
18
|
+
@games_hash = {}
|
19
|
+
@teams_hash = {}
|
20
|
+
|
21
|
+
update(data, **opts)
|
22
|
+
end
|
23
|
+
|
24
|
+
def update(data, source: nil, **opts)
|
25
|
+
# update stuff
|
26
|
+
@id = data.dig('league', 'id') if data.dig('league', 'id')
|
27
|
+
@name = data.dig('league', 'name') if data.dig('league', 'name')
|
28
|
+
@alias = data.dig('league', 'alias') if data.dig('league', 'alias')
|
29
|
+
|
30
|
+
@year = data.dig('season', 'year') if data.dig('season', 'year')
|
31
|
+
@type = data.dig('season', 'type') if data.dig('season', 'type')
|
32
|
+
|
33
|
+
@leagues_hash = create_data({}, data['leagues'], klass: League, hierarchy: self, api: api) if data['leagues']
|
34
|
+
@teams_hash = create_data({}, data['teams'], klass: Team, hierarchy: self, api: api) if data['teams']
|
35
|
+
if data['games'] && !data['games'].empty?
|
36
|
+
if data['games'].first.keys == ['game']
|
37
|
+
data['games'].map! { |hash| hash['game'] }
|
38
|
+
end
|
39
|
+
@games_hash = create_data({}, data['games'], klass: Game, hierarchy: self, api: api)
|
40
|
+
end
|
41
|
+
end
|
6
42
|
|
7
|
-
def
|
8
|
-
|
9
|
-
|
10
|
-
@access_level = access_level
|
43
|
+
def schedule
|
44
|
+
get_schedule if games.empty?
|
45
|
+
self
|
11
46
|
end
|
12
47
|
|
13
|
-
def
|
14
|
-
|
15
|
-
|
48
|
+
def standings
|
49
|
+
get_standings if teams.first&.record.nil?
|
50
|
+
self
|
16
51
|
end
|
17
52
|
|
18
|
-
def
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
53
|
+
def hierarchy
|
54
|
+
get_hierarchy if divisions.empty?
|
55
|
+
self
|
56
|
+
end
|
57
|
+
|
58
|
+
def daily_schedule
|
59
|
+
# TODO
|
60
|
+
end
|
61
|
+
|
62
|
+
def games
|
63
|
+
@games_hash.values
|
64
|
+
end
|
65
|
+
|
66
|
+
def leagues
|
67
|
+
@leagues_hash.values
|
68
|
+
end
|
69
|
+
def divisions
|
70
|
+
leagues.flat_map(&:divisions)
|
71
|
+
end
|
72
|
+
def teams
|
73
|
+
teams = divisions.flat_map(&:teams)
|
74
|
+
if teams.empty?
|
75
|
+
if @teams_hash.empty?
|
76
|
+
get_hierarchy
|
77
|
+
divisions.flat_map(&:teams)
|
78
|
+
else
|
79
|
+
@teams_hash.values
|
80
|
+
end
|
81
|
+
else
|
82
|
+
teams
|
25
83
|
end
|
26
|
-
|
84
|
+
end
|
85
|
+
def team(team_id)
|
86
|
+
teams.detect { |team| team.id == team_id }
|
87
|
+
end
|
88
|
+
|
89
|
+
|
90
|
+
|
91
|
+
# api stuff
|
92
|
+
def api
|
93
|
+
@api || Sportradar::Api::Baseball::Mlb::Api.new
|
27
94
|
end
|
28
95
|
|
29
96
|
def default_year
|
@@ -35,50 +102,174 @@ module Sportradar
|
|
35
102
|
def default_season
|
36
103
|
'reg'
|
37
104
|
end
|
38
|
-
def
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
end
|
105
|
+
def season_year
|
106
|
+
@year || default_year
|
107
|
+
end
|
108
|
+
def mlb_season
|
109
|
+
@type || default_season
|
44
110
|
end
|
45
111
|
|
46
|
-
|
47
|
-
|
112
|
+
|
113
|
+
# url paths
|
114
|
+
def path_base
|
115
|
+
"league"
|
116
|
+
end
|
117
|
+
def path_schedule
|
118
|
+
"games/#{season_year}/#{mlb_season}/schedule"
|
119
|
+
end
|
120
|
+
def path_series
|
121
|
+
"series/#{season_year}/#{mlb_season}/schedule"
|
122
|
+
end
|
123
|
+
def path_rankings
|
124
|
+
"seasontd/#{season_year}/#{mlb_season}/rankings"
|
125
|
+
end
|
126
|
+
def path_hierarchy
|
127
|
+
"#{ path_base }/hierarchy"
|
128
|
+
end
|
129
|
+
def path_depth_charts
|
130
|
+
"#{ path_base }/depth_charts"
|
131
|
+
end
|
132
|
+
def path_standings
|
133
|
+
"seasontd/#{season_year}/#{mlb_season}/standings"
|
134
|
+
end
|
135
|
+
def path_daily_summary(date)
|
136
|
+
"games/#{date.year}/#{date.month}/#{date.day}/summary"
|
137
|
+
end
|
138
|
+
def path_daily_boxscore(date)
|
139
|
+
"#{ path_base }/games/#{date.year}/#{date.month}/#{date.day}/boxscore"
|
48
140
|
end
|
49
141
|
|
50
|
-
private
|
51
142
|
|
52
|
-
|
53
|
-
|
143
|
+
# data retrieval
|
144
|
+
|
145
|
+
## schedule
|
146
|
+
def get_schedule
|
147
|
+
data = api.get_data(path_schedule).to_h
|
148
|
+
ingest_schedule(data)
|
54
149
|
end
|
55
150
|
|
56
|
-
def
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
151
|
+
def ingest_schedule(data)
|
152
|
+
update(data, source: :games)
|
153
|
+
data
|
154
|
+
end
|
155
|
+
|
156
|
+
def queue_schedule
|
157
|
+
url, headers, options, timeout = api.get_request_info(path_schedule)
|
158
|
+
{url: url, headers: headers, params: options, timeout: timeout, callback: method(:ingest_schedule)}
|
159
|
+
end
|
160
|
+
|
161
|
+
## hierarchy
|
162
|
+
def get_hierarchy
|
163
|
+
data = api.get_data(path_hierarchy).to_h
|
164
|
+
ingest_hierarchy(data)
|
165
|
+
end
|
166
|
+
|
167
|
+
def ingest_hierarchy(data)
|
168
|
+
update(data, source: :teams)
|
169
|
+
data
|
170
|
+
end
|
171
|
+
|
172
|
+
def queue_hierarchy
|
173
|
+
url, headers, options, timeout = api.get_request_info(path_hierarchy)
|
174
|
+
{url: url, headers: headers, params: options, timeout: timeout, callback: method(:ingest_hierarchy)}
|
175
|
+
end
|
176
|
+
|
177
|
+
## depth_charts
|
178
|
+
def get_depth_charts
|
179
|
+
data = api.get_data(path_depth_charts).to_h
|
180
|
+
ingest_depth_charts(data)
|
181
|
+
end
|
182
|
+
|
183
|
+
def ingest_depth_charts(data)
|
184
|
+
update(data, source: :teams)
|
185
|
+
data
|
64
186
|
end
|
65
187
|
|
66
|
-
def
|
67
|
-
|
188
|
+
def queue_depth_charts
|
189
|
+
url, headers, options, timeout = api.get_request_info(path_depth_charts)
|
190
|
+
{url: url, headers: headers, params: options, timeout: timeout, callback: method(:ingest_depth_charts)}
|
68
191
|
end
|
69
192
|
|
70
|
-
|
71
|
-
|
193
|
+
## standings
|
194
|
+
def get_standings
|
195
|
+
data = api.get_data(path_standings).to_h
|
196
|
+
ingest_standings(data)
|
72
197
|
end
|
73
198
|
|
74
|
-
def
|
75
|
-
|
199
|
+
def ingest_standings(data)
|
200
|
+
update(data.dig('league','season'), source: :teams)
|
201
|
+
data
|
76
202
|
end
|
77
203
|
|
204
|
+
def queue_standings
|
205
|
+
url, headers, options, timeout = api.get_request_info(path_standings)
|
206
|
+
{url: url, headers: headers, params: options, timeout: timeout, callback: method(:ingest_standings)}
|
207
|
+
end
|
208
|
+
|
209
|
+
## depth_charts
|
210
|
+
def get_depth_charts
|
211
|
+
data = api.get_data(path_depth_charts).to_h
|
212
|
+
ingest_depth_charts(data)
|
213
|
+
end
|
214
|
+
|
215
|
+
def ingest_depth_charts(data)
|
216
|
+
update(data, source: :teams)
|
217
|
+
data
|
218
|
+
end
|
219
|
+
|
220
|
+
def queue_depth_charts
|
221
|
+
url, headers, options, timeout = api.get_request_info(path_depth_charts)
|
222
|
+
{url: url, headers: headers, params: options, timeout: timeout, callback: method(:ingest_depth_charts)}
|
223
|
+
end
|
224
|
+
|
225
|
+
## daily summary
|
226
|
+
def get_daily_summary(date = Date.today)
|
227
|
+
data = api.get_data(path_daily_summary(date)).to_h
|
228
|
+
ingest_daily_summary(data)
|
229
|
+
end
|
230
|
+
|
231
|
+
def ingest_daily_summary(data)
|
232
|
+
update(data.dig('league'), source: :games)
|
233
|
+
data
|
234
|
+
end
|
235
|
+
|
236
|
+
def queue_daily_summary(date = Date.today)
|
237
|
+
url, headers, options, timeout = api.get_request_info(path_daily_summary(date))
|
238
|
+
{url: url, headers: headers, params: options, timeout: timeout, callback: method(:ingest_daily_summary)}
|
239
|
+
end
|
240
|
+
|
241
|
+
## venues
|
242
|
+
# def get_venues
|
243
|
+
# data = api.get_data(path_venues).to_h
|
244
|
+
# ingest_venues(data)
|
245
|
+
# end
|
246
|
+
|
247
|
+
# def ingest_venues(data)
|
248
|
+
# update(data, source: :teams)
|
249
|
+
# data
|
250
|
+
# end
|
251
|
+
|
252
|
+
# def queue_venues
|
253
|
+
# url, headers, options, timeout = api.get_request_info(path_venues)
|
254
|
+
# {url: url, headers: headers, params: options, timeout: timeout, callback: method(:ingest_venues)}
|
255
|
+
# end
|
256
|
+
|
78
257
|
end
|
79
258
|
end
|
80
259
|
end
|
81
260
|
end
|
82
261
|
|
83
262
|
__END__
|
84
|
-
|
263
|
+
|
264
|
+
mlb = Sportradar::Api::Baseball::Mlb::Hierarchy.new
|
265
|
+
res = mlb.get_daily_summary;
|
266
|
+
res = mlb.get_hierarchy;
|
267
|
+
res = mlb.get_schedule;
|
268
|
+
t = mlb.teams.first;
|
269
|
+
t.get_season_stats;
|
270
|
+
t.players.sample
|
271
|
+
|
272
|
+
res = mlb.get_schedule;
|
273
|
+
g = mlb.games.sort_by(&:scheduled).first
|
274
|
+
|
275
|
+
portradar::Api::Baseball::Mlb::Hierarchy.new
|
@@ -0,0 +1,75 @@
|
|
1
|
+
module Sportradar
|
2
|
+
module Api
|
3
|
+
module Baseball
|
4
|
+
class Mlb
|
5
|
+
class Api < Request
|
6
|
+
attr_accessor :league, :access_level, :simulation, :error
|
7
|
+
|
8
|
+
def initialize(access_level = default_access_level)
|
9
|
+
@league = 'mlb'
|
10
|
+
raise Sportradar::Api::Error::InvalidAccessLevel unless allowed_access_levels.include? access_level
|
11
|
+
@access_level = access_level
|
12
|
+
end
|
13
|
+
|
14
|
+
def sim!
|
15
|
+
@version = 5
|
16
|
+
super
|
17
|
+
end
|
18
|
+
|
19
|
+
def default_year
|
20
|
+
Date.today.year
|
21
|
+
end
|
22
|
+
def default_date
|
23
|
+
Date.today
|
24
|
+
end
|
25
|
+
def default_season
|
26
|
+
'reg'
|
27
|
+
end
|
28
|
+
def default_access_level
|
29
|
+
if (ENV['SPORTRADAR_ENV'] || ENV['SPORTRADAR_ENV_MLB'] || ENV['RACK_ENV'] || ENV['RAILS_ENV']) == 'production'
|
30
|
+
'p'
|
31
|
+
else
|
32
|
+
't'
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
def content_format
|
37
|
+
'json'
|
38
|
+
end
|
39
|
+
|
40
|
+
private
|
41
|
+
|
42
|
+
def request_url(path)
|
43
|
+
"/mlb-#{access_level}#{version}/#{path}"
|
44
|
+
end
|
45
|
+
|
46
|
+
def api_key
|
47
|
+
if !['t', 'sim'].include?(access_level)
|
48
|
+
Sportradar::Api.api_key_params('mlb', 'production')
|
49
|
+
elsif 'sim' == access_level
|
50
|
+
Sportradar::Api.api_key_params('mlb', 'simulation')
|
51
|
+
else
|
52
|
+
Sportradar::Api.api_key_params('mlb')
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
def version
|
57
|
+
@version || Sportradar::Api.version('mlb')
|
58
|
+
end
|
59
|
+
|
60
|
+
def allowed_access_levels
|
61
|
+
%w[p t sim]
|
62
|
+
end
|
63
|
+
|
64
|
+
def allowed_seasons
|
65
|
+
["pre", "reg", "pst"]
|
66
|
+
end
|
67
|
+
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
__END__
|
75
|
+
# mlb = Sportradar::Api::Baseball::Mlb::Hierarchy.new
|