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.
Files changed (110) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile.lock +28 -26
  3. data/README.md +7 -6
  4. data/lib/sportradar/api/baseball/{REAME.md → README.md} +0 -0
  5. data/lib/sportradar/api/baseball/game.rb +29 -2
  6. data/lib/sportradar/api/baseball/mlb/hierarchy.rb +1 -0
  7. data/lib/sportradar/api/baseball/record.rb +0 -4
  8. data/lib/sportradar/api/baseball/venue.rb +2 -1
  9. data/lib/sportradar/api/basketball/game.rb +2 -2
  10. data/lib/sportradar/api/basketball/record.rb +0 -4
  11. data/lib/sportradar/api/basketball/venue.rb +2 -1
  12. data/lib/sportradar/api/data.rb +3 -3
  13. data/lib/sportradar/api/football/README.md +62 -0
  14. data/lib/sportradar/api/football/drive.rb +105 -0
  15. data/lib/sportradar/api/football/event.rb +33 -0
  16. data/lib/sportradar/api/football/game.rb +389 -0
  17. data/lib/sportradar/api/football/game_stats.rb +135 -0
  18. data/lib/sportradar/api/football/ncaafb/api.rb +76 -0
  19. data/lib/sportradar/api/football/ncaafb/conference.rb +53 -0
  20. data/lib/sportradar/api/football/ncaafb/division.rb +42 -0
  21. data/lib/sportradar/api/football/ncaafb/drive.rb +16 -0
  22. data/lib/sportradar/api/football/ncaafb/game.rb +110 -0
  23. data/lib/sportradar/api/football/ncaafb/play.rb +20 -0
  24. data/lib/sportradar/api/football/ncaafb/player.rb +31 -0
  25. data/lib/sportradar/api/football/ncaafb/quarter.rb +15 -0
  26. data/lib/sportradar/api/football/ncaafb/subdivision.rb +43 -0
  27. data/lib/sportradar/api/football/ncaafb/team.rb +45 -0
  28. data/lib/sportradar/api/football/ncaafb/week.rb +24 -0
  29. data/lib/sportradar/api/football/ncaafb.rb +273 -0
  30. data/lib/sportradar/api/football/nfl/api.rb +76 -0
  31. data/lib/sportradar/api/football/nfl/conference.rb +35 -0
  32. data/lib/sportradar/api/football/nfl/division.rb +37 -0
  33. data/lib/sportradar/api/football/nfl/drive.rb +19 -0
  34. data/lib/sportradar/api/football/nfl/event.rb +19 -0
  35. data/lib/sportradar/api/football/nfl/game.rb +77 -0
  36. data/lib/sportradar/api/football/nfl/play.rb +20 -0
  37. data/lib/sportradar/api/football/nfl/player.rb +31 -0
  38. data/lib/sportradar/api/football/nfl/quarter.rb +15 -0
  39. data/lib/sportradar/api/football/nfl/team.rb +42 -0
  40. data/lib/sportradar/api/football/nfl/week.rb +24 -0
  41. data/lib/sportradar/api/football/nfl.rb +293 -0
  42. data/lib/sportradar/api/football/play.rb +93 -0
  43. data/lib/sportradar/api/football/player.rb +111 -0
  44. data/lib/sportradar/api/football/quarter.rb +42 -0
  45. data/lib/sportradar/api/football/record.rb +48 -0
  46. data/lib/sportradar/api/football/scoring.rb +92 -0
  47. data/lib/sportradar/api/football/situation.rb +20 -0
  48. data/lib/sportradar/api/football/stat_pack/defense.rb +20 -20
  49. data/lib/sportradar/api/football/stat_pack/extra_points.rb +5 -4
  50. data/lib/sportradar/api/football/stat_pack/field_goals.rb +6 -5
  51. data/lib/sportradar/api/football/stat_pack/fumbles.rb +11 -9
  52. data/lib/sportradar/api/football/stat_pack/kick_returns.rb +8 -7
  53. data/lib/sportradar/api/football/stat_pack/kickoffs.rb +9 -7
  54. data/lib/sportradar/api/football/stat_pack/misc_returns.rb +1 -1
  55. data/lib/sportradar/api/football/stat_pack/passing.rb +13 -11
  56. data/lib/sportradar/api/football/stat_pack/penalties.rb +2 -2
  57. data/lib/sportradar/api/football/stat_pack/punt_returns.rb +7 -6
  58. data/lib/sportradar/api/football/stat_pack/punts.rb +12 -10
  59. data/lib/sportradar/api/football/stat_pack/receiving.rb +10 -9
  60. data/lib/sportradar/api/football/stat_pack/rushing.rb +11 -9
  61. data/lib/sportradar/api/football/stat_pack.rb +7 -3
  62. data/lib/sportradar/api/football/team.rb +160 -0
  63. data/lib/sportradar/api/football/venue.rb +25 -0
  64. data/lib/sportradar/api/football/week.rb +57 -0
  65. data/lib/sportradar/api/football.rb +43 -0
  66. data/lib/sportradar/api/mma/venue.rb +1 -1
  67. data/lib/sportradar/api/request.rb +19 -2
  68. data/lib/sportradar/api/version.rb +1 -1
  69. data/lib/sportradar/api.rb +0 -41
  70. metadata +41 -43
  71. data/lib/sportradar/api/ncaafb/drive.rb +0 -89
  72. data/lib/sportradar/api/ncaafb/game.rb +0 -161
  73. data/lib/sportradar/api/ncaafb/play.rb +0 -39
  74. data/lib/sportradar/api/ncaafb/player.rb +0 -61
  75. data/lib/sportradar/api/ncaafb/quarter.rb +0 -37
  76. data/lib/sportradar/api/ncaafb/season.rb +0 -71
  77. data/lib/sportradar/api/ncaafb/team.rb +0 -69
  78. data/lib/sportradar/api/ncaafb/week.rb +0 -33
  79. data/lib/sportradar/api/ncaafb.rb +0 -185
  80. data/lib/sportradar/api/nfl/.play_statistics.rb.swo +0 -0
  81. data/lib/sportradar/api/nfl/broadcast.rb +0 -13
  82. data/lib/sportradar/api/nfl/changelog.rb +0 -17
  83. data/lib/sportradar/api/nfl/coach.rb +0 -17
  84. data/lib/sportradar/api/nfl/conference.rb +0 -17
  85. data/lib/sportradar/api/nfl/depth_chart.rb +0 -47
  86. data/lib/sportradar/api/nfl/division.rb +0 -16
  87. data/lib/sportradar/api/nfl/draft.rb +0 -16
  88. data/lib/sportradar/api/nfl/drive.rb +0 -73
  89. data/lib/sportradar/api/nfl/event.rb +0 -19
  90. data/lib/sportradar/api/nfl/franchise.rb +0 -14
  91. data/lib/sportradar/api/nfl/game.rb +0 -123
  92. data/lib/sportradar/api/nfl/game_statistic.rb +0 -133
  93. data/lib/sportradar/api/nfl/hierarchy.rb +0 -19
  94. data/lib/sportradar/api/nfl/injury.rb +0 -16
  95. data/lib/sportradar/api/nfl/league_depth_chart.rb +0 -26
  96. data/lib/sportradar/api/nfl/play.rb +0 -39
  97. data/lib/sportradar/api/nfl/play_statistics.rb +0 -249
  98. data/lib/sportradar/api/nfl/player.rb +0 -56
  99. data/lib/sportradar/api/nfl/position.rb +0 -14
  100. data/lib/sportradar/api/nfl/quarter.rb +0 -29
  101. data/lib/sportradar/api/nfl/scoring.rb +0 -25
  102. data/lib/sportradar/api/nfl/season.rb +0 -23
  103. data/lib/sportradar/api/nfl/situation.rb +0 -18
  104. data/lib/sportradar/api/nfl/statistic.rb +0 -28
  105. data/lib/sportradar/api/nfl/summary.rb +0 -17
  106. data/lib/sportradar/api/nfl/team.rb +0 -56
  107. data/lib/sportradar/api/nfl/team_depth_chart.rb +0 -44
  108. data/lib/sportradar/api/nfl/venue.rb +0 -22
  109. data/lib/sportradar/api/nfl/week.rb +0 -16
  110. data/lib/sportradar/api/nfl.rb +0 -211
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 3c4cfafdda0856d7bb6addfe7087c721770048c2
4
- data.tar.gz: ae7b4d2a055b7c573c4acc1a166b9da63a931a62
3
+ metadata.gz: 8dc1a28470e8251e6d07c0a558e1fd4c9477cbb2
4
+ data.tar.gz: b8b597bd550858c7a6ed853e49eb4be966b0ca06
5
5
  SHA512:
6
- metadata.gz: bebc71851c241d5c4688bd001021d974a718233bae5e4f93bafae442bc9f41b04f42b35e36af58ee5f7c87592b6cbf9876c66bcf2c3ba99382096379d99228ee
7
- data.tar.gz: 763ccaeca88251002d6fc90c916f9e93743b203c8a44cff8a587e835f5c90dcf0859b4b94d97685b72d015ce9f6d31b2576dc179ae2c69f7b11fc2eb0c97903c
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.10.55)
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.0.2)
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.4.0)
17
- codeclimate-test-reporter (0.6.0)
18
- simplecov (>= 0.7.1, < 1.0.0)
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.15)
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 (>= 1.6.0, < 2)
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.1.1)
31
- ffi (1.9.14)
31
+ dotenv (2.2.1)
32
+ ffi (1.9.18)
32
33
  formatador (0.2.5)
33
- guard (2.14.0)
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.0)
47
- httparty (0.14.0)
47
+ hashdiff (0.3.4)
48
+ httparty (0.15.5)
48
49
  multi_xml (>= 0.5.2)
49
- i18n (0.8.1)
50
- json (2.0.2)
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.10)
56
+ lumberjack (1.0.12)
56
57
  method_source (0.8.2)
57
- minitest (5.9.1)
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.7)
71
- rb-inotify (0.9.7)
72
- ffi (>= 0.5.0)
73
- ruby_dep (1.4.0)
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.0)
82
+ simplecov-html (0.10.1)
81
83
  slop (3.6.0)
82
- term-ansicolor (1.4.0)
84
+ term-ansicolor (1.6.0)
83
85
  tins (~> 1.0)
84
- thor (0.19.1)
86
+ thor (0.19.4)
85
87
  thread_safe (0.3.6)
86
- tins (1.12.0)
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 (2.1.0)
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.0
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
- ### NFL
89
+ ### Football
90
90
 
91
- It's possible to find the current simulation game:
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.new('o').active_simulation
95
- =>
96
- https://api.sportradar.us/nfl-sim1/games/f45b4a31-b009-4039-8394-42efbc6d5532/boxscore.xml
97
- Live Game: Green Bay Packers vs Minnesota Vikings. Q2 00:08. game_id='f45b4a31-b009-4039-8394-42efbc6d5532'
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
@@ -262,6 +262,7 @@ __END__
262
262
  mlb = Sportradar::Api::Baseball::Mlb::Hierarchy.new
263
263
  res = mlb.get_daily_summary;
264
264
  res = mlb.get_hierarchy;
265
+ res = mlb.get_schedule;
265
266
  t = mlb.teams.first;
266
267
  t.get_season_stats;
267
268
  t.players.sample
@@ -12,10 +12,6 @@ module Sportradar
12
12
  update(data, **opts)
13
13
  end
14
14
 
15
- def profile
16
- Profile.new(self)
17
- end
18
-
19
15
  def update(data, **opts)
20
16
  @wins = data["win"]
21
17
  @losses = data["loss"]
@@ -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']
@@ -11,10 +11,6 @@ module Sportradar
11
11
  update(data, **opts)
12
12
  end
13
13
 
14
- def profile
15
- Profile.new(self)
16
- end
17
-
18
14
  def update(data, **opts)
19
15
  @wins = data['wins'].to_i
20
16
  @losses = data['losses'].to_i
@@ -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
@@ -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['id']]
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['id']] = klass.new(data, **opts)
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