sportradar-api 0.10.55 → 0.11.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 +28 -26
- data/README.md +7 -6
- data/lib/sportradar/api/baseball/{REAME.md → README.md} +0 -0
- data/lib/sportradar/api/baseball/game.rb +29 -2
- data/lib/sportradar/api/baseball/mlb/hierarchy.rb +1 -0
- data/lib/sportradar/api/baseball/record.rb +0 -4
- data/lib/sportradar/api/baseball/venue.rb +2 -1
- data/lib/sportradar/api/basketball/game.rb +2 -2
- data/lib/sportradar/api/basketball/record.rb +0 -4
- data/lib/sportradar/api/basketball/venue.rb +2 -1
- data/lib/sportradar/api/data.rb +3 -3
- data/lib/sportradar/api/football/README.md +62 -0
- data/lib/sportradar/api/football/drive.rb +105 -0
- data/lib/sportradar/api/football/event.rb +33 -0
- data/lib/sportradar/api/football/game.rb +389 -0
- data/lib/sportradar/api/football/game_stats.rb +135 -0
- data/lib/sportradar/api/football/ncaafb/api.rb +76 -0
- data/lib/sportradar/api/football/ncaafb/conference.rb +53 -0
- data/lib/sportradar/api/football/ncaafb/division.rb +42 -0
- data/lib/sportradar/api/football/ncaafb/drive.rb +16 -0
- data/lib/sportradar/api/football/ncaafb/game.rb +110 -0
- data/lib/sportradar/api/football/ncaafb/play.rb +20 -0
- data/lib/sportradar/api/football/ncaafb/player.rb +31 -0
- data/lib/sportradar/api/football/ncaafb/quarter.rb +15 -0
- data/lib/sportradar/api/football/ncaafb/subdivision.rb +43 -0
- data/lib/sportradar/api/football/ncaafb/team.rb +45 -0
- data/lib/sportradar/api/football/ncaafb/week.rb +24 -0
- data/lib/sportradar/api/football/ncaafb.rb +273 -0
- data/lib/sportradar/api/football/nfl/api.rb +76 -0
- data/lib/sportradar/api/football/nfl/conference.rb +35 -0
- data/lib/sportradar/api/football/nfl/division.rb +37 -0
- data/lib/sportradar/api/football/nfl/drive.rb +19 -0
- data/lib/sportradar/api/football/nfl/event.rb +19 -0
- data/lib/sportradar/api/football/nfl/game.rb +77 -0
- data/lib/sportradar/api/football/nfl/play.rb +20 -0
- data/lib/sportradar/api/football/nfl/player.rb +31 -0
- data/lib/sportradar/api/football/nfl/quarter.rb +15 -0
- data/lib/sportradar/api/football/nfl/team.rb +42 -0
- data/lib/sportradar/api/football/nfl/week.rb +24 -0
- data/lib/sportradar/api/football/nfl.rb +293 -0
- data/lib/sportradar/api/football/play.rb +93 -0
- data/lib/sportradar/api/football/player.rb +111 -0
- data/lib/sportradar/api/football/quarter.rb +42 -0
- data/lib/sportradar/api/football/record.rb +48 -0
- data/lib/sportradar/api/football/scoring.rb +92 -0
- data/lib/sportradar/api/football/situation.rb +20 -0
- data/lib/sportradar/api/football/stat_pack/defense.rb +20 -20
- data/lib/sportradar/api/football/stat_pack/extra_points.rb +5 -4
- data/lib/sportradar/api/football/stat_pack/field_goals.rb +6 -5
- data/lib/sportradar/api/football/stat_pack/fumbles.rb +11 -9
- data/lib/sportradar/api/football/stat_pack/kick_returns.rb +8 -7
- data/lib/sportradar/api/football/stat_pack/kickoffs.rb +9 -7
- data/lib/sportradar/api/football/stat_pack/misc_returns.rb +1 -1
- data/lib/sportradar/api/football/stat_pack/passing.rb +13 -11
- data/lib/sportradar/api/football/stat_pack/penalties.rb +2 -2
- data/lib/sportradar/api/football/stat_pack/punt_returns.rb +7 -6
- data/lib/sportradar/api/football/stat_pack/punts.rb +12 -10
- data/lib/sportradar/api/football/stat_pack/receiving.rb +10 -9
- data/lib/sportradar/api/football/stat_pack/rushing.rb +11 -9
- data/lib/sportradar/api/football/stat_pack.rb +7 -3
- data/lib/sportradar/api/football/team.rb +160 -0
- data/lib/sportradar/api/football/venue.rb +25 -0
- data/lib/sportradar/api/football/week.rb +57 -0
- data/lib/sportradar/api/football.rb +43 -0
- data/lib/sportradar/api/mma/venue.rb +1 -1
- data/lib/sportradar/api/request.rb +19 -2
- data/lib/sportradar/api/version.rb +1 -1
- data/lib/sportradar/api.rb +0 -41
- metadata +41 -43
- data/lib/sportradar/api/ncaafb/drive.rb +0 -89
- data/lib/sportradar/api/ncaafb/game.rb +0 -161
- data/lib/sportradar/api/ncaafb/play.rb +0 -39
- data/lib/sportradar/api/ncaafb/player.rb +0 -61
- data/lib/sportradar/api/ncaafb/quarter.rb +0 -37
- data/lib/sportradar/api/ncaafb/season.rb +0 -71
- data/lib/sportradar/api/ncaafb/team.rb +0 -69
- data/lib/sportradar/api/ncaafb/week.rb +0 -33
- data/lib/sportradar/api/ncaafb.rb +0 -185
- data/lib/sportradar/api/nfl/.play_statistics.rb.swo +0 -0
- data/lib/sportradar/api/nfl/broadcast.rb +0 -13
- data/lib/sportradar/api/nfl/changelog.rb +0 -17
- data/lib/sportradar/api/nfl/coach.rb +0 -17
- data/lib/sportradar/api/nfl/conference.rb +0 -17
- data/lib/sportradar/api/nfl/depth_chart.rb +0 -47
- data/lib/sportradar/api/nfl/division.rb +0 -16
- data/lib/sportradar/api/nfl/draft.rb +0 -16
- data/lib/sportradar/api/nfl/drive.rb +0 -73
- data/lib/sportradar/api/nfl/event.rb +0 -19
- data/lib/sportradar/api/nfl/franchise.rb +0 -14
- data/lib/sportradar/api/nfl/game.rb +0 -123
- data/lib/sportradar/api/nfl/game_statistic.rb +0 -133
- data/lib/sportradar/api/nfl/hierarchy.rb +0 -19
- data/lib/sportradar/api/nfl/injury.rb +0 -16
- data/lib/sportradar/api/nfl/league_depth_chart.rb +0 -26
- data/lib/sportradar/api/nfl/play.rb +0 -39
- data/lib/sportradar/api/nfl/play_statistics.rb +0 -249
- data/lib/sportradar/api/nfl/player.rb +0 -56
- data/lib/sportradar/api/nfl/position.rb +0 -14
- data/lib/sportradar/api/nfl/quarter.rb +0 -29
- data/lib/sportradar/api/nfl/scoring.rb +0 -25
- data/lib/sportradar/api/nfl/season.rb +0 -23
- data/lib/sportradar/api/nfl/situation.rb +0 -18
- data/lib/sportradar/api/nfl/statistic.rb +0 -28
- data/lib/sportradar/api/nfl/summary.rb +0 -17
- data/lib/sportradar/api/nfl/team.rb +0 -56
- data/lib/sportradar/api/nfl/team_depth_chart.rb +0 -44
- data/lib/sportradar/api/nfl/venue.rb +0 -22
- data/lib/sportradar/api/nfl/week.rb +0 -16
- data/lib/sportradar/api/nfl.rb +0 -211
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8dc1a28470e8251e6d07c0a558e1fd4c9477cbb2
|
4
|
+
data.tar.gz: b8b597bd550858c7a6ed853e49eb4be966b0ca06
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a939bf7829663306244b1fc49d6be654d6b94a80323c3c0f52d2faa8b94a7ab96df47968e57e3868c86444aeaa09b40cec734517596f7b3a589ef374e74fb142
|
7
|
+
data.tar.gz: 40ae8b1e37e659dc5dfcacef0a110cab3ff81cf0ba664d8634e178bb3d489fb0f5398f94b38d7e0458e36de66ce16e3def548171cdf4e87a987d40ec207b6466
|
data/Gemfile.lock
CHANGED
@@ -1,36 +1,37 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
sportradar-api (0.
|
4
|
+
sportradar-api (0.11.0)
|
5
5
|
activesupport
|
6
6
|
httparty (>= 0.14.0)
|
7
7
|
|
8
8
|
GEM
|
9
9
|
remote: https://rubygems.org/
|
10
10
|
specs:
|
11
|
-
activesupport (5.
|
11
|
+
activesupport (5.1.2)
|
12
12
|
concurrent-ruby (~> 1.0, >= 1.0.2)
|
13
13
|
i18n (~> 0.7)
|
14
14
|
minitest (~> 5.1)
|
15
15
|
tzinfo (~> 1.1)
|
16
|
-
addressable (2.
|
17
|
-
|
18
|
-
|
16
|
+
addressable (2.5.1)
|
17
|
+
public_suffix (~> 2.0, >= 2.0.2)
|
18
|
+
codeclimate-test-reporter (1.0.8)
|
19
|
+
simplecov (<= 0.13)
|
19
20
|
coderay (1.1.1)
|
20
21
|
concurrent-ruby (1.0.5)
|
21
|
-
coveralls (0.8.
|
22
|
+
coveralls (0.8.19)
|
22
23
|
json (>= 1.8, < 3)
|
23
24
|
simplecov (~> 0.12.0)
|
24
25
|
term-ansicolor (~> 1.3)
|
25
26
|
thor (~> 0.19.1)
|
26
|
-
tins (
|
27
|
+
tins (~> 1.6)
|
27
28
|
crack (0.4.3)
|
28
29
|
safe_yaml (~> 1.0.0)
|
29
30
|
docile (1.1.5)
|
30
|
-
dotenv (2.
|
31
|
-
ffi (1.9.
|
31
|
+
dotenv (2.2.1)
|
32
|
+
ffi (1.9.18)
|
32
33
|
formatador (0.2.5)
|
33
|
-
guard (2.14.
|
34
|
+
guard (2.14.1)
|
34
35
|
formatador (>= 0.2.4)
|
35
36
|
listen (>= 2.7, < 4.0)
|
36
37
|
lumberjack (~> 1.0)
|
@@ -43,18 +44,18 @@ GEM
|
|
43
44
|
guard-minitest (2.4.6)
|
44
45
|
guard-compat (~> 1.2)
|
45
46
|
minitest (>= 3.0)
|
46
|
-
hashdiff (0.3.
|
47
|
-
httparty (0.
|
47
|
+
hashdiff (0.3.4)
|
48
|
+
httparty (0.15.5)
|
48
49
|
multi_xml (>= 0.5.2)
|
49
|
-
i18n (0.8.
|
50
|
-
json (2.0
|
50
|
+
i18n (0.8.4)
|
51
|
+
json (2.1.0)
|
51
52
|
listen (3.1.5)
|
52
53
|
rb-fsevent (~> 0.9, >= 0.9.4)
|
53
54
|
rb-inotify (~> 0.9, >= 0.9.7)
|
54
55
|
ruby_dep (~> 1.2)
|
55
|
-
lumberjack (1.0.
|
56
|
+
lumberjack (1.0.12)
|
56
57
|
method_source (0.8.2)
|
57
|
-
minitest (5.
|
58
|
+
minitest (5.10.2)
|
58
59
|
minitest-focus (1.1.2)
|
59
60
|
minitest (>= 4, < 6)
|
60
61
|
multi_xml (0.6.0)
|
@@ -66,28 +67,29 @@ GEM
|
|
66
67
|
coderay (~> 1.1.0)
|
67
68
|
method_source (~> 0.8.1)
|
68
69
|
slop (~> 3.4)
|
70
|
+
public_suffix (2.0.5)
|
69
71
|
rake (10.5.0)
|
70
|
-
rb-fsevent (0.9.
|
71
|
-
rb-inotify (0.9.
|
72
|
-
ffi (>= 0.5.0)
|
73
|
-
ruby_dep (1.
|
72
|
+
rb-fsevent (0.9.8)
|
73
|
+
rb-inotify (0.9.10)
|
74
|
+
ffi (>= 0.5.0, < 2)
|
75
|
+
ruby_dep (1.5.0)
|
74
76
|
safe_yaml (1.0.4)
|
75
77
|
shellany (0.0.1)
|
76
78
|
simplecov (0.12.0)
|
77
79
|
docile (~> 1.1.0)
|
78
80
|
json (>= 1.8, < 3)
|
79
81
|
simplecov-html (~> 0.10.0)
|
80
|
-
simplecov-html (0.10.
|
82
|
+
simplecov-html (0.10.1)
|
81
83
|
slop (3.6.0)
|
82
|
-
term-ansicolor (1.
|
84
|
+
term-ansicolor (1.6.0)
|
83
85
|
tins (~> 1.0)
|
84
|
-
thor (0.19.
|
86
|
+
thor (0.19.4)
|
85
87
|
thread_safe (0.3.6)
|
86
|
-
tins (1.
|
88
|
+
tins (1.14.0)
|
87
89
|
tzinfo (1.2.3)
|
88
90
|
thread_safe (~> 0.1)
|
89
91
|
vcr (3.0.3)
|
90
|
-
webmock (
|
92
|
+
webmock (3.0.1)
|
91
93
|
addressable (>= 2.3.6)
|
92
94
|
crack (>= 0.3.2)
|
93
95
|
hashdiff
|
@@ -112,4 +114,4 @@ DEPENDENCIES
|
|
112
114
|
webmock
|
113
115
|
|
114
116
|
BUNDLED WITH
|
115
|
-
1.15.
|
117
|
+
1.15.1
|
data/README.md
CHANGED
@@ -86,15 +86,16 @@ summary = sim.match_summary(sim.simulation_match)
|
|
86
86
|
boxscore = sim.match_boxscore(sim.simulation_match)
|
87
87
|
```
|
88
88
|
|
89
|
-
###
|
89
|
+
### Football
|
90
90
|
|
91
|
-
It's possible to
|
91
|
+
It's possible to use simulation games from Sportradar. This allows you to see what data looks like during a game (including non game APIs), useful for development during the offseason.
|
92
92
|
|
93
93
|
```
|
94
|
-
Sportradar::Api::Nfl.
|
95
|
-
=>
|
96
|
-
|
97
|
-
|
94
|
+
Sportradar::Api::Football::Nfl.simulations # => returns array of simulation games. Only 1 is inprogress at a time
|
95
|
+
Sportradar::Api::Football::Nfl.simulation # => returns Sportradar::Api::Football::Nfl instance with a sim api. useful for mid season stats, standings, etc
|
96
|
+
|
97
|
+
Sportradar::Api::Football::Ncaafb.simulations # => returns array of simulation games. Only 1 is inprogress at a time
|
98
|
+
Sportradar::Api::Football::Ncaafb.simulation # => returns Sportradar::Api::Football::Ncaafb instance with a sim api. useful for mid season stats, standings, etc
|
98
99
|
```
|
99
100
|
|
100
101
|
## Development
|
File without changes
|
@@ -104,7 +104,6 @@ module Sportradar
|
|
104
104
|
|
105
105
|
def update(data, source: nil, **opts)
|
106
106
|
# via pbp
|
107
|
-
@title = data['title'] if data['title']
|
108
107
|
@status = data['status'] if data['status']
|
109
108
|
@coverage = data['coverage'] if data['coverage']
|
110
109
|
@day_night = data['day_night'] if data['day_night']
|
@@ -116,9 +115,10 @@ module Sportradar
|
|
116
115
|
|
117
116
|
@scheduled = Time.parse(data["scheduled"]) if data["scheduled"]
|
118
117
|
@venue = Venue.new(data['venue']) if data['venue']
|
119
|
-
@broadcast = Broadcast.new(data['broadcast']) if data['broadcast']
|
118
|
+
@broadcast = Broadcast.new(data['broadcast']) if !data['broadcast'].to_h.empty?
|
120
119
|
@home = Team.new(data['home'], api: api, game: self) if data['home']
|
121
120
|
@away = Team.new(data['away'], api: api, game: self) if data['away']
|
121
|
+
@title = data['title'] || @title || (home && away && "#{home.full_name} vs #{away.full_name}")
|
122
122
|
|
123
123
|
@duration = data['duration'] if data['duration']
|
124
124
|
@attendance = data['attendance'] if data['attendance']
|
@@ -289,6 +289,29 @@ module Sportradar
|
|
289
289
|
end
|
290
290
|
|
291
291
|
# status helpers
|
292
|
+
|
293
|
+
def realtime_state
|
294
|
+
if future?
|
295
|
+
'Scheduled'
|
296
|
+
elsif delayed?
|
297
|
+
'Delayed'
|
298
|
+
elsif finished?
|
299
|
+
'Final'
|
300
|
+
elsif postponed?
|
301
|
+
'Postponed'
|
302
|
+
else
|
303
|
+
inning_abbr
|
304
|
+
end
|
305
|
+
end
|
306
|
+
|
307
|
+
def inning_abbr
|
308
|
+
if !count.empty?
|
309
|
+
inning_half = self.count['inning_half']
|
310
|
+
inning = self.count['inning']
|
311
|
+
"#{(inning_half == 'B' ? 'Bottom' : 'Top')} #{(inning || 1).ordinalize}"
|
312
|
+
end
|
313
|
+
end
|
314
|
+
|
292
315
|
def postponed?
|
293
316
|
'postponed' == status
|
294
317
|
end
|
@@ -301,6 +324,10 @@ module Sportradar
|
|
301
324
|
['unnecessary', 'postponed'].include? status
|
302
325
|
end
|
303
326
|
|
327
|
+
def delayed?
|
328
|
+
['wdelay', 'delayed'].include? status
|
329
|
+
end
|
330
|
+
|
304
331
|
def future?
|
305
332
|
['scheduled', 'delayed', 'created', 'time-tbd'].include? status
|
306
333
|
end
|
@@ -2,7 +2,7 @@ module Sportradar
|
|
2
2
|
module Api
|
3
3
|
module Baseball
|
4
4
|
class Venue < Data
|
5
|
-
attr_accessor :response, :id, :name, :address, :city, :state, :country, :zip, :capacity
|
5
|
+
attr_accessor :response, :id, :name, :address, :city, :state, :country, :zip, :capacity, :timezone
|
6
6
|
@all_hash = {}
|
7
7
|
def self.new(data, **opts)
|
8
8
|
existing = @all_hash[data['id']]
|
@@ -31,6 +31,7 @@ module Sportradar
|
|
31
31
|
@zip = data['zip']
|
32
32
|
@country = data['country']
|
33
33
|
@capacity = data['capacity']
|
34
|
+
@timezone = data['timezone']
|
34
35
|
|
35
36
|
@surface = data['surface']
|
36
37
|
|
@@ -80,7 +80,6 @@ module Sportradar
|
|
80
80
|
|
81
81
|
def update(data, source: nil, **opts)
|
82
82
|
# via pbp
|
83
|
-
@title = data['title'] if data['title']
|
84
83
|
@status = data['status'] if data['status']
|
85
84
|
@coverage = data['coverage'] if data['coverage']
|
86
85
|
@home_id = data['home_team'] || data.dig('home', 'id') if data['home_team'] || data.dig('home', 'id')
|
@@ -90,9 +89,10 @@ module Sportradar
|
|
90
89
|
|
91
90
|
@scheduled = Time.parse(data["scheduled"]) if data["scheduled"]
|
92
91
|
@venue = Venue.new(data['venue']) if data['venue']
|
93
|
-
@broadcast = Broadcast.new(data['broadcast']) if data['broadcast']
|
92
|
+
@broadcast = Broadcast.new(data['broadcast']) if !data['broadcast'].to_h.empty?
|
94
93
|
@home = team_class.new(data['home'], api: api, game: self) if data['home']
|
95
94
|
@away = team_class.new(data['away'], api: api, game: self) if data['away']
|
95
|
+
@title = data['title'] || @title || (home && away && "#{home.full_name} vs #{away.full_name}")
|
96
96
|
|
97
97
|
@duration = data['duration'] if data['duration']
|
98
98
|
@clock = data['clock'] if data['clock']
|
@@ -2,7 +2,7 @@ module Sportradar
|
|
2
2
|
module Api
|
3
3
|
module Basketball
|
4
4
|
class Venue < Data
|
5
|
-
attr_accessor :response, :id, :name, :address, :city, :state, :country, :zip, :capacity
|
5
|
+
attr_accessor :response, :id, :name, :address, :city, :state, :country, :zip, :capacity, :timezone
|
6
6
|
@all_hash = {}
|
7
7
|
def self.new(data, **opts)
|
8
8
|
existing = @all_hash[data['id']]
|
@@ -31,6 +31,7 @@ module Sportradar
|
|
31
31
|
@zip = data['zip']
|
32
32
|
@country = data['country']
|
33
33
|
@capacity = data['capacity']
|
34
|
+
@timezone = data['timezone']
|
34
35
|
end
|
35
36
|
|
36
37
|
def location
|
data/lib/sportradar/api/data.rb
CHANGED
@@ -48,14 +48,14 @@ module Sportradar
|
|
48
48
|
|
49
49
|
# @param existing [Hash{String=>Data}] Existing data hash, ID => entity
|
50
50
|
# @param data [Hash, Array] new data to update with
|
51
|
-
def create_data(existing = {}, data, klass: nil, **opts)
|
51
|
+
def create_data(existing = {}, data, klass: nil, identifier: 'id', **opts)
|
52
52
|
existing ||= {} # handles nil case, typically during object instantiation
|
53
53
|
case data
|
54
54
|
when [], {}
|
55
55
|
existing
|
56
56
|
when Array
|
57
57
|
data.each do |hash|
|
58
|
-
current = existing[hash[
|
58
|
+
current = existing[hash[identifier]]
|
59
59
|
if current
|
60
60
|
current.update(hash, **opts)
|
61
61
|
else
|
@@ -65,7 +65,7 @@ module Sportradar
|
|
65
65
|
existing[current.id]
|
66
66
|
end
|
67
67
|
when Hash
|
68
|
-
existing[data[
|
68
|
+
existing[data[identifier]] = klass.new(data, **opts)
|
69
69
|
else
|
70
70
|
# raise
|
71
71
|
end
|
@@ -0,0 +1,62 @@
|
|
1
|
+
# Sportradar Football
|
2
|
+
|
3
|
+
![API Reference](https://developer.sportradar.com/files/indexFootball.html)
|
4
|
+
|
5
|
+
## NFL
|
6
|
+
|
7
|
+
Get started with official NFL api v1:
|
8
|
+
|
9
|
+
```ruby
|
10
|
+
nfl = Sportradar::Api::Football::Nfl.new
|
11
|
+
nfl = Sportradar::Api::Football::Nfl.new(year: 2016)
|
12
|
+
res = nfl.get_schedule # => res is the raw response data hash. the `nfl` object now has weeks present to interact with
|
13
|
+
res = nfl.get_weekly_schedule # => res is the raw response data hash. the `nfl` object now has weeks present to interact with
|
14
|
+
nfl.weeks.count # => 17
|
15
|
+
nfl.games.count # => 256
|
16
|
+
nfl.weeks.first.games.count # => 16
|
17
|
+
game = nfl.games.sample # => Sportradar::Api::Football::Nfl::Game
|
18
|
+
res = game.get_pbp # => res is raw response data hash. the `game` object now has quarters/drives/plays to interact with
|
19
|
+
game.quarters.size # => 4 (unless the game went to overtime)
|
20
|
+
game.drives.size # => (20-30) most NFL games have between 20 and 30 drives
|
21
|
+
game.plays.size # => 150 most NFL games have about 150 total plays
|
22
|
+
|
23
|
+
game.get_statistics # => res is raw response data hash. the `game` object now has team stats to interact with
|
24
|
+
game.home.stats.passing # => Sportradar::Api::Football::StatPack::Passing => passing stats
|
25
|
+
game.home.stats.passing.players.first
|
26
|
+
```
|
27
|
+
|
28
|
+
|
29
|
+
```ruby
|
30
|
+
nfl = Marshal.load(File.binread('nfl.bin'));
|
31
|
+
ncaafb = Marshal.load(File.binread('ncaafb.bin'));
|
32
|
+
g1 = nfl.games.sample;
|
33
|
+
g2 = ncaafb.games.sample
|
34
|
+
g2.year
|
35
|
+
g1.year
|
36
|
+
games = [g1, g2]
|
37
|
+
games.map(&:year)
|
38
|
+
games.map(&:week)
|
39
|
+
games.map(&:week_number)
|
40
|
+
g1
|
41
|
+
g1.year
|
42
|
+
g1.week_number
|
43
|
+
games.map(&:type)
|
44
|
+
games.map(&:path_pbp)
|
45
|
+
games.map(&:plays)
|
46
|
+
games.map(&:drives).map(&:count)
|
47
|
+
games.map(&:plays).map(&:count)
|
48
|
+
games.map(&:quarter)
|
49
|
+
games.map(&:score)
|
50
|
+
games.each(&:get_statistics);
|
51
|
+
games.each(&:get_box);
|
52
|
+
games.map(&:score)
|
53
|
+
games.each(&:get_pbp);
|
54
|
+
games.map(&:plays).map(&:count)
|
55
|
+
games.map(&:drives).map(&:count)
|
56
|
+
|
57
|
+
|
58
|
+
uri = '2015/REG/1/WKY/MSH'
|
59
|
+
game = Sportradar::Api::Football::Ncaafb::Game.new('uri' => uri)
|
60
|
+
```
|
61
|
+
|
62
|
+
|
@@ -0,0 +1,105 @@
|
|
1
|
+
module Sportradar
|
2
|
+
module Api
|
3
|
+
module Football
|
4
|
+
class Drive < Data
|
5
|
+
attr_accessor :response, :api, :id, :sequence, :start_reason, :end_reason, :play_count, :duration, :first_downs, :gain, :penalty_yards, :scoring_drive, :quarter, :team
|
6
|
+
|
7
|
+
def self.new(data, **opts)
|
8
|
+
if data['type'] == 'event'
|
9
|
+
Event.new(data, **opts)
|
10
|
+
else
|
11
|
+
super
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
def initialize(data, **opts)
|
16
|
+
@response = data
|
17
|
+
@id = data["id"]
|
18
|
+
@api = opts[:api]
|
19
|
+
@plays_hash = {}
|
20
|
+
@events_hash = {}
|
21
|
+
|
22
|
+
update(data, **opts)
|
23
|
+
end
|
24
|
+
|
25
|
+
def update(data, **opts)
|
26
|
+
@type = data['type']
|
27
|
+
@team = data['team']
|
28
|
+
@clock = data['clock']
|
29
|
+
|
30
|
+
@sequence = data["sequence"]
|
31
|
+
@start_reason = data["start_reason"]
|
32
|
+
@end_reason = data["end_reason"]
|
33
|
+
@play_count = data["play_count"]
|
34
|
+
@duration = data["duration"]
|
35
|
+
@first_downs = data["first_downs"]
|
36
|
+
@gain = data["gain"]
|
37
|
+
@penalty_yards = data["penalty_yards"]
|
38
|
+
@scoring_drive = data["scoring_drive"]
|
39
|
+
|
40
|
+
@quarter_data = data['quarter']
|
41
|
+
@team_data = data['team']
|
42
|
+
|
43
|
+
handle_plays_and_events(data, **opts)
|
44
|
+
|
45
|
+
self
|
46
|
+
end
|
47
|
+
|
48
|
+
def plays
|
49
|
+
@plays_hash.values
|
50
|
+
end
|
51
|
+
|
52
|
+
def events
|
53
|
+
@events_hash.values
|
54
|
+
end
|
55
|
+
|
56
|
+
def end_reason_possibilities
|
57
|
+
[
|
58
|
+
'UNKNOWN',
|
59
|
+
'Touchdown',
|
60
|
+
'Safety',
|
61
|
+
'Field Goal',
|
62
|
+
'Missed FG',
|
63
|
+
'Blocked FG',
|
64
|
+
'Blocked FG, Downs',
|
65
|
+
'Blocked FG, Safety',
|
66
|
+
'Punt',
|
67
|
+
'Blocked Punt',
|
68
|
+
'Blocked Punt, Downs',
|
69
|
+
'Blocked Punt, Safety',
|
70
|
+
'Downs',
|
71
|
+
'Interception',
|
72
|
+
'Fumble',
|
73
|
+
'Fumble, Safety',
|
74
|
+
'Muffed FG',
|
75
|
+
'Muffed Punt',
|
76
|
+
'Muffed Kickoff',
|
77
|
+
'Kickoff',
|
78
|
+
'Own Kickoff',
|
79
|
+
'Onside Kick',
|
80
|
+
'Kickoff, No Play',
|
81
|
+
'End of Half',
|
82
|
+
'End of Game',
|
83
|
+
]
|
84
|
+
end
|
85
|
+
def normalized_end_reason
|
86
|
+
case end_reason
|
87
|
+
when 'Touchdown'
|
88
|
+
'Touchdown'
|
89
|
+
when 'Field Goal', 'Missed FG', "Blocked FG, Downs", 'Muffed FG', 'Blocked FG, Safety'
|
90
|
+
'Field Goal'
|
91
|
+
when 'Downs'
|
92
|
+
'Downs'
|
93
|
+
when 'Interception', 'Fumble'
|
94
|
+
'Turnover'
|
95
|
+
when 'Punt'
|
96
|
+
'Punt'
|
97
|
+
else
|
98
|
+
'Other'
|
99
|
+
end
|
100
|
+
end
|
101
|
+
end
|
102
|
+
|
103
|
+
end
|
104
|
+
end
|
105
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
module Sportradar
|
2
|
+
module Api
|
3
|
+
module Football
|
4
|
+
class Event < Data
|
5
|
+
attr_accessor :response, :id, :sequence, :reference, :clock, :type, :event_type, :description, :alt_description
|
6
|
+
|
7
|
+
def initialize(data, **opts)
|
8
|
+
@response = data
|
9
|
+
@id = data["id"]
|
10
|
+
update(data, **opts)
|
11
|
+
end
|
12
|
+
def update(data, **opts)
|
13
|
+
@sequence = data["sequence"]
|
14
|
+
@reference = data["reference"]
|
15
|
+
@clock = data["clock"]
|
16
|
+
@type = data["type"]
|
17
|
+
@event_type = data["event_type"]
|
18
|
+
@description = data["description"] || data["summary"]
|
19
|
+
@alt_description = data["alt_description"]
|
20
|
+
|
21
|
+
self
|
22
|
+
end
|
23
|
+
def plays
|
24
|
+
[]
|
25
|
+
end
|
26
|
+
def events
|
27
|
+
[self]
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|