sportradar-api 0.9.12 → 0.11.21

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.
Files changed (215) hide show
  1. checksums.yaml +4 -4
  2. data/.env.sample +6 -0
  3. data/.travis.yml +1 -0
  4. data/Gemfile.lock +32 -30
  5. data/README.md +12 -9
  6. data/lib/sportradar/api/baseball/README.md +28 -0
  7. data/lib/sportradar/api/baseball/error.rb +25 -0
  8. data/lib/sportradar/api/baseball/event.rb +44 -0
  9. data/lib/sportradar/api/baseball/events/at_bat.rb +96 -0
  10. data/lib/sportradar/api/baseball/events/lineup.rb +41 -0
  11. data/lib/sportradar/api/baseball/events/warming_up.rb +35 -0
  12. data/lib/sportradar/api/baseball/fielder.rb +26 -0
  13. data/lib/sportradar/api/baseball/game.rb +472 -0
  14. data/lib/sportradar/api/baseball/half_inning.rb +69 -0
  15. data/lib/sportradar/api/baseball/inning.rb +42 -0
  16. data/lib/sportradar/api/baseball/lineup.rb +116 -0
  17. data/lib/sportradar/api/baseball/mlb/division.rb +32 -0
  18. data/lib/sportradar/api/baseball/mlb/hierarchy.rb +273 -0
  19. data/lib/sportradar/api/baseball/mlb/league.rb +27 -0
  20. data/lib/sportradar/api/baseball/mlb.rb +84 -0
  21. data/lib/sportradar/api/baseball/outcome.rb +87 -0
  22. data/lib/sportradar/api/baseball/pitch.rb +245 -0
  23. data/lib/sportradar/api/baseball/player.rb +119 -0
  24. data/lib/sportradar/api/baseball/record.rb +42 -0
  25. data/lib/sportradar/api/baseball/runner.rb +78 -0
  26. data/lib/sportradar/api/baseball/scoring.rb +86 -0
  27. data/lib/sportradar/api/baseball/team.rb +147 -0
  28. data/lib/sportradar/api/baseball/venue.rb +51 -0
  29. data/lib/sportradar/api/baseball.rb +46 -0
  30. data/lib/sportradar/api/basketball/broadcast.rb +15 -0
  31. data/lib/sportradar/api/basketball/game.rb +339 -0
  32. data/lib/sportradar/api/basketball/injury.rb +41 -0
  33. data/lib/sportradar/api/basketball/nba/conference.rb +27 -0
  34. data/lib/sportradar/api/basketball/nba/division.rb +30 -0
  35. data/lib/sportradar/api/basketball/nba/game.rb +62 -0
  36. data/lib/sportradar/api/basketball/nba/hierarchy.rb +47 -0
  37. data/lib/sportradar/api/basketball/nba/player.rb +160 -0
  38. data/lib/sportradar/api/basketball/nba/quarter.rb +51 -0
  39. data/lib/sportradar/api/basketball/nba/schedule.rb +43 -0
  40. data/lib/sportradar/api/basketball/nba/scoring.rb +15 -0
  41. data/lib/sportradar/api/basketball/nba/season.rb +54 -0
  42. data/lib/sportradar/api/basketball/nba/series.rb +82 -0
  43. data/lib/sportradar/api/basketball/nba/team.rb +74 -0
  44. data/lib/sportradar/api/basketball/nba.rb +129 -0
  45. data/lib/sportradar/api/basketball/ncaamb/bracket.rb +44 -0
  46. data/lib/sportradar/api/basketball/ncaamb/conference.rb +41 -0
  47. data/lib/sportradar/api/basketball/ncaamb/division.rb +42 -0
  48. data/lib/sportradar/api/basketball/ncaamb/game.rb +75 -0
  49. data/lib/sportradar/api/basketball/ncaamb/half.rb +49 -0
  50. data/lib/sportradar/api/basketball/ncaamb/hierarchy.rb +65 -0
  51. data/lib/sportradar/api/basketball/ncaamb/player.rb +162 -0
  52. data/lib/sportradar/api/basketball/ncaamb/round.rb +55 -0
  53. data/lib/sportradar/api/basketball/ncaamb/schedule.rb +41 -0
  54. data/lib/sportradar/api/basketball/ncaamb/season.rb +55 -0
  55. data/lib/sportradar/api/basketball/ncaamb/team.rb +61 -0
  56. data/lib/sportradar/api/basketball/ncaamb/tournament.rb +154 -0
  57. data/lib/sportradar/api/basketball/ncaamb.rb +149 -0
  58. data/lib/sportradar/api/basketball/play.rb +75 -0
  59. data/lib/sportradar/api/basketball/plays/assist.rb +14 -0
  60. data/lib/sportradar/api/basketball/plays/base.rb +126 -0
  61. data/lib/sportradar/api/basketball/plays/block.rb +14 -0
  62. data/lib/sportradar/api/basketball/plays/clear_path_foul.rb +11 -0
  63. data/lib/sportradar/api/basketball/plays/deadball.rb +11 -0
  64. data/lib/sportradar/api/basketball/plays/defensive_three_seconds.rb +11 -0
  65. data/lib/sportradar/api/basketball/plays/delay.rb +11 -0
  66. data/lib/sportradar/api/basketball/plays/ejection.rb +14 -0
  67. data/lib/sportradar/api/basketball/plays/end_period.rb +28 -0
  68. data/lib/sportradar/api/basketball/plays/flagrant_one.rb +11 -0
  69. data/lib/sportradar/api/basketball/plays/flagrant_two.rb +11 -0
  70. data/lib/sportradar/api/basketball/plays/foul.rb +17 -0
  71. data/lib/sportradar/api/basketball/plays/free_throw_made.rb +23 -0
  72. data/lib/sportradar/api/basketball/plays/free_throw_miss.rb +25 -0
  73. data/lib/sportradar/api/basketball/plays/jumpball.rb +12 -0
  74. data/lib/sportradar/api/basketball/plays/kickball.rb +11 -0
  75. data/lib/sportradar/api/basketball/plays/lineup_change.rb +11 -0
  76. data/lib/sportradar/api/basketball/plays/offensive_foul.rb +11 -0
  77. data/lib/sportradar/api/basketball/plays/official_timeout.rb +11 -0
  78. data/lib/sportradar/api/basketball/plays/open_inbound.rb +9 -0
  79. data/lib/sportradar/api/basketball/plays/open_tip.rb +11 -0
  80. data/lib/sportradar/api/basketball/plays/personal_foul.rb +9 -0
  81. data/lib/sportradar/api/basketball/plays/rebound.rb +28 -0
  82. data/lib/sportradar/api/basketball/plays/review.rb +11 -0
  83. data/lib/sportradar/api/basketball/plays/shooting_foul.rb +9 -0
  84. data/lib/sportradar/api/basketball/plays/shot_made.rb +22 -0
  85. data/lib/sportradar/api/basketball/plays/shot_miss.rb +22 -0
  86. data/lib/sportradar/api/basketball/plays/steal.rb +11 -0
  87. data/lib/sportradar/api/basketball/plays/team_timeout.rb +14 -0
  88. data/lib/sportradar/api/basketball/plays/technical_foul.rb +14 -0
  89. data/lib/sportradar/api/basketball/plays/three_point_made.rb +14 -0
  90. data/lib/sportradar/api/basketball/plays/three_point_miss.rb +11 -0
  91. data/lib/sportradar/api/basketball/plays/timeout.rb +24 -0
  92. data/lib/sportradar/api/basketball/plays/turnover.rb +19 -0
  93. data/lib/sportradar/api/basketball/plays/tv_timeout.rb +11 -0
  94. data/lib/sportradar/api/basketball/plays/two_point_made.rb +14 -0
  95. data/lib/sportradar/api/basketball/plays/two_point_miss.rb +11 -0
  96. data/lib/sportradar/api/basketball/plays.rb +39 -0
  97. data/lib/sportradar/api/basketball/record.rb +28 -0
  98. data/lib/sportradar/api/basketball/scoring.rb +103 -0
  99. data/lib/sportradar/api/basketball/season.rb +20 -0
  100. data/lib/sportradar/api/basketball/team.rb +136 -0
  101. data/lib/sportradar/api/basketball/venue.rb +54 -0
  102. data/lib/sportradar/api/basketball.rb +35 -0
  103. data/lib/sportradar/api/{nfl/broadcast.rb → broadcast.rb} +1 -1
  104. data/lib/sportradar/api/content/article.rb +1 -1
  105. data/lib/sportradar/api/content/article_list.rb +1 -1
  106. data/lib/sportradar/api/content.rb +17 -5
  107. data/lib/sportradar/api/data.rb +53 -0
  108. data/lib/sportradar/api/football/README.md +62 -0
  109. data/lib/sportradar/api/football/drive.rb +114 -0
  110. data/lib/sportradar/api/football/event.rb +36 -0
  111. data/lib/sportradar/api/football/game.rb +404 -0
  112. data/lib/sportradar/api/football/game_stats.rb +135 -0
  113. data/lib/sportradar/api/football/ncaafb/api.rb +81 -0
  114. data/lib/sportradar/api/football/ncaafb/conference.rb +53 -0
  115. data/lib/sportradar/api/football/ncaafb/division.rb +42 -0
  116. data/lib/sportradar/api/football/ncaafb/drive.rb +36 -0
  117. data/lib/sportradar/api/football/ncaafb/game.rb +130 -0
  118. data/lib/sportradar/api/football/ncaafb/play.rb +97 -0
  119. data/lib/sportradar/api/football/ncaafb/player.rb +31 -0
  120. data/lib/sportradar/api/football/ncaafb/quarter.rb +15 -0
  121. data/lib/sportradar/api/football/ncaafb/subdivision.rb +43 -0
  122. data/lib/sportradar/api/football/ncaafb/team.rb +49 -0
  123. data/lib/sportradar/api/football/ncaafb/week.rb +24 -0
  124. data/lib/sportradar/api/football/ncaafb.rb +273 -0
  125. data/lib/sportradar/api/football/nfl/api.rb +76 -0
  126. data/lib/sportradar/api/football/nfl/conference.rb +35 -0
  127. data/lib/sportradar/api/football/nfl/depth_chart.rb +53 -0
  128. data/lib/sportradar/api/football/nfl/division.rb +37 -0
  129. data/lib/sportradar/api/football/nfl/drive.rb +19 -0
  130. data/lib/sportradar/api/football/nfl/event.rb +19 -0
  131. data/lib/sportradar/api/football/nfl/game.rb +77 -0
  132. data/lib/sportradar/api/football/nfl/league_depth_chart.rb +41 -0
  133. data/lib/sportradar/api/football/nfl/play.rb +27 -0
  134. data/lib/sportradar/api/football/nfl/player.rb +31 -0
  135. data/lib/sportradar/api/football/nfl/quarter.rb +15 -0
  136. data/lib/sportradar/api/football/nfl/team.rb +42 -0
  137. data/lib/sportradar/api/football/nfl/team_depth_chart.rb +44 -0
  138. data/lib/sportradar/api/football/nfl/week.rb +24 -0
  139. data/lib/sportradar/api/football/nfl.rb +322 -0
  140. data/lib/sportradar/api/football/play.rb +116 -0
  141. data/lib/sportradar/api/football/play_statistics.rb +313 -0
  142. data/lib/sportradar/api/football/player.rb +121 -0
  143. data/lib/sportradar/api/football/quarter.rb +46 -0
  144. data/lib/sportradar/api/football/record.rb +48 -0
  145. data/lib/sportradar/api/football/scoring.rb +92 -0
  146. data/lib/sportradar/api/football/situation.rb +32 -0
  147. data/lib/sportradar/api/football/stat_pack/defense.rb +20 -20
  148. data/lib/sportradar/api/football/stat_pack/extra_points.rb +5 -4
  149. data/lib/sportradar/api/football/stat_pack/field_goals.rb +6 -5
  150. data/lib/sportradar/api/football/stat_pack/fumbles.rb +11 -9
  151. data/lib/sportradar/api/football/stat_pack/kick_returns.rb +8 -7
  152. data/lib/sportradar/api/football/stat_pack/kickoffs.rb +9 -7
  153. data/lib/sportradar/api/football/stat_pack/misc_returns.rb +1 -1
  154. data/lib/sportradar/api/football/stat_pack/passing.rb +13 -11
  155. data/lib/sportradar/api/football/stat_pack/penalties.rb +2 -2
  156. data/lib/sportradar/api/football/stat_pack/punt_returns.rb +7 -6
  157. data/lib/sportradar/api/football/stat_pack/punts.rb +12 -10
  158. data/lib/sportradar/api/football/stat_pack/receiving.rb +10 -9
  159. data/lib/sportradar/api/football/stat_pack/rushing.rb +11 -9
  160. data/lib/sportradar/api/football/stat_pack.rb +7 -3
  161. data/lib/sportradar/api/football/team.rb +160 -0
  162. data/lib/sportradar/api/football/venue.rb +25 -0
  163. data/lib/sportradar/api/football/week.rb +57 -0
  164. data/lib/sportradar/api/football.rb +47 -0
  165. data/lib/sportradar/api/images/asset.rb +2 -1
  166. data/lib/sportradar/api/images/ref.rb +15 -0
  167. data/lib/sportradar/api/images.rb +51 -9
  168. data/lib/sportradar/api/mma/event.rb +111 -0
  169. data/lib/sportradar/api/mma/fight.rb +107 -0
  170. data/lib/sportradar/api/mma/fighter.rb +95 -0
  171. data/lib/sportradar/api/mma/judge.rb +70 -0
  172. data/lib/sportradar/api/mma/league.rb +63 -0
  173. data/lib/sportradar/api/mma/referee.rb +70 -0
  174. data/lib/sportradar/api/mma/result.rb +68 -0
  175. data/lib/sportradar/api/mma/roster.rb +72 -0
  176. data/lib/sportradar/api/mma/schedule.rb +53 -0
  177. data/lib/sportradar/api/mma/score.rb +83 -0
  178. data/lib/sportradar/api/mma/venue.rb +72 -0
  179. data/lib/sportradar/api/mma.rb +195 -0
  180. data/lib/sportradar/api/poll.rb +40 -0
  181. data/lib/sportradar/api/request.rb +40 -8
  182. data/lib/sportradar/api/soccer/schedule.rb +1 -0
  183. data/lib/sportradar/api/version.rb +1 -1
  184. data/lib/sportradar/api.rb +20 -34
  185. metadata +157 -34
  186. data/lib/sportradar/api/nfl/.play_statistics.rb.swo +0 -0
  187. data/lib/sportradar/api/nfl/changelog.rb +0 -17
  188. data/lib/sportradar/api/nfl/coach.rb +0 -17
  189. data/lib/sportradar/api/nfl/conference.rb +0 -16
  190. data/lib/sportradar/api/nfl/depth_chart.rb +0 -47
  191. data/lib/sportradar/api/nfl/division.rb +0 -16
  192. data/lib/sportradar/api/nfl/draft.rb +0 -16
  193. data/lib/sportradar/api/nfl/drive.rb +0 -73
  194. data/lib/sportradar/api/nfl/event.rb +0 -19
  195. data/lib/sportradar/api/nfl/franchise.rb +0 -14
  196. data/lib/sportradar/api/nfl/game.rb +0 -94
  197. data/lib/sportradar/api/nfl/game_statistic.rb +0 -133
  198. data/lib/sportradar/api/nfl/hierarchy.rb +0 -19
  199. data/lib/sportradar/api/nfl/injury.rb +0 -16
  200. data/lib/sportradar/api/nfl/league_depth_chart.rb +0 -26
  201. data/lib/sportradar/api/nfl/play.rb +0 -39
  202. data/lib/sportradar/api/nfl/play_statistics.rb +0 -247
  203. data/lib/sportradar/api/nfl/player.rb +0 -49
  204. data/lib/sportradar/api/nfl/position.rb +0 -14
  205. data/lib/sportradar/api/nfl/quarter.rb +0 -29
  206. data/lib/sportradar/api/nfl/scoring.rb +0 -25
  207. data/lib/sportradar/api/nfl/season.rb +0 -23
  208. data/lib/sportradar/api/nfl/situation.rb +0 -18
  209. data/lib/sportradar/api/nfl/statistic.rb +0 -28
  210. data/lib/sportradar/api/nfl/summary.rb +0 -17
  211. data/lib/sportradar/api/nfl/team.rb +0 -56
  212. data/lib/sportradar/api/nfl/team_depth_chart.rb +0 -44
  213. data/lib/sportradar/api/nfl/venue.rb +0 -22
  214. data/lib/sportradar/api/nfl/week.rb +0 -16
  215. data/lib/sportradar/api/nfl.rb +0 -205
@@ -0,0 +1,42 @@
1
+ module Sportradar
2
+ module Api
3
+ module Football
4
+ class Ncaafb
5
+ class Division < Data
6
+ attr_accessor :response, :id, :name, :alias
7
+
8
+ def initialize(data, **opts)
9
+ # @response = data
10
+ @api = opts[:api]
11
+
12
+ @id = data["id"]
13
+ @name = data["name"]
14
+ @alias = data["alias"] || data["id"]
15
+ update(data, **opts)
16
+ end
17
+
18
+ def update(data, **opts)
19
+ @conferences_hash = create_data({}, data["conferences"], klass: Conference, division: self, api: @api) if data["conferences"]
20
+ end
21
+
22
+ def conferences
23
+ @conferences_hash.values
24
+ end
25
+
26
+ def conference(code_name)
27
+ conferences_by_name[code_name]
28
+ end
29
+
30
+ def conferences_by_name
31
+ @conferences_by_name ||= conferences.map { |c| [c.id, c] }.to_h
32
+ end
33
+
34
+ def teams
35
+ conferences.flat_map(&:teams)
36
+ end
37
+
38
+ end
39
+ end
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,36 @@
1
+ module Sportradar
2
+ module Api
3
+ module Football
4
+ class Ncaafb
5
+ class Drive < Sportradar::Api::Football::Drive
6
+
7
+ def over?
8
+ plays.last&.parsed_ending || (overtime? && ['End of Quarter', 'End of Game'].include?(plays.last&.description))
9
+ end
10
+
11
+ def handle_plays_and_events(data, **opts)
12
+ create_data(@plays_hash, data['actions'], klass: Play, api: api, drive: self) if data['actions']
13
+ create_data(@events_hash, data['events'], klass: Event, api: api, drive: self) if data['events']
14
+ end
15
+
16
+ def play_count
17
+ plays.count(&:counted_play?)
18
+ end
19
+
20
+ def gain
21
+ Array(plays.select(&:counted_play?)).sum do |play|
22
+ Array(play.players).sum do |p|
23
+ p.dig('passing', 'yds').to_i + p.dig('rushing', 'yds').to_i
24
+ end
25
+ end
26
+ end
27
+
28
+ end
29
+ end
30
+ end
31
+ end
32
+ end
33
+ # e = Event.find 17632;
34
+ # sc = e.sportconnector_game;
35
+ # dr = sc.pbp[-3]
36
+ # pl = dr.plays.last
@@ -0,0 +1,130 @@
1
+ module Sportradar
2
+ module Api
3
+ module Football
4
+ class Ncaafb
5
+ class Game < Sportradar::Api::Football::Game
6
+
7
+ def initialize(data, **opts)
8
+ if data['id'].include?('/')
9
+ @year, @type, @week_number, @away_alias, @home_alias = data.delete('id').split('/')
10
+ end
11
+ super
12
+ end
13
+
14
+ def clock_display
15
+ if clock && quarter
16
+ quarter > 4 ? quarter_display : "#{clock} #{quarter_display}"
17
+ end
18
+ end
19
+
20
+ def path_base
21
+ "#{ year }/#{ type }/#{ week_number.to_s }/#{ away_alias }/#{ home_alias }"
22
+ end
23
+
24
+ def generate_title
25
+ if home.full_name && away.full_name
26
+ "#{home.full_name} vs #{away.full_name}"
27
+ elsif home_alias && away_alias
28
+ "#{home_alias} vs #{away_alias}"
29
+ end
30
+ end
31
+
32
+ def type # Bowl games don't seem to work when they use the bowl type instead of REG
33
+ 'REG'
34
+ end
35
+
36
+
37
+ def get_extended_box
38
+ data = api.get_data(path_extended_box).to_h
39
+ ingest_extended_box(data)
40
+ end
41
+
42
+ def queue_extended_box
43
+ url, headers, options, timeout = api.get_request_info(path_extended_box)
44
+ {url: url, headers: headers, params: options, timeout: timeout, callback: method(:ingest_extended_box)}
45
+ end
46
+
47
+ def ingest_extended_box(data)
48
+ data = data
49
+ update(data, source: :extended_box)
50
+ check_newness(:extended_box, @clock)
51
+ data
52
+ end
53
+
54
+ def get_summary
55
+ data = api.get_data(path_summary).to_h
56
+ ingest_summary(data)
57
+ end
58
+
59
+ def queue_summary
60
+ url, headers, options, timeout = api.get_request_info(path_summary)
61
+ {url: url, headers: headers, params: options, timeout: timeout, callback: method(:ingest_summary)}
62
+ end
63
+
64
+ def ingest_summary(data)
65
+ data = data
66
+ update(data, source: :summary)
67
+ @quarter = data.delete('quarter').to_i
68
+ check_newness(:box, @clock)
69
+ check_newness(:score, @score)
70
+ data
71
+ end
72
+
73
+ def ingest_pbp(data)
74
+ super.tap {
75
+ clock = self.plays.last&.clock
76
+ quarter = self.quarters.last&.number
77
+ @clock = clock if clock
78
+ @quarter = quarter if quarter
79
+ }
80
+ end
81
+
82
+ def team_class
83
+ Team
84
+ end
85
+ def period_class
86
+ Quarter
87
+ end
88
+
89
+ def period_name
90
+ 'quarter'
91
+ end
92
+
93
+ def quarter_class
94
+ Sportradar::Api::Football::Ncaafb::Quarter
95
+ end
96
+
97
+
98
+ def api
99
+ @api || Sportradar::Api::Football::Ncaafb::Api.new
100
+ end
101
+
102
+ end
103
+ end
104
+ end
105
+ end
106
+ end
107
+
108
+ __END__
109
+
110
+ File.binwrite('ncaafb.bin', Marshal.dump(ncaafb))
111
+
112
+ ncaafb = Sportradar::Api::Football::Ncaafb.new(year: 2016)
113
+ ncaafb = Sportradar::Api::Football::Ncaafb.new
114
+ gg = ncaafb.games;
115
+ ncaafb = Marshal.load(File.binread('ncaafb.bin'));
116
+ g2 = ncaafb.games.sample
117
+ g = gg.first;
118
+ g = gg.sample;
119
+ g.week_number
120
+ g.year
121
+ g.type
122
+ g.path_pbp
123
+ res = g.get_pbp;
124
+
125
+ ncaafb = Marshal.load(File.binread('ncaafb.bin'));
126
+ g = ncaafb.games.first;
127
+ res = g.get_pbp;
128
+ g.quarters.first.drives[1]
129
+
130
+ g = gg.detect{|g| g.id == "b8001149-bb55-4014-a3e8-6ac0a261dfe1" } # overtime game
@@ -0,0 +1,97 @@
1
+ module Sportradar
2
+ module Api
3
+ module Football
4
+ class Ncaafb
5
+ class Play < Sportradar::Api::Football::Play
6
+
7
+
8
+ def parsed_ending
9
+ @parsed_ending ||= search_for_drive_end
10
+ end
11
+
12
+ def counted_play?
13
+ ['rush', 'pass'].include?(self.play_type) && !self.description.include?('No Play')
14
+ end
15
+
16
+ def halftime?
17
+ @description == "End of 1st Half"
18
+ end
19
+
20
+ def queue_details
21
+ if @details
22
+ url, headers, options, timeout = @api.get_request_info(@details)
23
+ {url: url, headers: headers, params: options, timeout: timeout, callback: method(:update)}
24
+ end
25
+ end
26
+
27
+ def get_details
28
+ if @details
29
+ data = @api.get_data(@details).to_h
30
+ update(data)
31
+ data
32
+ end
33
+ end
34
+
35
+ private
36
+
37
+ def search_for_drive_end
38
+ case @play_type
39
+ when 'kick'
40
+ nil
41
+ when 'rush'
42
+ # check for fumble
43
+ parse_description_for_drive_end
44
+ when 'pass'
45
+ # check for fumble/interception
46
+ parse_description_for_drive_end
47
+ when 'punt'
48
+ :punt
49
+ when 'penalty'
50
+ nil
51
+ when 'fieldgoal'
52
+ :fg
53
+ when 'extrapoint'
54
+ :pat
55
+ else
56
+ parse_description_for_drive_end
57
+ end
58
+ end
59
+
60
+ # ["kick", "rush", "pass", "punt", "penalty", nil, "fieldgoal", "extrapoint"]
61
+ def parse_description_for_drive_end
62
+ parsed_ending = case @description
63
+ when /intercepted/i
64
+ :interception
65
+ when /fumbles/i
66
+ :fumble
67
+ when /extra point is good/i
68
+ :touchdown
69
+ # when missed extra point
70
+ when /punts/i
71
+ :punt
72
+ when /Field Goal is No Good. blocked/i
73
+ :fg
74
+ when /Field Goal is No Good/i
75
+ :fg
76
+ # when missed field goal
77
+ when /Field Goal is Good/i
78
+ :fg
79
+ when "End of 1st Half"
80
+ :end_of_half
81
+ else
82
+ #
83
+ end
84
+ if parsed_ending
85
+ parsed_ending
86
+ end
87
+ end
88
+
89
+ end
90
+ end
91
+ end
92
+ end
93
+ end
94
+
95
+ __END__
96
+
97
+ {"id"=>"694bb030-be6c-4b6f-a77d-1ea103749463", "game"=>"b3dca62c-f306-4fb8-9856-808e7b42a89f", "type"=>"pass", "official"=>true, "clock"=>":29", "quarter"=>3, "controller"=>"FLA", "updated"=>"2015-08-12T17:03:19+00:00", "formation"=>"Shotgun", "direction"=>"Right", "distance"=>"Short", "summary"=>"6-J.Driskel complete to 11-D.Robinson. 11-D.Robinson runs 9 yards for a touchdown.", "start_situation"=>{"team"=>"FLA", "side"=>"KEN", "yard_line"=>9, "down"=>2, "yfd"=>9}, "end_situation"=>{"team"=>"FLA", "side"=>"KEN", "yard_line"=>2}, "advancements"=>[{"type"=>"progression", "sequence"=>1, "team"=>"FLA", "from"=>{"side"=>"KEN", "yard_line"=>9}, "to"=>{"side"=>"KEN", "yard_line"=>0}}], "score"=>{"type"=>"touchdown", "points"=>6, "team"=>"FLA"}, "players"=>[{"id"=>"55bf8c60-6953-4d83-9982-7e38ff867130", "name"=>"Jeff Driskel", "jersey"=>6, "position"=>"QB", "team"=>"FLA", "passing"=>{"att"=>1, "cmp"=>1, "yds"=>9, "sk"=>0, "sk_yds"=>0, "td"=>1, "int"=>0, "fd"=>1, "sfty"=>0, "rz_att"=>1}}, {"id"=>"9252aab2-b175-4e2f-974d-dc7f6f8c3b3a", "name"=>"Demarcus Robinson", "jersey"=>11, "position"=>"WR", "team"=>"FLA", "receiving"=>{"tar"=>1, "rec"=>1, "yds"=>9, "yac"=>9, "td"=>1, "fum"=>0, "fd"=>1, "rz_tar"=>1}}]}
@@ -0,0 +1,31 @@
1
+ module Sportradar
2
+ module Api
3
+ module Football
4
+ class Ncaafb
5
+ class Player < Sportradar::Api::Football::Player
6
+
7
+ def api
8
+ @api || Sportradar::Api::Football::Ncaafb::Api.new
9
+ end
10
+
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
16
+
17
+ __END__
18
+
19
+ ncaafb = Marshal.load(File.binread('ncaafb.bin'));
20
+
21
+ t = ncaafb.teams.first;
22
+ t.get_roster;
23
+ t.players.first
24
+ t.players.first.totals
25
+
26
+ ncaafb = Marshal.load(File.binread('ncaafb.bin'));
27
+ t = ncaafb.teams.sample
28
+ data = t.get_season_stats(2016);
29
+ t.get_roster;
30
+ t.players.sample
31
+ t.players.sample.totals
@@ -0,0 +1,15 @@
1
+ module Sportradar
2
+ module Api
3
+ module Football
4
+ class Ncaafb
5
+ class Quarter < Sportradar::Api::Football::Quarter
6
+
7
+ def drive_class
8
+ Drive
9
+ end
10
+
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,43 @@
1
+ module Sportradar
2
+ module Api
3
+ module Football
4
+ class Ncaafb
5
+ class Subdivision < Data
6
+ attr_accessor :response, :id, :name, :alias
7
+
8
+ def initialize(data, **opts)
9
+ @response = data
10
+ @api = opts[:api]
11
+
12
+ @id = data["id"]
13
+ @name = data["name"]
14
+
15
+ @teams_hash = {}
16
+ @assigned_teams = nil
17
+ # binding.pry
18
+
19
+ create_data(@teams_hash, data["teams"], klass: Team, conference: self, api: @api) if data["teams"]
20
+ end
21
+
22
+ def teams
23
+ @assigned_teams || @teams_hash.values
24
+ end
25
+ def teams=(array)
26
+ @assigned_teams = array
27
+ end
28
+ def team(code_name)
29
+ teams_by_name[code_name]
30
+ end
31
+ private def teams_by_name
32
+ @teams_by_name ||= teams.map { |t| [t.alias, t] }.to_h
33
+ end
34
+ def conferences
35
+ teams.flat_map(&:conferences)
36
+ end
37
+
38
+ end
39
+ end
40
+ end
41
+ end
42
+ end
43
+
@@ -0,0 +1,49 @@
1
+ module Sportradar
2
+ module Api
3
+ module Football
4
+ class Ncaafb
5
+ class Team < Sportradar::Api::Football::Team
6
+
7
+ def alias
8
+ id
9
+ end
10
+
11
+ def players
12
+ get_roster if @players_hash.empty?
13
+ @players_hash.values
14
+ end
15
+ alias :roster :players
16
+
17
+ def player_class
18
+ Player
19
+ end
20
+
21
+ def path_roster
22
+ "#{ path_base }/roster"
23
+ end
24
+ def path_season_stats(year = season_year, season = ncaafb_season)
25
+ "#{path_base}/#{year}/#{ncaafb_season}/statistics"
26
+ end
27
+
28
+ def api
29
+ @api || Sportradar::Api::Football::Ncaafb::Api.new
30
+ end
31
+ def ncaafb_season
32
+ @type || default_season
33
+ end
34
+
35
+ end
36
+
37
+ end
38
+ end
39
+ end
40
+ end
41
+
42
+ __END__
43
+
44
+ ncaafb = Marshal.load(File.binread('ncaafb.bin'));
45
+
46
+ t = ncaafb.teams.first
47
+ data = t.get_season_stats
48
+ data = t.get_season_stats(2016)
49
+ t.players.count
@@ -0,0 +1,24 @@
1
+ module Sportradar
2
+ module Api
3
+ module Football
4
+ class Ncaafb
5
+ class Week < Sportradar::Api::Football::Week
6
+
7
+ def game_class
8
+ Game
9
+ end
10
+
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
16
+
17
+ __END__
18
+
19
+
20
+
21
+ ncaafb = Sportradar::Api::Football::Ncaafb.new
22
+ ncaafb = Sportradar::Api::Football::Ncaafb.new
23
+ res1 = ncaafb.get_schedule;
24
+ res2 = ncaafb.get_weekly_schedule;