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,32 @@
1
+ module Sportradar
2
+ module Api
3
+ module Baseball
4
+ class Mlb
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"]
15
+ @assigned_teams = nil
16
+ @teams_hash = {}
17
+ @teams_hash = create_data({}, data["teams"], klass: Team, division: self, api: @api) if response["teams"]
18
+
19
+ end
20
+
21
+ def teams
22
+ @assigned_teams || @teams_hash.values
23
+ end
24
+ def teams=(array)
25
+ @assigned_teams = array
26
+ end
27
+
28
+ end
29
+ end
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,273 @@
1
+ module Sportradar
2
+ module Api
3
+ module Baseball
4
+ class Mlb
5
+ class Hierarchy < Data
6
+ attr_accessor :response, :id, :name, :alias, :year, :type
7
+ def all_attributes
8
+ [:name, :alias, :leagues, :divisions, :teams]
9
+ end
10
+
11
+ def initialize(data = {}, **opts)
12
+ # @response = data
13
+ @api = opts[:api]
14
+ @id = data.dig('league', 'id')
15
+
16
+ @leagues_hash = {}
17
+ @games_hash = {}
18
+ @teams_hash = {}
19
+
20
+ end
21
+
22
+ def update(data, source: nil, **opts)
23
+ # update stuff
24
+ @name = data.dig('league', 'name') if data.dig('league', 'name')
25
+ @alias = data.dig('league', 'alias') if data.dig('league', 'alias')
26
+
27
+ @year = data.dig('season', 'year') if data.dig('season', 'year')
28
+ @type = data.dig('season', 'type') if data.dig('season', 'type')
29
+
30
+ @leagues_hash = create_data({}, data['leagues'], klass: League, hierarchy: self, api: api) if data['leagues']
31
+ @teams_hash = create_data({}, data['teams'], klass: Team, hierarchy: self, api: api) if data['teams']
32
+ if data['games']
33
+ if data['games'].first.keys == ['game']
34
+ data['games'].map! { |hash| hash['game'] }
35
+ end
36
+ @games_hash = create_data({}, data['games'], klass: Game, hierarchy: self, api: api)
37
+ end
38
+ end
39
+
40
+ def schedule
41
+ get_schedule if games.empty?
42
+ self
43
+ end
44
+
45
+ def standings
46
+ get_standings if teams.first&.record.nil?
47
+ self
48
+ end
49
+
50
+ def hierarchy
51
+ get_hierarchy if divisions.empty?
52
+ self
53
+ end
54
+
55
+ def daily_schedule
56
+ # TODO
57
+ end
58
+
59
+ def games
60
+ @games_hash.values
61
+ end
62
+
63
+ def leagues
64
+ @leagues_hash.values
65
+ end
66
+ def divisions
67
+ leagues.flat_map(&:divisions)
68
+ end
69
+ def teams
70
+ teams = divisions.flat_map(&:teams)
71
+ if teams.empty?
72
+ if @teams_hash.empty?
73
+ get_hierarchy
74
+ divisions.flat_map(&:teams)
75
+ else
76
+ @teams_hash.values
77
+ end
78
+ else
79
+ teams
80
+ end
81
+ end
82
+ def team(team_id)
83
+ teams.detect { |team| team.id == team_id }
84
+ end
85
+
86
+
87
+
88
+ # api stuff
89
+ def api
90
+ @api || Sportradar::Api::Baseball::Mlb.new
91
+ end
92
+
93
+ def default_year
94
+ Date.today.year
95
+ end
96
+ def default_date
97
+ Date.today
98
+ end
99
+ def default_season
100
+ 'reg'
101
+ end
102
+ def season_year
103
+ @year || default_year
104
+ end
105
+ def mlb_season
106
+ @type || default_season
107
+ end
108
+
109
+
110
+ # url paths
111
+ def path_base
112
+ "league"
113
+ end
114
+ def path_schedule
115
+ "games/#{season_year}/#{mlb_season}/schedule"
116
+ end
117
+ def path_series
118
+ "series/#{season_year}/#{mlb_season}/schedule"
119
+ end
120
+ def path_rankings
121
+ "seasontd/#{season_year}/#{mlb_season}/rankings"
122
+ end
123
+ def path_hierarchy
124
+ "#{ path_base }/hierarchy"
125
+ end
126
+ def path_depth_charts
127
+ "#{ path_base }/depth_charts"
128
+ end
129
+ def path_standings
130
+ "seasontd/#{season_year}/#{mlb_season}/standings"
131
+ end
132
+ def path_daily_summary(date)
133
+ "games/#{date.year}/#{date.month}/#{date.day}/summary"
134
+ end
135
+ def path_daily_boxscore(date)
136
+ "#{ path_base }/games/#{date.year}/#{date.month}/#{date.day}/boxscore"
137
+ end
138
+
139
+
140
+ # data retrieval
141
+
142
+ ## schedule
143
+ def get_schedule
144
+ data = api.get_data(path_schedule).to_h
145
+ ingest_schedule(data)
146
+ end
147
+
148
+ def ingest_schedule(data)
149
+ update(data, source: :games)
150
+ data
151
+ end
152
+
153
+ def queue_schedule
154
+ url, headers, options, timeout = api.get_request_info(path_schedule)
155
+ {url: url, headers: headers, params: options, timeout: timeout, callback: method(:ingest_schedule)}
156
+ end
157
+
158
+ ## hierarchy
159
+ def get_hierarchy
160
+ data = api.get_data(path_hierarchy).to_h
161
+ ingest_hierarchy(data)
162
+ end
163
+
164
+ def ingest_hierarchy(data)
165
+ update(data, source: :teams)
166
+ data
167
+ end
168
+
169
+ def queue_hierarchy
170
+ url, headers, options, timeout = api.get_request_info(path_hierarchy)
171
+ {url: url, headers: headers, params: options, timeout: timeout, callback: method(:ingest_hierarchy)}
172
+ end
173
+
174
+ ## depth_charts
175
+ def get_depth_charts
176
+ data = api.get_data(path_depth_charts).to_h
177
+ ingest_depth_charts(data)
178
+ end
179
+
180
+ def ingest_depth_charts(data)
181
+ update(data, source: :teams)
182
+ data
183
+ end
184
+
185
+ def queue_depth_charts
186
+ url, headers, options, timeout = api.get_request_info(path_depth_charts)
187
+ {url: url, headers: headers, params: options, timeout: timeout, callback: method(:ingest_depth_charts)}
188
+ end
189
+
190
+ ## standings
191
+ def get_standings
192
+ data = api.get_data(path_standings).to_h
193
+ ingest_standings(data)
194
+ end
195
+
196
+ def ingest_standings(data)
197
+ update(data.dig('league','season'), source: :teams)
198
+ data
199
+ end
200
+
201
+ def queue_standings
202
+ url, headers, options, timeout = api.get_request_info(path_standings)
203
+ {url: url, headers: headers, params: options, timeout: timeout, callback: method(:ingest_standings)}
204
+ end
205
+
206
+ ## depth_charts
207
+ def get_depth_charts
208
+ data = api.get_data(path_depth_charts).to_h
209
+ ingest_depth_charts(data)
210
+ end
211
+
212
+ def ingest_depth_charts(data)
213
+ update(data, source: :teams)
214
+ data
215
+ end
216
+
217
+ def queue_depth_charts
218
+ url, headers, options, timeout = api.get_request_info(path_depth_charts)
219
+ {url: url, headers: headers, params: options, timeout: timeout, callback: method(:ingest_depth_charts)}
220
+ end
221
+
222
+ ## daily summary
223
+ def get_daily_summary(date = Date.today)
224
+ data = api.get_data(path_daily_summary(date)).to_h
225
+ ingest_daily_summary(data)
226
+ end
227
+
228
+ def ingest_daily_summary(data)
229
+ update(data.dig('league'), source: :games)
230
+ data
231
+ end
232
+
233
+ def queue_daily_summary(date = Date.today)
234
+ url, headers, options, timeout = api.get_request_info(path_daily_summary(date))
235
+ {url: url, headers: headers, params: options, timeout: timeout, callback: method(:ingest_daily_summary)}
236
+ end
237
+
238
+ ## venues
239
+ # def get_venues
240
+ # data = api.get_data(path_venues).to_h
241
+ # ingest_venues(data)
242
+ # end
243
+
244
+ # def ingest_venues(data)
245
+ # update(data, source: :teams)
246
+ # data
247
+ # end
248
+
249
+ # def queue_venues
250
+ # url, headers, options, timeout = api.get_request_info(path_venues)
251
+ # {url: url, headers: headers, params: options, timeout: timeout, callback: method(:ingest_venues)}
252
+ # end
253
+
254
+ end
255
+ end
256
+ end
257
+ end
258
+ end
259
+
260
+ __END__
261
+
262
+ mlb = Sportradar::Api::Baseball::Mlb::Hierarchy.new
263
+ res = mlb.get_daily_summary;
264
+ res = mlb.get_hierarchy;
265
+ res = mlb.get_schedule;
266
+ t = mlb.teams.first;
267
+ t.get_season_stats;
268
+ t.players.sample
269
+
270
+ res = mlb.get_schedule;
271
+ g = mlb.games.sort_by(&:scheduled).first
272
+
273
+ portradar::Api::Baseball::Mlb::Hierarchy.new
@@ -0,0 +1,27 @@
1
+ module Sportradar
2
+ module Api
3
+ module Baseball
4
+ class Mlb
5
+ class League < 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"]
15
+ @divisions_hash = create_data({}, data["divisions"], klass: Division, conference: self, api: @api) # if response["division"]
16
+ end
17
+
18
+ def divisions
19
+ @divisions_hash.values
20
+ end
21
+
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
27
+
@@ -0,0 +1,84 @@
1
+ module Sportradar
2
+ module Api
3
+ module Baseball
4
+ class Mlb < Request
5
+ attr_accessor :league, :access_level, :simulation, :error
6
+
7
+ def initialize(access_level = default_access_level)
8
+ @league = 'mlb'
9
+ raise Sportradar::Api::Error::InvalidAccessLevel unless allowed_access_levels.include? access_level
10
+ @access_level = access_level
11
+ end
12
+
13
+ def sim!
14
+ @version = 5
15
+ super
16
+ end
17
+
18
+ def get_data(url)
19
+ data = get request_url(url)
20
+ if data.is_a?(Sportradar::Api::Error)
21
+ puts request_url(url)
22
+ puts
23
+ puts data.inspect
24
+ raise 'Sportradar error'
25
+ end
26
+ data
27
+ end
28
+
29
+ def default_year
30
+ Date.today.year
31
+ end
32
+ def default_date
33
+ Date.today
34
+ end
35
+ def default_season
36
+ 'reg'
37
+ end
38
+ def default_access_level
39
+ if (ENV['SPORTRADAR_ENV'] || ENV['SPORTRADAR_ENV_MLB'] || ENV['RACK_ENV'] || ENV['RAILS_ENV']) == 'production'
40
+ 'p'
41
+ else
42
+ 't'
43
+ end
44
+ end
45
+
46
+ def content_format
47
+ 'json'
48
+ end
49
+
50
+ private
51
+
52
+ def request_url(path)
53
+ "/mlb-#{access_level}#{version}/#{path}"
54
+ end
55
+
56
+ def api_key
57
+ if !['t', 'sim'].include?(access_level)
58
+ Sportradar::Api.api_key_params('mlb', 'production')
59
+ elsif 'sim' == access_level
60
+ Sportradar::Api.api_key_params('mlb', 'simulation')
61
+ else
62
+ Sportradar::Api.api_key_params('mlb')
63
+ end
64
+ end
65
+
66
+ def version
67
+ @version || Sportradar::Api.version('mlb')
68
+ end
69
+
70
+ def allowed_access_levels
71
+ %w[p t sim]
72
+ end
73
+
74
+ def allowed_seasons
75
+ ["pre", "reg", "pst"]
76
+ end
77
+
78
+ end
79
+ end
80
+ end
81
+ end
82
+
83
+ __END__
84
+ # mlb = Sportradar::Api::Baseball::Mlb::Hierarchy.new
@@ -0,0 +1,87 @@
1
+ module Sportradar
2
+ module Api
3
+ module Baseball
4
+ class Outcome < Data
5
+ attr_accessor :response, :type, :current_inning, :current_inning_half, :count, :hitter, :pitcher, :runners
6
+
7
+ def initialize(data, **opts)
8
+ @response = data
9
+ @api = opts[:api]
10
+ @game = opts[:game]
11
+
12
+ @scores = {}
13
+ @id = data['id']
14
+
15
+ update(data, **opts)
16
+ end
17
+
18
+ def update(data, source: nil, **opts)
19
+ update_from_outcome(data['outcome']) if data['outcome']
20
+ end
21
+
22
+ def update_from_outcome(data)
23
+ @type = data['type'] if data['type']
24
+ @current_inning = data['current_inning'] if data['current_inning']
25
+ @current_inning_half = data['current_inning_half'] if data['current_inning_half']
26
+ @count = data['count'] if data['count']
27
+ @hitter = data['hitter'] if data['hitter']
28
+ @pitcher = data['pitcher'] if data['pitcher']
29
+ @runners = data['runners'] if data['runners']
30
+ end
31
+
32
+
33
+ private
34
+
35
+ def parse_from_pbp(data)
36
+ scoring = data['innings'].map {|i| i['scoring'] }.compact
37
+ return {} if scoring.empty?
38
+ scoring.each_with_object({}).with_index(1) do |(hash, memo), idx|
39
+ memo[idx] = {hash.dig('home', 'id') => hash.dig('home', 'runs'), hash.dig('away', 'id') => hash.dig('away', 'runs')}
40
+ end
41
+ end
42
+
43
+ def parse_from_box(data)
44
+ id = data.dig('home', 'id')
45
+ da = data.dig('home', 'scoring')
46
+ return {} unless da
47
+ da.each { |h| h[id] = h.delete('runs') }
48
+ id = data.dig('away', 'id')
49
+ db = data.dig('away', 'scoring')
50
+ return {} unless db
51
+ db.each { |h| h[id] = h.delete('runs') }
52
+ da.zip(db).map{ |a, b| [a['sequence'].to_i, a.merge(b)] }.sort{ |(a,_), (b,_)| a <=> b }.to_h
53
+ end
54
+
55
+ def parse_from_summary(data)
56
+ #
57
+ end
58
+
59
+ end
60
+ end
61
+ end
62
+ end
63
+
64
+ # inprogress data from daily summary
65
+ {"id"=>"e1b6d4cc-74f0-4f80-b1d4-d506624d7ba0",
66
+ "status"=>"inprogress",
67
+ "coverage"=>"full",
68
+ "game_number"=>1,
69
+ "day_night"=>"D",
70
+ "scheduled"=>"2017-05-04T17:10:00+00:00",
71
+ "home_team"=>"aa34e0ed-f342-4ec6-b774-c79b47b60e2d",
72
+ "away_team"=>"27a59d3b-ff7c-48ea-b016-4798f560f5e1",
73
+ "venue"=>{"id"=>"302f8dcd-eed6-4b83-8609-81548d51e955", "name"=>"Target Field", "market"=>"Minnesota", "capacity"=>39021, "surface"=>"grass", "address"=>"353 N 5th Street", "city"=>"Minneapolis", "state"=>"MN", "zip"=>"55403", "country"=>"USA"},
74
+ "broadcast"=>{"network"=>"FS-N"},
75
+ "outcome"=>
76
+ {"type"=>"pitch",
77
+ "current_inning"=>3,
78
+ "current_inning_half"=>"B",
79
+ "count"=>{"strikes"=>2, "balls"=>0, "outs"=>1, "inning"=>3, "inning_half"=>"B", "half_over"=>false},
80
+ "hitter"=>{"id"=>"aecc630f-57da-4b23-842b-fd65394e81be", "outcome_id"=>"kF", "ab_over"=>false, "last_name"=>"Sano", "first_name"=>"Miguel", "preferred_name"=>"Miguel", "jersey_number"=>"22"},
81
+ "pitcher"=>{"id"=>"c1f19b5a-9dee-4053-9cad-ee4196f921e1", "last_name"=>"Cotton", "first_name"=>"Jharel", "preferred_name"=>"Jharel", "jersey_number"=>"45", "pitch_type"=>"FA", "pitch_speed"=>90.0, "pitch_zone"=>9, "pitch_x"=>52, "pitch_y"=>-39},
82
+ "runners"=>[{"id"=>"29a80d91-946d-4701-af7d-034850bdef00", "starting_base"=>1, "ending_base"=>1, "outcome_id"=>"", "out"=>false, "last_name"=>"Dozier", "first_name"=>"James", "preferred_name"=>"Brian", "jersey_number"=>"2"}]},
83
+ "officials"=>
84
+ [{"full_name"=>"Mike Winters", "first_name"=>"Mike", "last_name"=>"Winters", "assignment"=>"2B", "experience"=>"24", "id"=>"344565d2-3276-4948-ac8e-28e4e49be9d9"},
85
+ {"full_name"=>"Mark Wegner", "first_name"=>"Mark", "last_name"=>"Wegner", "assignment"=>"3B", "experience"=>"15", "id"=>"27109ca4-3484-45ad-a78d-1a639c1bfabd"},
86
+ {"full_name"=>"Marty Foster", "first_name"=>"Marty", "last_name"=>"Foster", "assignment"=>"1B", "experience"=>"15", "id"=>"af6b8841-0bfd-402b-88de-1439d7d4ea74"},
87
+ {"full_name"=>"Mike Muchlinski", "first_name"=>"Mike", "last_name"=>"Muchlinski", "assignment"=>"HP", "experience"=>"2", "id"=>"ef45c7e3-9136-4704-b3a6-bfbd61cf9416"}]}