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.
- checksums.yaml +4 -4
- data/.env.sample +5 -1
- data/Gemfile.lock +4 -4
- data/README.md +1 -1
- data/lib/sportradar/api.rb +1 -0
- data/lib/sportradar/api/basketball.rb +15 -6
- data/lib/sportradar/api/basketball/game.rb +285 -0
- data/lib/sportradar/api/basketball/injury.rb +6 -6
- data/lib/sportradar/api/basketball/nba.rb +22 -25
- data/lib/sportradar/api/basketball/nba/conference.rb +1 -1
- data/lib/sportradar/api/basketball/nba/division.rb +2 -1
- data/lib/sportradar/api/basketball/nba/game.rb +12 -249
- data/lib/sportradar/api/basketball/nba/hierarchy.rb +5 -4
- data/lib/sportradar/api/basketball/nba/player.rb +8 -8
- data/lib/sportradar/api/basketball/nba/quarter.rb +1 -1
- data/lib/sportradar/api/basketball/nba/schedule.rb +17 -6
- data/lib/sportradar/api/basketball/nba/scoring.rb +15 -95
- data/lib/sportradar/api/basketball/nba/season.rb +6 -5
- data/lib/sportradar/api/basketball/nba/team.rb +5 -122
- data/lib/sportradar/api/basketball/ncaamb.rb +133 -0
- data/lib/sportradar/api/basketball/ncaamb/conference.rb +41 -0
- data/lib/sportradar/api/basketball/ncaamb/division.rb +42 -0
- data/lib/sportradar/api/basketball/ncaamb/game.rb +60 -0
- data/lib/sportradar/api/basketball/ncaamb/half.rb +49 -0
- data/lib/sportradar/api/basketball/ncaamb/hierarchy.rb +65 -0
- data/lib/sportradar/api/basketball/ncaamb/player.rb +162 -0
- data/lib/sportradar/api/basketball/ncaamb/schedule.rb +41 -0
- data/lib/sportradar/api/basketball/ncaamb/season.rb +42 -0
- data/lib/sportradar/api/basketball/ncaamb/team.rb +40 -0
- data/lib/sportradar/api/basketball/play.rb +15 -5
- data/lib/sportradar/api/basketball/plays.rb +1 -0
- data/lib/sportradar/api/basketball/plays/base.rb +30 -6
- data/lib/sportradar/api/basketball/plays/deadball.rb +11 -0
- data/lib/sportradar/api/basketball/plays/end_period.rb +2 -2
- data/lib/sportradar/api/basketball/plays/free_throw_miss.rb +3 -1
- data/lib/sportradar/api/basketball/plays/rebound.rb +5 -1
- data/lib/sportradar/api/basketball/plays/shot_made.rb +4 -3
- data/lib/sportradar/api/basketball/plays/shot_miss.rb +4 -3
- data/lib/sportradar/api/basketball/plays/timeout.rb +0 -3
- data/lib/sportradar/api/basketball/plays/turnover.rb +1 -1
- data/lib/sportradar/api/basketball/record.rb +32 -0
- data/lib/sportradar/api/basketball/scoring.rb +103 -0
- data/lib/sportradar/api/basketball/team.rb +148 -0
- data/lib/sportradar/api/data.rb +2 -0
- data/lib/sportradar/api/poll.rb +40 -0
- data/lib/sportradar/api/request.rb +15 -6
- data/lib/sportradar/api/version.rb +1 -1
- metadata +18 -7
- data/lib/sportradar/api/basketball/bio.rb +0 -33
- data/lib/sportradar/api/basketball/nba/overview.rb +0 -64
- data/lib/sportradar/api/basketball/nba/record.rb +0 -34
- data/lib/sportradar/api/basketball/overview.rb +0 -74
- data/lib/sportradar/api/basketball/profile.rb +0 -48
@@ -12,7 +12,7 @@ module Sportradar
|
|
12
12
|
@id = data["id"]
|
13
13
|
@name = data["name"]
|
14
14
|
@alias = data["alias"]
|
15
|
-
@divisions_hash = create_data({},
|
15
|
+
@divisions_hash = create_data({}, data["divisions"], klass: Division, conference: self, api: @api) # if response["division"]
|
16
16
|
end
|
17
17
|
|
18
18
|
def divisions
|
@@ -12,7 +12,8 @@ module Sportradar
|
|
12
12
|
@id = data["id"]
|
13
13
|
@name = data["name"]
|
14
14
|
@alias = data["alias"]
|
15
|
-
@
|
15
|
+
@assigned_teams = nil
|
16
|
+
@teams_hash = create_data({}, data["teams"], klass: Team, division: self, api: @api) # if response["team"]
|
16
17
|
end
|
17
18
|
|
18
19
|
def teams
|
@@ -2,264 +2,27 @@ module Sportradar
|
|
2
2
|
module Api
|
3
3
|
module Basketball
|
4
4
|
class Nba
|
5
|
-
class Game <
|
6
|
-
attr_accessor :response, :id, :home_id, :away_id, :score, :scoring, :status, :scheduled, :venue, :broadcast, :clock, :duration, :attendance, :quarter, :team_stats, :player_stats, :changes, :media_timeouts
|
7
|
-
@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
|
5
|
+
class Game < Sportradar::Api::Basketball::Game
|
20
6
|
|
21
|
-
|
22
|
-
@response = data
|
23
|
-
@api = opts[:api]
|
24
|
-
# @season = opts[:season]
|
25
|
-
@updates = {}
|
26
|
-
@changes = {}
|
27
|
-
|
28
|
-
@score = {}
|
29
|
-
@team_stats = {}
|
30
|
-
@player_stats = {}
|
31
|
-
@scoring_raw = Scoring.new(data, game: self)
|
32
|
-
@teams_hash = {}
|
33
|
-
@quarters_hash = {}
|
34
|
-
|
35
|
-
@id = data['id']
|
36
|
-
|
37
|
-
update(data, **opts)
|
38
|
-
end
|
39
|
-
def timeouts
|
40
|
-
{}
|
41
|
-
end
|
42
|
-
|
43
|
-
def overview
|
44
|
-
Overview.new(self)
|
45
|
-
end
|
46
|
-
def tied?
|
47
|
-
@score[away_id].to_i == @score[home_id].to_i
|
48
|
-
end
|
49
|
-
def points(team_id)
|
50
|
-
team_id.is_a?(Symbol) ? @score[@team_ids[team_id]].to_i : @score[team_id].to_i
|
51
|
-
end
|
52
|
-
def stats(team_id)
|
53
|
-
team_id.is_a?(Symbol) ? @team_stats[@team_ids[team_id]].to_i : @team_stats[team_id].to_i
|
54
|
-
end
|
55
|
-
|
56
|
-
def scoring
|
57
|
-
@scoring_raw.scores
|
58
|
-
end
|
59
|
-
def update_score(score)
|
60
|
-
@score.merge!(score)
|
61
|
-
end
|
62
|
-
def update_stats(team, stats)
|
63
|
-
@team_stats.merge!(team.id => stats.merge!(team: team))
|
64
|
-
end
|
65
|
-
def update_player_stats(player, stats)
|
66
|
-
@player_stats.merge!(player.id => stats.merge!(player: player))
|
67
|
-
end
|
68
|
-
|
69
|
-
def parse_score(data)
|
70
|
-
update_score(data.dig('home', 'id') => data.dig('home', 'points').to_i)
|
71
|
-
update_score(data.dig('away', 'id') => data.dig('away', 'points').to_i)
|
72
|
-
end
|
73
|
-
def clock_seconds
|
74
|
-
return unless @clock
|
75
|
-
m,s = @clock.split(':')
|
76
|
-
m.to_i * 60 + s.to_i
|
77
|
-
end
|
78
|
-
|
79
|
-
def update(data, source: nil, **opts)
|
80
|
-
# via pbp
|
81
|
-
@status = data['status'] if data['status']
|
82
|
-
@coverage = data['coverage'] if data['coverage']
|
83
|
-
@home_id = data['home_team'] if data['home_team'] # GUID
|
84
|
-
@away_id = data['away_team'] if data['away_team'] # GUID
|
85
|
-
@home_points = data['home_points'].to_i if data['home_points']
|
86
|
-
@away_points = data['away_points'].to_i if data['away_points']
|
87
|
-
|
88
|
-
@scheduled = Time.parse(data["scheduled"]) if data["scheduled"]
|
89
|
-
@venue = Venue.new(data['venue']) if data['venue']
|
90
|
-
@broadcast = Broadcast.new(data['broadcast']) if data['broadcast']
|
91
|
-
@home = Team.new(data['home'], api: api, game: self) if data['home']
|
92
|
-
@away = Team.new(data['away'], api: api, game: self) if data['away']
|
93
|
-
|
94
|
-
@duration = data['duration'] if data['duration']
|
95
|
-
@clock = data['clock'] if data['clock']
|
96
|
-
@attendance = data['attendance'] if data['attendance']
|
97
|
-
@lead_changes = data['lead_changes'] if data['lead_changes']
|
98
|
-
@times_tied = data['times_tied'] if data['times_tied']
|
99
|
-
|
100
|
-
@team_ids = { home: @home_id, away: @away_id}
|
101
|
-
|
102
|
-
update_score(@home_id => @home_points.to_i) if @home_points
|
103
|
-
update_score(@away_id => @away_points.to_i) if @away_points
|
104
|
-
parse_score(data['scoring']) if data['scoring']
|
105
|
-
@scoring_raw.update(data, source: source)
|
106
|
-
|
107
|
-
create_data(@teams_hash, data['team'], klass: Team, api: api, game: self) if data['team']
|
108
|
-
end
|
109
|
-
|
110
|
-
def home
|
111
|
-
@teams_hash[@home_id] || @home
|
112
|
-
end
|
113
|
-
|
114
|
-
def away
|
115
|
-
@teams_hash[@away_id] || @away
|
116
|
-
end
|
117
|
-
|
118
|
-
def box
|
119
|
-
@box ||= get_box
|
120
|
-
end
|
121
|
-
def pbp
|
122
|
-
if !future? && quarters.empty?
|
123
|
-
get_pbp
|
124
|
-
end
|
125
|
-
@pbp ||= quarters
|
126
|
-
end
|
127
|
-
def plays
|
128
|
-
quarters.flat_map(&:plays)
|
129
|
-
end
|
130
|
-
def summary
|
131
|
-
@summary ||= get_summary
|
132
|
-
end
|
133
|
-
alias :events :plays
|
134
|
-
|
135
|
-
def quarters
|
136
|
-
@quarters_hash.values
|
137
|
-
end
|
7
|
+
# NBA specific
|
138
8
|
|
139
|
-
|
140
|
-
|
141
|
-
def remember(key, object)
|
142
|
-
@updates[key] = object
|
143
|
-
end
|
144
|
-
def not_updated?(key, object)
|
145
|
-
@updates[key] == object
|
146
|
-
end
|
147
|
-
def changed?(key)
|
148
|
-
@changes[key]
|
149
|
-
end
|
150
|
-
def check_newness(key, new_object)
|
151
|
-
@changes[key] = !not_updated?(key, new_object)
|
152
|
-
remember(key, new_object)
|
153
|
-
end
|
154
|
-
|
155
|
-
# url paths
|
156
|
-
def path_base
|
157
|
-
"games/#{ id }"
|
158
|
-
end
|
159
|
-
def path_box
|
160
|
-
"#{ path_base }/boxscore"
|
161
|
-
end
|
162
|
-
def path_pbp
|
163
|
-
"#{ path_base }/pbp"
|
164
|
-
end
|
165
|
-
def path_summary
|
166
|
-
"#{ path_base }/summary"
|
9
|
+
def team_class
|
10
|
+
Team
|
167
11
|
end
|
168
|
-
|
169
|
-
|
170
|
-
def postponed?
|
171
|
-
'postponed' == status
|
172
|
-
end
|
173
|
-
def future?
|
174
|
-
['scheduled', 'delayed', 'created'].include? status
|
175
|
-
end
|
176
|
-
def started?
|
177
|
-
['inprogress', 'halftime', 'delayed'].include? status
|
178
|
-
end
|
179
|
-
def finished?
|
180
|
-
['complete', 'closed'].include? status
|
181
|
-
end
|
182
|
-
def completed?
|
183
|
-
'complete' == status
|
184
|
-
end
|
185
|
-
def closed?
|
186
|
-
'closed' == status
|
187
|
-
end
|
188
|
-
|
189
|
-
# data retrieval
|
190
|
-
def sync
|
191
|
-
g.get_pbp
|
192
|
-
g.get_box
|
193
|
-
g.get_summary if finished?
|
12
|
+
def period_class
|
13
|
+
Quarter
|
194
14
|
end
|
195
15
|
|
196
|
-
def
|
197
|
-
|
198
|
-
data = api_res['game']
|
199
|
-
ingest_box(data)
|
200
|
-
end
|
201
|
-
|
202
|
-
def ingest_box(data)
|
203
|
-
update(data, source: :box)
|
204
|
-
@quarter = data.delete('quarter').to_i
|
205
|
-
check_newness(:box, @clock)
|
206
|
-
data
|
207
|
-
end
|
208
|
-
|
209
|
-
def get_pbp
|
210
|
-
api_res = api.get_data(path_pbp)
|
211
|
-
data = api_res['game']
|
212
|
-
ingest_pbp(data)
|
213
|
-
end
|
214
|
-
|
215
|
-
def ingest_pbp(data)
|
216
|
-
update(data, source: :pbp)
|
217
|
-
quarter_data = if data['quarter']
|
218
|
-
@quarter = data['quarter'].first.to_i
|
219
|
-
quarts = data['quarter'][1..-1]
|
220
|
-
quarts.is_a?(Array) && (quarts.size == 1) ? quarts[0] : quarts
|
221
|
-
else
|
222
|
-
@quarter = nil
|
223
|
-
[]
|
224
|
-
end
|
225
|
-
if data['overtime']
|
226
|
-
extra_quarters = data['overtime'].is_a?(Hash) ? [data['overtime']] : data['overtime']
|
227
|
-
quarter_data.concat(extra_quarters)
|
228
|
-
end
|
229
|
-
set_pbp(quarter_data)
|
230
|
-
@pbp = @quarters_hash.values
|
231
|
-
check_newness(:pbp, plays.last)
|
232
|
-
data
|
233
|
-
end
|
234
|
-
|
235
|
-
def get_summary
|
236
|
-
api_res = api.get_data(path_summary)
|
237
|
-
data = api_res['game']
|
238
|
-
ingest_summary(data)
|
239
|
-
end
|
240
|
-
|
241
|
-
def ingest_summary(data)
|
242
|
-
update(data, source: :summary)
|
243
|
-
@quarter = data.delete('quarter').to_i
|
244
|
-
check_newness(:box, @clock)
|
245
|
-
data
|
246
|
-
end
|
247
|
-
|
248
|
-
def set_pbp(data)
|
249
|
-
create_data(@quarters_hash, data, klass: Quarter, api: api, game: self)
|
250
|
-
@plays = nil # to clear empty array empty
|
251
|
-
@quarters_hash
|
16
|
+
def period_name
|
17
|
+
'quarter'
|
252
18
|
end
|
19
|
+
alias :quarter :period
|
20
|
+
alias :quarters :periods
|
253
21
|
|
254
22
|
def api
|
255
23
|
@api || Sportradar::Api::Basketball::Nba.new
|
256
24
|
end
|
257
25
|
|
258
|
-
|
259
|
-
KEYS_PBP = ["xmlns", "id", "status", "coverage", "home_team", "away_team", "scheduled", "duration", "attendance", "lead_changes", "times_tied", "clock", "quarter", "scoring"]
|
260
|
-
|
261
|
-
KEYS_BOX = ["xmlns", "id", "status", "coverage", "home_team", "away_team", "scheduled", "duration", "attendance", "lead_changes", "times_tied", "clock", "quarter", "team"]
|
262
|
-
|
263
26
|
end
|
264
27
|
end
|
265
28
|
end
|
@@ -271,8 +34,8 @@ __END__
|
|
271
34
|
ss = sr.schedule;
|
272
35
|
sd = sr.daily_schedule;
|
273
36
|
sr = Sportradar::Api::Basketball::Nba.new
|
274
|
-
sd = sr.daily_schedule(Date.yesterday)
|
275
|
-
sd = sr.daily_schedule(Date.new(2017, 1, 20))
|
37
|
+
sd = sr.daily_schedule(Date.yesterday);
|
38
|
+
sd = sr.daily_schedule(Date.new(2017, 1, 20));
|
276
39
|
g = sd.games.first;
|
277
40
|
box = g.get_box;
|
278
41
|
pbp = g.get_pbp;
|
@@ -12,10 +12,11 @@ module Sportradar
|
|
12
12
|
@response = data
|
13
13
|
@api = opts[:api]
|
14
14
|
|
15
|
-
@id = data
|
16
|
-
@name = data
|
17
|
-
@alias = data
|
18
|
-
@
|
15
|
+
@id = data.dig('league', "id")
|
16
|
+
@name = data.dig('league', "name")
|
17
|
+
@alias = data.dig('league', "alias")
|
18
|
+
@season = Season.new(data['season']) if data['season']
|
19
|
+
@conferences_hash = create_data({}, data['conferences'], klass: Conference, hierarchy: self, api: @api)
|
19
20
|
end
|
20
21
|
def conferences
|
21
22
|
@conferences_hash.values
|
@@ -29,10 +29,6 @@ module Sportradar
|
|
29
29
|
update(data, **opts)
|
30
30
|
end
|
31
31
|
|
32
|
-
def bio
|
33
|
-
Bio.new(self)
|
34
|
-
end
|
35
|
-
|
36
32
|
def name # to match api for NFL::Player
|
37
33
|
full_name
|
38
34
|
end
|
@@ -59,16 +55,20 @@ module Sportradar
|
|
59
55
|
@primary_position = data['primary_position'] if data['primary_position'] # "C",
|
60
56
|
@jersey_number = data['jersey_number'] if data['jersey_number'] # "31",
|
61
57
|
@experience = data['experience'] if data['experience'] # "3",
|
62
|
-
@college = data['college'] if data['college'] # "Vanderbilt",
|
63
58
|
@birth_place = data['birth_place'].gsub(',,', ', ') if data['birth_place'] # "Benin City,, NGA",
|
64
|
-
@birthdate = data['birthdate'] if data['birthdate'] # "1989-10-21",
|
65
59
|
@updated = data['updated'] if data['updated'] # "2016-07-08T12:11:59+00:00",
|
60
|
+
|
61
|
+
# NBA specific below
|
62
|
+
|
63
|
+
@college = data['college'] if data['college'] # "Vanderbilt",
|
64
|
+
@birthdate = data['birthdate'] if data['birthdate'] # "1989-10-21",
|
65
|
+
|
66
66
|
update_injuries(data)
|
67
67
|
update_draft(data)
|
68
68
|
|
69
69
|
@team.update_player_stats(self, data['statistics'], opts[:game]) if data['statistics']
|
70
|
-
if avgs = data
|
71
|
-
@totals = data
|
70
|
+
if avgs = data['average']
|
71
|
+
@totals = data['total']
|
72
72
|
@averages = avgs.except(:player)
|
73
73
|
@team.update_player_stats(self, avgs)
|
74
74
|
end
|
@@ -32,7 +32,7 @@ module Sportradar
|
|
32
32
|
update(data)
|
33
33
|
end
|
34
34
|
def update(data, **opts)
|
35
|
-
create_data(@plays_hash, data.dig('events'
|
35
|
+
create_data(@plays_hash, data.dig('events'), klass: Play, api: @api, quarter: self)
|
36
36
|
# rescue => e
|
37
37
|
# binding.pry
|
38
38
|
end
|
@@ -3,18 +3,21 @@ module Sportradar
|
|
3
3
|
module Basketball
|
4
4
|
class Nba
|
5
5
|
class Schedule < Data
|
6
|
-
attr_accessor :response, :
|
6
|
+
attr_accessor :response, :id, :name, :alias, :date
|
7
7
|
|
8
8
|
def initialize(data, **opts)
|
9
9
|
@response = data
|
10
10
|
@api = opts[:api]
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
@
|
11
|
+
|
12
|
+
# binding.pry
|
13
|
+
# ['league']
|
14
|
+
@id = data.dig('league', 'id')
|
15
|
+
@name = data.dig('league', 'name')
|
16
|
+
@alias = data.dig('league', 'alias')
|
17
|
+
@date = data.dig('date')
|
15
18
|
|
16
19
|
@games_hash = {}
|
17
|
-
update_games(data.dig('
|
20
|
+
update_games(data.dig('games'))
|
18
21
|
end
|
19
22
|
|
20
23
|
def games
|
@@ -30,3 +33,11 @@ module Sportradar
|
|
30
33
|
end
|
31
34
|
end
|
32
35
|
end
|
36
|
+
|
37
|
+
__END__
|
38
|
+
|
39
|
+
sr = Sportradar::Api::Basketball::Nba.new
|
40
|
+
sd = sr.daily_schedule(Date.new(2017, 1, 21));
|
41
|
+
g = sd.games.sample
|
42
|
+
|
43
|
+
ss = sr.schedule;
|
@@ -1,95 +1,15 @@
|
|
1
|
-
module Sportradar
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
end
|
17
|
-
|
18
|
-
def update(data, source: nil, **opts)
|
19
|
-
new_scores = case source
|
20
|
-
when :box
|
21
|
-
parse_from_box(data)
|
22
|
-
when :pbp
|
23
|
-
parse_from_pbp(data)
|
24
|
-
when :summary
|
25
|
-
parse_from_box(data)
|
26
|
-
else
|
27
|
-
if data['quarter']
|
28
|
-
parse_from_pbp(data)
|
29
|
-
elsif data['team']
|
30
|
-
parse_from_box(data)
|
31
|
-
else # schedule requests
|
32
|
-
{}
|
33
|
-
end
|
34
|
-
end
|
35
|
-
# parse data structure
|
36
|
-
# handle data from team (all quarters)
|
37
|
-
# handle data from quarter (both teams)
|
38
|
-
# handle data from game?
|
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 points(team_id)
|
44
|
-
@score[team_id].to_i
|
45
|
-
end
|
46
|
-
|
47
|
-
|
48
|
-
private
|
49
|
-
|
50
|
-
def parse_from_box(data)
|
51
|
-
id = data.dig('team', 0, 'id')
|
52
|
-
return {} if data.dig('team', 0, 'scoring').is_a?(String) # game hasn't started yet
|
53
|
-
da = data.dig('team', 0, 'scoring', 'quarter')
|
54
|
-
da_ot = data.dig('team', 0, 'scoring', 'overtime')
|
55
|
-
arr = [da].compact.flatten(1)
|
56
|
-
a = arr + [da_ot].compact.flatten(1)
|
57
|
-
a.each { |h| h[id] = h.delete('points').to_i }
|
58
|
-
id = data.dig('team', 1, 'id')
|
59
|
-
da = data.dig('team', 1, 'scoring', 'quarter')
|
60
|
-
da_ot = data.dig('team', 1, 'scoring', 'overtime')
|
61
|
-
arr = [da].compact.flatten(1)
|
62
|
-
b = arr + [da_ot].compact.flatten(1)
|
63
|
-
b.each { |h| h[id] = h.delete('points').to_i }
|
64
|
-
a.zip(b).map{ |a, b| [a['sequence'].to_i, a.merge(b)] }.sort{ |(a,_), (b,_)| a <=> b }.to_h
|
65
|
-
# rescue => e
|
66
|
-
# {}
|
67
|
-
end
|
68
|
-
|
69
|
-
def parse_from_pbp(data)
|
70
|
-
return {} unless data['quarter'] # game hasn't started
|
71
|
-
quarters = data['quarter'][1..-1]
|
72
|
-
overtimes = data['overtime']
|
73
|
-
overtimes = [overtimes] if !overtimes.is_a?(Array)
|
74
|
-
quarters = quarters[0] if (quarters.is_a?(Array) && (quarters.size == 1) && quarters.first.is_a?(Array))
|
75
|
-
data = (quarters + overtimes).compact.map{|q| q['scoring'] }
|
76
|
-
data.map.with_index(1) { |h, i| [i, { h.dig('home', 'id') => h.dig('home', 'points').to_i, h.dig('away', 'id') => h.dig('away', 'points').to_i }] }.to_h
|
77
|
-
# rescue => e
|
78
|
-
# {}
|
79
|
-
end
|
80
|
-
|
81
|
-
def parse_from_summary(data)
|
82
|
-
#
|
83
|
-
end
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
KEYS_PBP = ["xmlns", "id", "status", "coverage", "home_team", "away_team", "scheduled", "duration", "attendance", "lead_changes", "times_tied", "clock", "quarter", "scoring"]
|
88
|
-
|
89
|
-
KEYS_BOX = ["xmlns", "id", "status", "coverage", "home_team", "away_team", "scheduled", "duration", "attendance", "lead_changes", "times_tied", "clock", "quarter", "team"]
|
90
|
-
|
91
|
-
end
|
92
|
-
end
|
93
|
-
end
|
94
|
-
end
|
95
|
-
end
|
1
|
+
# module Sportradar
|
2
|
+
# module Api
|
3
|
+
# module Basketball
|
4
|
+
# class Nba
|
5
|
+
# class Scoring < Sportradar::Api::Basketball::Game
|
6
|
+
|
7
|
+
# private def period_name
|
8
|
+
# 'quarter'
|
9
|
+
# end
|
10
|
+
|
11
|
+
# end
|
12
|
+
# end
|
13
|
+
# end
|
14
|
+
# end
|
15
|
+
# end
|