sportradar-api 0.13.4 → 0.13.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/Gemfile.lock +1 -1
- data/lib/sportradar/api/basketball/game.rb +5 -4
- data/lib/sportradar/api/basketball/nba/quarter.rb +9 -2
- data/lib/sportradar/api/basketball/ncaamb/half.rb +9 -0
- data/lib/sportradar/api/soccer/README.md +4 -0
- data/lib/sportradar/api/soccer/event.rb +14 -13
- data/lib/sportradar/api/soccer/match.rb +120 -8
- data/lib/sportradar/api/soccer/player.rb +8 -2
- data/lib/sportradar/api/soccer/scoring.rb +24 -16
- data/lib/sportradar/api/soccer/team.rb +2 -0
- data/lib/sportradar/api/version.rb +1 -1
- metadata +3 -29
- data/lib/sportradar/api/soccer-old/boxscore.rb +0 -13
- data/lib/sportradar/api/soccer-old/category.rb +0 -17
- data/lib/sportradar/api/soccer-old/fact.rb +0 -61
- data/lib/sportradar/api/soccer-old/hierarchy.rb +0 -14
- data/lib/sportradar/api/soccer-old/match.rb +0 -55
- data/lib/sportradar/api/soccer-old/player.rb +0 -88
- data/lib/sportradar/api/soccer-old/ranking.rb +0 -13
- data/lib/sportradar/api/soccer-old/schedule.rb +0 -22
- data/lib/sportradar/api/soccer-old/season.rb +0 -14
- data/lib/sportradar/api/soccer-old/standing.rb +0 -13
- data/lib/sportradar/api/soccer-old/statistic.rb +0 -14
- data/lib/sportradar/api/soccer-old/summary.rb +0 -13
- data/lib/sportradar/api/soccer-old/team.rb +0 -63
- data/lib/sportradar/api/soccer-old/tournament.rb +0 -20
- data/lib/sportradar/api/soccer-old/tournament_group.rb +0 -35
- data/lib/sportradar/api/soccer-old/venue.rb +0 -21
- data/lib/sportradar/api/soccer-old.rb +0 -158
- data/soccer-old/boxscore_test.rb +0 -14
- data/soccer-old/hierarchy_test.rb +0 -14
- data/soccer-old/match_test.rb +0 -23
- data/soccer-old/player_test.rb +0 -40
- data/soccer-old/ranking_test.rb +0 -16
- data/soccer-old/schedule_test.rb +0 -24
- data/soccer-old/standing_test.rb +0 -14
- data/soccer-old/summary_test.rb +0 -14
- data/soccer-old/team_test.rb +0 -21
- data/soccer-old_test.rb +0 -184
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 3d49ce56fe5c2ca03df70263e5b216efe58d4fbb
|
|
4
|
+
data.tar.gz: 65d90cefb754021c67c6dda94fa53fb4f8ad33d9
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 43ac236b4a45c7178c929036d25a4ae99340bc8e8710a4307e9f7d5791079b5e547aca9757c11ee6ae44e525c786c35687db9140474e7c90dc23e48c164c25f6
|
|
7
|
+
data.tar.gz: 9ccedccca1160d5725a5553ea5b327884ffcae3cf11548910b5fcdd8e93dff9998fd250f371665d275bf35393cbdf3b79494c32cb17d4068c3b3716aff5b2f5e
|
data/Gemfile.lock
CHANGED
|
@@ -212,7 +212,7 @@ module Sportradar
|
|
|
212
212
|
end
|
|
213
213
|
|
|
214
214
|
def halftime?
|
|
215
|
-
clock == '
|
|
215
|
+
status == 'halftime' || clock == '00:00' && quarter == 2
|
|
216
216
|
end
|
|
217
217
|
def clock_display
|
|
218
218
|
if clock && period
|
|
@@ -266,7 +266,7 @@ module Sportradar
|
|
|
266
266
|
# data retrieval
|
|
267
267
|
|
|
268
268
|
def get_box
|
|
269
|
-
data = api.get_data(path_box)
|
|
269
|
+
data = api.get_data(path_box).to_h
|
|
270
270
|
ingest_box(data)
|
|
271
271
|
end
|
|
272
272
|
|
|
@@ -283,7 +283,7 @@ module Sportradar
|
|
|
283
283
|
end
|
|
284
284
|
|
|
285
285
|
def get_pbp
|
|
286
|
-
data = api.get_data(path_pbp)
|
|
286
|
+
data = api.get_data(path_pbp).to_h
|
|
287
287
|
ingest_pbp(data)
|
|
288
288
|
end
|
|
289
289
|
|
|
@@ -305,12 +305,13 @@ module Sportradar
|
|
|
305
305
|
set_pbp(period_data)
|
|
306
306
|
@pbp = @periods_hash.values
|
|
307
307
|
check_newness(:pbp, plays.last&.updated)
|
|
308
|
+
check_newness(:clock, @clock)
|
|
308
309
|
check_newness(:score, @score)
|
|
309
310
|
data
|
|
310
311
|
end
|
|
311
312
|
|
|
312
313
|
def get_summary
|
|
313
|
-
data = api.get_data(path_summary)
|
|
314
|
+
data = api.get_data(path_summary).to_h
|
|
314
315
|
ingest_summary(data)
|
|
315
316
|
end
|
|
316
317
|
|
|
@@ -33,8 +33,15 @@ module Sportradar
|
|
|
33
33
|
end
|
|
34
34
|
def update(data, **opts)
|
|
35
35
|
create_data(@plays_hash, data.dig('events'), klass: Play, api: @api, quarter: self)
|
|
36
|
-
|
|
37
|
-
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
def plays_by_type(play_type, *types)
|
|
39
|
+
if types.empty?
|
|
40
|
+
plays.grep(Play.subclass(play_type.delete('_')))
|
|
41
|
+
else
|
|
42
|
+
play_classes = [play_type, *types].map { |type| Play.subclass(type.delete('_')) }
|
|
43
|
+
plays.select { |play| play_classes.any? { |klass| play.kind_of?(klass) } }
|
|
44
|
+
end
|
|
38
45
|
end
|
|
39
46
|
|
|
40
47
|
def plays
|
|
@@ -35,6 +35,15 @@ module Sportradar
|
|
|
35
35
|
create_data(@plays_hash, data.dig('events'), klass: Play, api: @api, half: self)
|
|
36
36
|
end
|
|
37
37
|
|
|
38
|
+
def plays_by_type(play_type, *types)
|
|
39
|
+
if types.empty?
|
|
40
|
+
plays.grep(Play.subclass(play_type.delete('_')))
|
|
41
|
+
else
|
|
42
|
+
play_classes = [play_type, *types].map { |type| Play.subclass(type.delete('_')) }
|
|
43
|
+
plays.select { |play| play_classes.any? { |klass| play.kind_of?(klass) } }
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
|
|
38
47
|
def plays
|
|
39
48
|
@plays_hash.values
|
|
40
49
|
end
|
|
@@ -12,18 +12,19 @@ module Sportradar
|
|
|
12
12
|
end
|
|
13
13
|
|
|
14
14
|
def update(data, **opts)
|
|
15
|
-
@type = data['type']
|
|
16
|
-
@time = Time.parse(data['time'])
|
|
17
|
-
@period = data['period']
|
|
18
|
-
@period_type = data['period_type']
|
|
19
|
-
@period_name = data['period_name']
|
|
20
|
-
@match_time = data['match_time']
|
|
21
|
-
@team = data['team']
|
|
22
|
-
@x = data['x']
|
|
23
|
-
@y = data['y']
|
|
24
|
-
@outcome = data['outcome']
|
|
25
|
-
@home_score = data['home_score']
|
|
26
|
-
@away_score = data['away_score']
|
|
15
|
+
@type = data['type'] if data['type']
|
|
16
|
+
@time = Time.parse(data['time']) if data['time']
|
|
17
|
+
@period = data['period'] if data['period']
|
|
18
|
+
@period_type = data['period_type'] if data['period_type']
|
|
19
|
+
@period_name = data['period_name'] if data['period_name']
|
|
20
|
+
@match_time = data['match_time'] if data['match_time']
|
|
21
|
+
@team = data['team'] if data['team']
|
|
22
|
+
@x = data['x'] if data['x']
|
|
23
|
+
@y = data['y'] if data['y']
|
|
24
|
+
@outcome = data['outcome'] if data['outcome']
|
|
25
|
+
@home_score = data['home_score'] if data['home_score']
|
|
26
|
+
@away_score = data['away_score'] if data['away_score']
|
|
27
|
+
@commentaries = data['commentaries'] if data['commentaries']
|
|
27
28
|
@goal_scorer = OpenStruct.new(data['goal_scorer']) if data['goal_scorer']
|
|
28
29
|
@stoppage_time = data['stoppage_time'].to_i if data['stoppage_time']
|
|
29
30
|
@player_out = OpenStruct.new(data['player_out']) if data['player_out']
|
|
@@ -31,7 +32,7 @@ module Sportradar
|
|
|
31
32
|
@player = OpenStruct.new(data['player']) if data['player'] # red/yellow cards
|
|
32
33
|
end
|
|
33
34
|
|
|
34
|
-
def
|
|
35
|
+
def updated
|
|
35
36
|
@time
|
|
36
37
|
end
|
|
37
38
|
|
|
@@ -6,12 +6,15 @@ module Sportradar
|
|
|
6
6
|
attr_reader :home_score, :away_score, :winner_id, :aggregate_home_score, :aggregate_away_score, :aggregate_winner_id
|
|
7
7
|
attr_reader :referee, :weather_info, :coverage_info, :probabilities
|
|
8
8
|
attr_reader :home, :away, :tournament_id
|
|
9
|
-
attr_reader :
|
|
9
|
+
attr_reader :period, :score, :broadcast, :coverage # these are for consistency with other sports
|
|
10
|
+
attr_reader :match_time, :stoppage_time
|
|
10
11
|
|
|
11
12
|
def initialize(data = {}, league_group: nil, **opts)
|
|
12
13
|
@response = data
|
|
13
14
|
@id = data['id']
|
|
14
15
|
@api = opts[:api]
|
|
16
|
+
@updates = {}
|
|
17
|
+
@changes = {}
|
|
15
18
|
|
|
16
19
|
@league_group = league_group || data['league_group'] || @api&.league_group
|
|
17
20
|
|
|
@@ -49,7 +52,6 @@ module Sportradar
|
|
|
49
52
|
update_teams(stats)
|
|
50
53
|
end
|
|
51
54
|
|
|
52
|
-
|
|
53
55
|
@scheduled = Time.parse(data['scheduled']) if data['scheduled']
|
|
54
56
|
@start_time_tbd = data['start_time_tbd'] if data.key?('start_time_tbd')
|
|
55
57
|
@status = data['status'] if data['status']
|
|
@@ -62,14 +64,18 @@ module Sportradar
|
|
|
62
64
|
|
|
63
65
|
@home_score = data['home_score'] if data['home_score']
|
|
64
66
|
@away_score = data['away_score'] if data['away_score']
|
|
67
|
+
@period = data['period'] if data['period']
|
|
68
|
+
@match_time = data.dig('clock', 'match_time') if data.dig('clock', 'match_time')
|
|
69
|
+
@stoppage_time = data.dig('clock', 'stoppage_time') if data.dig('clock', 'stoppage_time')
|
|
70
|
+
@ball_locations = data['ball_locations'] if data['ball_locations']
|
|
65
71
|
@winner_id = data['winner_id'] if data['winner_id']
|
|
66
72
|
|
|
67
73
|
@aggregate_home_score = data['aggregate_home_score'] if data['aggregate_home_score']
|
|
68
74
|
@aggregate_away_score = data['aggregate_away_score'] if data['aggregate_away_score']
|
|
69
75
|
@aggregate_winner_id = data['aggregate_winner_id'] if data['aggregate_winner_id']
|
|
76
|
+
@scoring_raw.update(data, source: opts[:source])
|
|
70
77
|
create_data(@timeline_hash, data['timeline'], klass: Event, api: api)
|
|
71
|
-
|
|
72
|
-
# @tournament
|
|
78
|
+
|
|
73
79
|
if data['competitors']
|
|
74
80
|
update_teams(data['competitors'])
|
|
75
81
|
end
|
|
@@ -80,14 +86,92 @@ module Sportradar
|
|
|
80
86
|
def title
|
|
81
87
|
[@home, @away].compact.map(&:name).join(' vs ')
|
|
82
88
|
end
|
|
89
|
+
def scoring
|
|
90
|
+
@scoring_raw.scores.each { |period, hash| hash[@home.id] = hash['home']; hash[@away.id] = hash['away'] }
|
|
91
|
+
end
|
|
92
|
+
def score
|
|
93
|
+
{@home.id => @home_score, @away.id => @away_score}
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
# status helpers
|
|
97
|
+
def realtime_state_short
|
|
98
|
+
if future?
|
|
99
|
+
'Scheduled' # ??
|
|
100
|
+
elsif finished?
|
|
101
|
+
'FT'
|
|
102
|
+
elsif postponed?
|
|
103
|
+
'PPD'
|
|
104
|
+
elsif halftime?
|
|
105
|
+
'HT'
|
|
106
|
+
else
|
|
107
|
+
clock_display
|
|
108
|
+
end
|
|
109
|
+
end
|
|
83
110
|
|
|
84
111
|
def realtime_state
|
|
85
|
-
|
|
112
|
+
if future?
|
|
113
|
+
'Scheduled'
|
|
114
|
+
elsif finished?
|
|
115
|
+
'Final'
|
|
116
|
+
elsif postponed?
|
|
117
|
+
'Postponed'
|
|
118
|
+
elsif halftime?
|
|
119
|
+
'Halftime'
|
|
120
|
+
else
|
|
121
|
+
clock_display
|
|
122
|
+
end
|
|
86
123
|
end
|
|
87
124
|
|
|
88
|
-
def
|
|
89
|
-
@
|
|
125
|
+
def halftime?
|
|
126
|
+
@match_status == "halftime"
|
|
127
|
+
end
|
|
128
|
+
|
|
129
|
+
def postponed?
|
|
130
|
+
'postponed' == status
|
|
131
|
+
end
|
|
132
|
+
def unnecessary?
|
|
133
|
+
'unnecessary' == status
|
|
134
|
+
end
|
|
135
|
+
def cancelled?
|
|
136
|
+
['unnecessary', 'postponed'].include? status
|
|
137
|
+
end
|
|
138
|
+
def future?
|
|
139
|
+
['not_started', 'scheduled', 'delayed', 'created', 'time-tbd', 'if-necessary'].include? status
|
|
140
|
+
end
|
|
141
|
+
def started?
|
|
142
|
+
['live'].include?(@status) || ['halftime', '1st_half', '2nd_half'].include?(@match_status)
|
|
90
143
|
end
|
|
144
|
+
def finished?
|
|
145
|
+
['complete', 'closed'].include?(@status) || ['ended'].include?(@match_status)
|
|
146
|
+
end
|
|
147
|
+
def completed?
|
|
148
|
+
'complete' == status
|
|
149
|
+
end
|
|
150
|
+
def closed?
|
|
151
|
+
'closed' == status
|
|
152
|
+
end
|
|
153
|
+
|
|
154
|
+
def clock_display
|
|
155
|
+
if @match_time == '45:00' || @match_time == '90:00' # stoppage time
|
|
156
|
+
@match_time.split(':').first + ?'
|
|
157
|
+
else
|
|
158
|
+
@match_time.split(':').first + ?'
|
|
159
|
+
end
|
|
160
|
+
end
|
|
161
|
+
alias :clock :clock_display
|
|
162
|
+
|
|
163
|
+
def match_seconds
|
|
164
|
+
return nil unless @match_time
|
|
165
|
+
mm, ss = @match_time.split(':').map(&:to_i)
|
|
166
|
+
time = mm * 60 + ss
|
|
167
|
+
if @match_time == '45:00' || @match_time == '90:00' # stoppage time
|
|
168
|
+
mm, ss = @stoppage_time.split(':').map(&:to_i)
|
|
169
|
+
stop_time = mm * 60 + ss
|
|
170
|
+
time += stop_time
|
|
171
|
+
end
|
|
172
|
+
time
|
|
173
|
+
end
|
|
174
|
+
alias :game_seconds :match_seconds
|
|
91
175
|
|
|
92
176
|
def update_teams(data)
|
|
93
177
|
home_hash = data.detect { |team_hash| team_hash["qualifier"] == "home" || team_hash["team"] == "home" }
|
|
@@ -214,7 +298,9 @@ module Sportradar
|
|
|
214
298
|
ingest_timeline(data)
|
|
215
299
|
end
|
|
216
300
|
def ingest_timeline(data)
|
|
217
|
-
update(data)
|
|
301
|
+
update(data, source: :pbp)
|
|
302
|
+
check_newness(:pbp, timeline.last&.updated)
|
|
303
|
+
check_newness(:clock, self.match_seconds.to_s)
|
|
218
304
|
data
|
|
219
305
|
end
|
|
220
306
|
def queue_timeline
|
|
@@ -222,6 +308,21 @@ module Sportradar
|
|
|
222
308
|
{url: url, headers: headers, params: options, timeout: timeout, callback: method(:ingest_timeline)}
|
|
223
309
|
end
|
|
224
310
|
|
|
311
|
+
# tracking updates
|
|
312
|
+
def remember(key, object)
|
|
313
|
+
@updates[key] = object&.dup
|
|
314
|
+
end
|
|
315
|
+
def not_updated?(key, object)
|
|
316
|
+
@updates[key] == object
|
|
317
|
+
end
|
|
318
|
+
def changed?(key)
|
|
319
|
+
@changes[key]
|
|
320
|
+
end
|
|
321
|
+
def check_newness(key, new_object)
|
|
322
|
+
@changes[key] = !not_updated?(key, new_object)
|
|
323
|
+
remember(key, new_object)
|
|
324
|
+
end
|
|
325
|
+
|
|
225
326
|
end
|
|
226
327
|
end
|
|
227
328
|
end
|
|
@@ -240,6 +341,17 @@ __END__
|
|
|
240
341
|
[{"id"=>"sr:competitor:2793", "name"=>"US Sassuolo", "country"=>"Italy", "country_code"=>"ITA", "abbreviation"=>"SAS", "qualifier"=>"home"},
|
|
241
342
|
{"id"=>"sr:competitor:2702", "name"=>"AS Roma", "country"=>"Italy", "country_code"=>"ITA", "abbreviation"=>"ROM", "qualifier"=>"away"}]
|
|
242
343
|
|
|
344
|
+
"sport_event_status"=>
|
|
345
|
+
{"status"=>"live",
|
|
346
|
+
"match_status"=>"1st_half",
|
|
347
|
+
"home_score"=>1,
|
|
348
|
+
"away_score"=>0,
|
|
349
|
+
"period"=>1,
|
|
350
|
+
"clock"=>{"match_time"=>"19:25"},
|
|
351
|
+
"clock"=>{"match_time"=>"45:00", "stoppage_time"=>"00:05"}
|
|
352
|
+
"ball_locations"=>[{"x"=>"95", "y"=>"50", "team"=>"away"}, {"x"=>"80", "y"=>"62", "team"=>"home"}, {"x"=>"82", "y"=>"60", "team"=>"home"}, {"x"=>"79", "y"=>"58", "team"=>"home"}]},
|
|
353
|
+
|
|
354
|
+
|
|
243
355
|
|
|
244
356
|
m = Sportradar::Api::Soccer::Match.new({"id"=>"sr:match:12090446"}, league_group: 'eu')
|
|
245
357
|
res = m.get_summary
|
|
@@ -44,6 +44,14 @@ module Sportradar
|
|
|
44
44
|
@name || [@first_name, @last_name].join(' ')
|
|
45
45
|
end
|
|
46
46
|
|
|
47
|
+
def first_name
|
|
48
|
+
@first_name || (@name && @name.split(', ')[1])
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
def last_name
|
|
52
|
+
@last_name || (@name && @name.split(', ')[0])
|
|
53
|
+
end
|
|
54
|
+
|
|
47
55
|
def api
|
|
48
56
|
@api || Sportradar::Api::Soccer::Api.new(league_group: @league_group)
|
|
49
57
|
end
|
|
@@ -67,9 +75,7 @@ module Sportradar
|
|
|
67
75
|
url, headers, options, timeout = api.get_request_info(path_profile)
|
|
68
76
|
{url: url, headers: headers, params: options, timeout: timeout, callback: method(:ingest_profile)}
|
|
69
77
|
end
|
|
70
|
-
|
|
71
78
|
end
|
|
72
|
-
|
|
73
79
|
end
|
|
74
80
|
end
|
|
75
81
|
end
|
|
@@ -15,22 +15,23 @@ module Sportradar
|
|
|
15
15
|
end
|
|
16
16
|
|
|
17
17
|
def update(data, source: nil, **opts)
|
|
18
|
-
new_scores = case source
|
|
19
|
-
when :box
|
|
20
|
-
|
|
21
|
-
when :timeline
|
|
22
|
-
|
|
23
|
-
when :summary
|
|
24
|
-
|
|
25
|
-
else
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
end
|
|
18
|
+
# new_scores = case source
|
|
19
|
+
# when :box
|
|
20
|
+
# parse_from_box(data)
|
|
21
|
+
# when :timeline
|
|
22
|
+
# parse_from_timeline(data)
|
|
23
|
+
# when :summary
|
|
24
|
+
# parse_from_box(data)
|
|
25
|
+
# else
|
|
26
|
+
# if data['period'] || data['half']
|
|
27
|
+
# parse_from_timeline(data)
|
|
28
|
+
# elsif data['team']
|
|
29
|
+
# parse_from_box(data)
|
|
30
|
+
# else # schedule requests
|
|
31
|
+
# {}
|
|
32
|
+
# end
|
|
33
|
+
# end
|
|
34
|
+
new_scores = parse_from_timeline(data)
|
|
34
35
|
# parse data structure
|
|
35
36
|
# handle data from team (all periods)
|
|
36
37
|
# handle data from period (both teams)
|
|
@@ -47,6 +48,13 @@ module Sportradar
|
|
|
47
48
|
private
|
|
48
49
|
|
|
49
50
|
def parse_from_timeline(data)
|
|
51
|
+
if data['period_scores']
|
|
52
|
+
data['period_scores'].map do |hash|
|
|
53
|
+
[hash["number"], {"home"=>hash['home_score'], "away"=>hash['away_score']}]
|
|
54
|
+
end.to_h
|
|
55
|
+
else
|
|
56
|
+
{}
|
|
57
|
+
end
|
|
50
58
|
end
|
|
51
59
|
|
|
52
60
|
# def period_name
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: sportradar-api
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.13.
|
|
4
|
+
version: 0.13.5
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Ben Eggett
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: exe
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2017-11-
|
|
11
|
+
date: 2017-11-08 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: bundler
|
|
@@ -433,24 +433,8 @@ files:
|
|
|
433
433
|
- lib/sportradar/api/odds.rb
|
|
434
434
|
- lib/sportradar/api/poll.rb
|
|
435
435
|
- lib/sportradar/api/request.rb
|
|
436
|
-
- lib/sportradar/api/soccer-old.rb
|
|
437
|
-
- lib/sportradar/api/soccer-old/boxscore.rb
|
|
438
|
-
- lib/sportradar/api/soccer-old/category.rb
|
|
439
|
-
- lib/sportradar/api/soccer-old/fact.rb
|
|
440
|
-
- lib/sportradar/api/soccer-old/hierarchy.rb
|
|
441
|
-
- lib/sportradar/api/soccer-old/match.rb
|
|
442
|
-
- lib/sportradar/api/soccer-old/player.rb
|
|
443
|
-
- lib/sportradar/api/soccer-old/ranking.rb
|
|
444
|
-
- lib/sportradar/api/soccer-old/schedule.rb
|
|
445
|
-
- lib/sportradar/api/soccer-old/season.rb
|
|
446
|
-
- lib/sportradar/api/soccer-old/standing.rb
|
|
447
|
-
- lib/sportradar/api/soccer-old/statistic.rb
|
|
448
|
-
- lib/sportradar/api/soccer-old/summary.rb
|
|
449
|
-
- lib/sportradar/api/soccer-old/team.rb
|
|
450
|
-
- lib/sportradar/api/soccer-old/tournament.rb
|
|
451
|
-
- lib/sportradar/api/soccer-old/tournament_group.rb
|
|
452
|
-
- lib/sportradar/api/soccer-old/venue.rb
|
|
453
436
|
- lib/sportradar/api/soccer.rb
|
|
437
|
+
- lib/sportradar/api/soccer/README.md
|
|
454
438
|
- lib/sportradar/api/soccer/api.rb
|
|
455
439
|
- lib/sportradar/api/soccer/event.rb
|
|
456
440
|
- lib/sportradar/api/soccer/fact.rb
|
|
@@ -466,16 +450,6 @@ files:
|
|
|
466
450
|
- lib/sportradar/api/soccer/tournament.rb
|
|
467
451
|
- lib/sportradar/api/soccer/venue.rb
|
|
468
452
|
- lib/sportradar/api/version.rb
|
|
469
|
-
- soccer-old/boxscore_test.rb
|
|
470
|
-
- soccer-old/hierarchy_test.rb
|
|
471
|
-
- soccer-old/match_test.rb
|
|
472
|
-
- soccer-old/player_test.rb
|
|
473
|
-
- soccer-old/ranking_test.rb
|
|
474
|
-
- soccer-old/schedule_test.rb
|
|
475
|
-
- soccer-old/standing_test.rb
|
|
476
|
-
- soccer-old/summary_test.rb
|
|
477
|
-
- soccer-old/team_test.rb
|
|
478
|
-
- soccer-old_test.rb
|
|
479
453
|
- sportradar-api.gemspec
|
|
480
454
|
homepage: https://github.com/beneggett/sportradar-api
|
|
481
455
|
licenses: []
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
module Sportradar
|
|
2
|
-
module Api
|
|
3
|
-
class Soccer::Boxscore < Data
|
|
4
|
-
attr_accessor :response, :matches
|
|
5
|
-
|
|
6
|
-
def initialize(data)
|
|
7
|
-
@response = data
|
|
8
|
-
@matches = parse_into_array(selector: response["boxscore"]["matches"]["match"], klass: Sportradar::Api::Soccer::Match) if response['boxscore'] && response['boxscore']['matches'] && response["boxscore"]["matches"]["match"]
|
|
9
|
-
end
|
|
10
|
-
|
|
11
|
-
end
|
|
12
|
-
end
|
|
13
|
-
end
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
module Sportradar
|
|
2
|
-
module Api
|
|
3
|
-
class Soccer::Category < Data
|
|
4
|
-
attr_accessor :response, :id, :name, :country_code, :country, :tournament_groups
|
|
5
|
-
|
|
6
|
-
def initialize(data)
|
|
7
|
-
@response = data
|
|
8
|
-
@id = data["id"]
|
|
9
|
-
@name = data["name"]
|
|
10
|
-
@country_code = data["country_code"]
|
|
11
|
-
@country = data["country"]
|
|
12
|
-
@tournament_groups = parse_into_array(selector: response["tournament_group"], klass: Sportradar::Api::Soccer::TournamentGroup) if response["tournament_group"]
|
|
13
|
-
end
|
|
14
|
-
|
|
15
|
-
end
|
|
16
|
-
end
|
|
17
|
-
end
|
|
@@ -1,61 +0,0 @@
|
|
|
1
|
-
module Sportradar
|
|
2
|
-
module Api
|
|
3
|
-
class Soccer::Fact < Data
|
|
4
|
-
|
|
5
|
-
attr_accessor :id, :type, :time, :updated_time, :scratch, :reference_id, :clock, :team_id, :description, :period, :x, :y, :player_id, :card, :injury_time, :home_score, :away_score, :player_out_id, :player_in_id, :penalty, :owngoal, :header, :assist1_id, :winner_id, :draw, :response
|
|
6
|
-
|
|
7
|
-
def initialize(data)
|
|
8
|
-
@response = data
|
|
9
|
-
@id = data["id"]
|
|
10
|
-
@type = data["type"]
|
|
11
|
-
@time = data["time"]
|
|
12
|
-
@updated_time = data["updated_time"]
|
|
13
|
-
@scratch = data["scratch"]
|
|
14
|
-
@reference_id = data["reference_id"]
|
|
15
|
-
@clock = data["clock"]
|
|
16
|
-
@team_id = data["team_id"]
|
|
17
|
-
@description = data["description"]
|
|
18
|
-
@period = data["period"]
|
|
19
|
-
@x = data["x"]
|
|
20
|
-
@y = data["y"]
|
|
21
|
-
@player_id = data["player_id"]
|
|
22
|
-
@card = data["card"]
|
|
23
|
-
@injury_time = data["injury_time"]
|
|
24
|
-
@home_score = data["home_score"]
|
|
25
|
-
@away_score = data["away_score"]
|
|
26
|
-
@player_out_id = data["player_out_id"]
|
|
27
|
-
@player_in_id = data["player_in_id"]
|
|
28
|
-
@penalty = data["penalty"]
|
|
29
|
-
@owngoal = data["owngoal"]
|
|
30
|
-
@header = data["header"]
|
|
31
|
-
@assist1_id = data["assist1_id"]
|
|
32
|
-
@winner_id = data["winner_id"]
|
|
33
|
-
@draw = data["draw"]
|
|
34
|
-
end
|
|
35
|
-
|
|
36
|
-
## Fact Types
|
|
37
|
-
# card
|
|
38
|
-
# corner_kick
|
|
39
|
-
# free_kick
|
|
40
|
-
# game_resumed
|
|
41
|
-
# goal
|
|
42
|
-
# goal_kick
|
|
43
|
-
# injury
|
|
44
|
-
# injury_return
|
|
45
|
-
# injury_time
|
|
46
|
-
# keeper_save
|
|
47
|
-
# match_ended
|
|
48
|
-
# match_started
|
|
49
|
-
# offside
|
|
50
|
-
# penalty_awarded
|
|
51
|
-
# penalty_missed
|
|
52
|
-
# period_over
|
|
53
|
-
# period_started
|
|
54
|
-
# shot_blocked
|
|
55
|
-
# shot_off_target
|
|
56
|
-
# shot_on_target
|
|
57
|
-
# substitution
|
|
58
|
-
# throwin
|
|
59
|
-
end
|
|
60
|
-
end
|
|
61
|
-
end
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
module Sportradar
|
|
2
|
-
module Api
|
|
3
|
-
class Soccer::Hierarchy < Data
|
|
4
|
-
attr_accessor :response, :categories
|
|
5
|
-
|
|
6
|
-
def initialize(data)
|
|
7
|
-
@response = data
|
|
8
|
-
@categories = parse_into_array(selector: response["category"], klass: Sportradar::Api::Soccer::Category) if response["category"]
|
|
9
|
-
end
|
|
10
|
-
|
|
11
|
-
end
|
|
12
|
-
end
|
|
13
|
-
end
|
|
14
|
-
|
|
@@ -1,55 +0,0 @@
|
|
|
1
|
-
module Sportradar
|
|
2
|
-
module Api
|
|
3
|
-
class Soccer::Match < Data
|
|
4
|
-
|
|
5
|
-
attr_accessor :id, :status, :scheduled, :scratched, :season_id, :reference_id, :category, :tournament_group, :tournament, :home, :away, :venue, :round, :coverage, :period, :clock, :referee, :facts, :response, :future_game, :winner
|
|
6
|
-
|
|
7
|
-
def initialize(data)
|
|
8
|
-
@response = data
|
|
9
|
-
@id = data["id"]
|
|
10
|
-
@reference_id = data["reference_id"]
|
|
11
|
-
@scheduled = Time.parse(data["scheduled"]) if data["scheduled"]
|
|
12
|
-
@scratched = data["scratched"] == "true"
|
|
13
|
-
@season_id = data["season_id"]
|
|
14
|
-
@status = data["status"]
|
|
15
|
-
@category = Sportradar::Api::Soccer::Category.new data["category"] if data["category"]
|
|
16
|
-
@coverage = OpenStruct.new data["coverage"]
|
|
17
|
-
@round = OpenStruct.new data["round"]
|
|
18
|
-
@tournament = Sportradar::Api::Soccer::Tournament.new data["tournament"] if data["tournament"]
|
|
19
|
-
@tournament_group = Sportradar::Api::Soccer::TournamentGroup.new data["tournament_group"] if data["tournament_group"]
|
|
20
|
-
|
|
21
|
-
@away = Sportradar::Api::Soccer::Team.new data["away"] if data["away"]
|
|
22
|
-
@home = Sportradar::Api::Soccer::Team.new data["home"] if data["home"]
|
|
23
|
-
@venue = Sportradar::Api::Soccer::Venue.new data["venue"] if data["venue"]
|
|
24
|
-
|
|
25
|
-
@future_game = @scheduled > Time.now.utc
|
|
26
|
-
@winner = find_winner if @home && @away && !future_game
|
|
27
|
-
|
|
28
|
-
# Actual stats from match summary
|
|
29
|
-
@period = data["period"]
|
|
30
|
-
@clock = data["clock"]
|
|
31
|
-
@referee = OpenStruct.new data["referee"] if data["referee"]
|
|
32
|
-
@facts = data["facts"]["fact"].map {|fact| Sportradar::Api::Soccer::Fact.new fact } if data["facts"]
|
|
33
|
-
end
|
|
34
|
-
|
|
35
|
-
def find_winner
|
|
36
|
-
if @home.winner == 'draw'
|
|
37
|
-
'draw'
|
|
38
|
-
else
|
|
39
|
-
[@home, @away].find {|team| team.winner == "true" }
|
|
40
|
-
end
|
|
41
|
-
|
|
42
|
-
end
|
|
43
|
-
|
|
44
|
-
def period_name
|
|
45
|
-
period_names = {"P1" => "Period one", "H" => "Halftime", "P2" => "Period two", "PX1" => "Pre-extra time one", "X1" => "Extra time one", "PX2" => "Pre-extra time two", "X2" => "Extra time two", "PP" => "Pre-penalty", "P" => "Penalty"}
|
|
46
|
-
period_names[period] if period
|
|
47
|
-
end
|
|
48
|
-
|
|
49
|
-
def status_description
|
|
50
|
-
status_descriptions = {"scheduled" => "The match is scheduled to be played", "inprogress" => "The match is currently in progress", "postponed" => "The match has been postponed to a future date", "delayed" => "The match has been temporarily delayed and will be continued", "canceled" => "The match has been canceled and will not be played", "closed" => "The match is over"}
|
|
51
|
-
status_descriptions[status] if status
|
|
52
|
-
end
|
|
53
|
-
end
|
|
54
|
-
end
|
|
55
|
-
end
|