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
@@ -4,28 +4,28 @@ module Sportradar
4
4
  attr_accessor :tackles, :assists, :combined, :sacks, :sack_yards, :interceptions, :passes_defended, :forced_fumbles, :fumble_recoveries, :qb_hits, :tloss, :tloss_yards, :safeties, :sp_tackles, :sp_assists, :sp_forced_fumbles, :sp_fumble_recoveries, :sp_blocks, :misc_tackles, :misc_assists, :misc_forced_fumbles, :misc_fumble_recoveries, :missed_tackles
5
5
 
6
6
  def set_stats
7
- @tackles = response["tackles"]
8
- @assists = response["assists"]
9
- @combined = response["combined"]
10
- @sacks = response["sacks"]
11
- @sack_yards = response["sack_yards"]
12
- @interceptions = response["interceptions"]
13
- @passes_defended = response["passes_defended"]
14
- @forced_fumbles = response["forced_fumbles"]
15
- @fumble_recoveries = response["fumble_recoveries"]
16
- @qb_hits = response["qb_hits"]
17
- @tloss = response["tloss"]
7
+ @tackles = response["tackles"] || response["tackle"]
8
+ @assists = response["assists"] || response['ast']
9
+ @combined = response["combined"] || response['comb']
10
+ @sacks = response["sacks"] || response['sack']
11
+ @sack_yards = response["sack_yards"] || response['sack_yds']
12
+ @interceptions = response["interceptions"] || response['int']
13
+ @passes_defended = response["passes_defended"] || response['pd']
14
+ @forced_fumbles = response["forced_fumbles"] || response['force_fum']
15
+ @fumble_recoveries = response["fumble_recoveries"] || response['fum_rec']
16
+ @qb_hits = response["qb_hits"] || response['qh']
17
+ @tloss = response["tloss"] || response['tlost']
18
18
  @tloss_yards = response["tloss_yards"]
19
- @safeties = response["safeties"]
20
- @sp_tackles = response["sp_tackles"]
21
- @sp_assists = response["sp_assists"]
22
- @sp_forced_fumbles = response["sp_forced_fumbles"]
23
- @sp_fumble_recoveries = response["sp_fumble_recoveries"]
19
+ @safeties = response["safeties"] || response['sfty']
20
+ @sp_tackles = response["sp_tackles"] || response['sp_tackle']
21
+ @sp_assists = response["sp_assists"] || response['sp_ast']
22
+ @sp_forced_fumbles = response["sp_forced_fumbles"] || response['sp_force_fum']
23
+ @sp_fumble_recoveries = response["sp_fumble_recoveries"] || response['sp_fum_rec']
24
24
  @sp_blocks = response["sp_blocks"]
25
- @misc_tackles = response["misc_tackles"]
26
- @misc_assists = response["misc_assists"]
27
- @misc_forced_fumbles = response["misc_forced_fumbles"]
28
- @misc_fumble_recoveries = response["misc_fumble_recoveries"]
25
+ @misc_tackles = response["misc_tackles"] || response['misc_tackle']
26
+ @misc_assists = response["misc_assists"] || response['misc_ast']
27
+ @misc_forced_fumbles = response["misc_forced_fumbles"] || response['misc_force_fum']
28
+ @misc_fumble_recoveries = response["misc_fumble_recoveries"] || response['misc_fum_rec']
29
29
  @missed_tackles = response["missed_tackles"]
30
30
  end
31
31
  end
@@ -1,13 +1,14 @@
1
1
  module Sportradar
2
2
  module Api
3
3
  class Football::StatPack::ExtraPoints < Football::StatPack
4
- attr_accessor :attempts, :made, :blocked, :pass_attempts, :pass_successes, :rush_attempts, :rush_successes, :defense_attempts, :defense_successes, :turnover_successes
4
+ attr_accessor :attempts, :pct, :made, :blocked, :pass_attempts, :pass_successes, :rush_attempts, :rush_successes, :defense_attempts, :defense_successes, :turnover_successes
5
5
 
6
6
  def set_stats
7
- kick_data = response['kicks'] || response
8
- @attempts = kick_data["attempts"]
7
+ kick_data = response['kicks'] || response['totals'] || response
8
+ @attempts = kick_data["attempts"] || kick_data["att"]
9
9
  @made = kick_data["made"]
10
- @blocked = kick_data["blocked"]
10
+ @blocked = kick_data["blocked"] || kick_data["blk"]
11
+ @pct = kick_data["pct"] || (@made.to_f / @attempts.to_i)
11
12
  if response['conversions']
12
13
  @pass_attempts = response["pass_attempts"]
13
14
  @pass_successes = response["pass_successes"]
@@ -1,15 +1,16 @@
1
1
  module Sportradar
2
2
  module Api
3
3
  class Football::StatPack::FieldGoals < Football::StatPack
4
- attr_accessor :attempts, :made, :blocked, :yards, :avg_yards, :longest
4
+ attr_accessor :attempts, :pct, :made, :blocked, :yards, :avg_yards, :longest
5
5
 
6
6
  def set_stats
7
- @attempts = response["attempts"]
7
+ @attempts = response["attempts"] || response["att"]
8
8
  @made = response["made"]
9
- @blocked = response["blocked"]
10
- @yards = response["yards"]
9
+ @blocked = response["blocked"] || response['blk']
10
+ @yards = response["yards"] || response['yds']
11
11
  @avg_yards = response["avg_yards"]
12
- @longest = response["longest"]
12
+ @longest = response["longest"] || response['lg']
13
+ @pct = response["pct"] || (@made.to_f / @attempts.to_i)
13
14
  end
14
15
  end
15
16
 
@@ -5,19 +5,21 @@ module Sportradar
5
5
 
6
6
  def set_stats
7
7
  @response = response[1] if response.is_a? Array
8
- @fumbles = response["fumbles"]
9
- @lost_fumbles = response["lost_fumbles"]
8
+ @fumbles = response["fumbles"] || response['fum']
9
+ @lost_fumbles = response["lost_fumbles"] || response['lost']
10
10
  @own_rec = response["own_rec"]
11
- @own_rec_yards = response["own_rec_yards"]
11
+ @own_rec_yards = response["own_rec_yards"] || response["own_rec_yds"]
12
12
  @opp_rec = response["opp_rec"]
13
- @opp_rec_yards = response["opp_rec_yards"]
14
- @out_of_bounds = response["out_of_bounds"]
15
- @forced_fumbles = response["forced_fumbles"]
16
- @own_rec_tds = response["own_rec_tds"]
17
- @opp_rec_tds = response["opp_rec_tds"]
18
- @ez_rec_tds = response["ez_rec_tds"]
13
+ @opp_rec_yards = response["opp_rec_yards"] || response["opp_rec_yds"]
14
+ @out_of_bounds = response["out_of_bounds"] || response['oob']
15
+ @forced_fumbles = response["forced_fumbles"] || response['force_fum']
16
+ @own_rec_tds = response["own_rec_tds"] || response["own_rec_td"]
17
+ @opp_rec_tds = response["opp_rec_tds"] || response["opp_rec_td"]
18
+ @ez_rec_tds = response["ez_rec_tds"] # unknown ncaafb
19
19
  end
20
20
  end
21
21
 
22
22
  end
23
23
  end
24
+
25
+ # ncaafb = {"fum"=>0, "lost"=>0, "oob"=>0, "own_rec"=>0, "own_rec_yds"=>0, "own_rec_td"=>0, "force_fum"=>3, "opp_rec"=>2, "opp_rec_yds"=>0, "opp_rec_td"=>0}
@@ -4,15 +4,16 @@ module Sportradar
4
4
  attr_accessor :returns, :yards, :avg_yards, :touchdowns, :longest, :faircatches, :longest_touchdown
5
5
 
6
6
  def set_stats
7
- @returns = response["returns"]
8
- @yards = response["yards"]
9
- @avg_yards = response["avg_yards"]
10
- @touchdowns = response["touchdowns"]
11
- @longest = response["longest"]
12
- @faircatches = response["faircatches"]
13
- @longest_touchdown = response["longest_touchdown"]
7
+ @returns = response["returns"] || response['number']
8
+ @yards = response["yards"] || response['yds']
9
+ @avg_yards = response["avg_yards"] || response['avg']
10
+ @touchdowns = response["touchdowns"] || response['td']
11
+ @longest = response["longest"] || response['lg']
12
+ @faircatches = response["faircatches"] || response['fc']
13
+ @longest_touchdown = response["longest_touchdown"] # unknown ncaafb
14
14
  end
15
15
  end
16
16
 
17
17
  end
18
18
  end
19
+ # ncaafb = {"returns"=>4, "yds"=>125, "fc"=>0, "lg"=>47, "td"=>0, "avg"=>31.25, "yds_10_pls"=>0, "yds_20_pls"=>1, "yds_30_pls"=>0, "yds_40_pls"=>2, "yds_50_pls"=>0}
@@ -1,18 +1,20 @@
1
1
  module Sportradar
2
2
  module Api
3
3
  class Football::StatPack::Kickoffs < Football::StatPack
4
- attr_accessor :kickoffs, :endzone, :inside_20, :return_yards, :touchbacks, :yards, :out_of_bounds
4
+ attr_accessor :kickoffs, :endzone, :inside_20, :return_yards, :touchbacks, :yards, :out_of_bounds, :average
5
5
 
6
6
  def set_stats
7
- @kickoffs = response["kickoffs"]
7
+ @kickoffs = response["kickoffs"] || response['kicks'] || response['number']
8
8
  @endzone = response["endzone"]
9
- @inside_20 = response["inside_20"]
10
- @return_yards = response["return_yards"]
11
- @touchbacks = response["touchbacks"]
12
- @yards = response["yards"]
13
- @out_of_bounds = response["out_of_bounds"]
9
+ @inside_20 = response["inside_20"] || response['in20']
10
+ @return_yards = response["return_yards"] || response['ret_yds']
11
+ @touchbacks = response["touchbacks"] || response['tb']
12
+ @yards = response["yards"] || response['yds']
13
+ @average = response['avg'] || (@yards.to_f / @kickoffs.to_i)
14
+ @out_of_bounds = response["out_of_bounds"] # unknown ncaafb
14
15
  end
15
16
  end
16
17
 
17
18
  end
18
19
  end
20
+ # ncaafb = {"kicks"=>10, "yds"=>606, "net_yds"=>411, "lg"=>65, "endzone"=>3, "in20"=>3, "tb"=>2, "ret"=>7, "avg"=>60.6, "net_avg"=>41.1, "ret_yds"=>195, "avg_ret"=>27.857, "in20_pct"=>30.0, "tb_pct"=>20.0}
@@ -4,7 +4,7 @@ module Sportradar
4
4
  attr_accessor :returns, :yards, :touchdowns, :blk_fg_touchdowns, :blk_punt_touchdowns, :fg_return_touchdowns, :ez_rec_touchdowns
5
5
 
6
6
  def set_stats
7
- @returns = response["returns"]
7
+ @returns = response["returns"] || response['number']
8
8
  @yards = response["yards"]
9
9
  @touchdowns = response["touchdowns"]
10
10
  @blk_fg_touchdowns = response["blk_fg_touchdowns"]
@@ -4,21 +4,23 @@ module Sportradar
4
4
  attr_accessor :attempts, :completions, :cmp_pct, :yards, :avg_yards, :sacks, :sack_yards, :touchdowns, :longest, :interceptions, :rating, :longest_touchdown, :air_yards, :net_yards, :redzone_attempts
5
5
 
6
6
  def set_stats
7
- @attempts = response["attempts"]
8
- @completions = response["completions"]
7
+ @attempts = response["attempts"] || response['att']
8
+ @completions = response["completions"] || response['cmp']
9
9
  @cmp_pct = response["cmp_pct"]
10
- @yards = response["yards"] # 'yards' is air yards, which does not include sack yardage. air_yards is for college, net_yards for NFL
11
- @avg_yards = response["avg_yards"]
12
- @sacks = response["sacks"]
13
- @sack_yards = response["sack_yards"]
14
- @touchdowns = response["touchdowns"]
15
- @longest = response["longest"]
16
- @interceptions = response["interceptions"]
10
+ # 'yards' is air yards, which does not include sack yardage. air_yards is for college, net_yards for NFL
11
+ @yards = response["yards"] || response['yds']
12
+ @avg_yards = response["avg_yards"] || response['avg']
13
+ @sacks = response["sacks"] || response['sk']
14
+ @sack_yards = response["sack_yards"] || response['sk_yds']
15
+ @touchdowns = response["touchdowns"] || response['td']
16
+ @longest = response["longest"] || response['lg']
17
+ @interceptions = response["interceptions"] || response['int']
17
18
  @rating = response["rating"]
18
19
  @longest_touchdown = response["longest_touchdown"]
19
20
  @air_yards = response["air_yards"]
20
- @net_yards = response["net_yards"] # passing net_yards is the correct measure for team stats, as it includes sack yardage
21
- @redzone_attempts = response["redzone_attempts"]
21
+ # passing net_yards is the correct measure for team stats, as it includes sack yardage
22
+ @net_yards = response["net_yards"]
23
+ @redzone_attempts = response["redzone_attempts"] || response['rz_att']
22
24
  end
23
25
  end
24
26
 
@@ -7,8 +7,8 @@ module Sportradar
7
7
 
8
8
  def set_stats
9
9
  @response = (response.dig(1) || {}) if response.is_a? Array
10
- @penalties = response.dig('penalties')
11
- @yards = response.dig('yards')
10
+ @penalties = response.dig('penalties') || response['num']
11
+ @yards = response.dig('yards') || response['yds']
12
12
  end
13
13
 
14
14
  def formatted
@@ -5,14 +5,15 @@ module Sportradar
5
5
 
6
6
  def set_stats
7
7
  @returns = response["returns"]
8
- @yards = response["yards"]
9
- @avg_yards = response["avg_yards"]
10
- @touchdowns = response["touchdowns"]
11
- @longest = response["longest"]
12
- @faircatches = response["faircatches"]
13
- @longest_touchdown = response["longest_touchdown"]
8
+ @yards = response["yards"] || response['yds']
9
+ @avg_yards = response["avg_yards"] || response['avg']
10
+ @touchdowns = response["touchdowns"] || response['td']
11
+ @longest = response["longest"] || response['lg']
12
+ @faircatches = response["faircatches"] || response['fc']
13
+ @longest_touchdown = response["longest_touchdown"] # unknown ncaafb
14
14
  end
15
15
  end
16
16
 
17
17
  end
18
18
  end
19
+ # ncaafb = {"returns"=>2, "yds"=>1, "fc"=>1, "lg"=>1, "td"=>0, "avg"=>0.5, "yds_10_pls"=>0, "yds_20_pls"=>0, "yds_30_pls"=>0, "yds_40_pls"=>0, "yds_50_pls"=>0}
@@ -4,18 +4,20 @@ module Sportradar
4
4
  attr_accessor :avg_yards, :yards, :attempts, :blocked, :longest, :touchbacks, :inside_20, :avg_net_yards, :return_yards, :net_yards
5
5
 
6
6
  def set_stats
7
- @avg_yards = response["avg_yards"]
8
- @yards = response["yards"]
9
- @attempts = response["attempts"]
10
- @blocked = response["blocked"]
11
- @longest = response["longest"]
12
- @touchbacks = response["touchbacks"]
13
- @inside_20 = response["inside_20"]
14
- @avg_net_yards = response["avg_net_yards"]
15
- @return_yards = response["return_yards"]
16
- @net_yards = response["net_yards"]
7
+ @avg_yards = response["avg_yards"] || response['avg']
8
+ @yards = response["yards"] || response['yds']
9
+ @attempts = response["attempts"] || response['punts']
10
+ @blocked = response["blocked"] || response['blk']
11
+ @longest = response["longest"] || response['lg']
12
+ @touchbacks = response["touchbacks"] || response['tb']
13
+ @inside_20 = response["inside_20"] || response['in20']
14
+ @avg_net_yards = response["avg_net_yards"] || response['net_avg']
15
+ @return_yards = response["return_yards"] || response['return_yards']
16
+ @net_yards = response["net_yards"] # unknown ncaafb
17
17
  end
18
18
  end
19
19
 
20
20
  end
21
21
  end
22
+
23
+ # ncaafb = {"punts"=>3, "yds"=>94, "net_yds"=>94, "lg"=>39, "blk"=>0, "in20"=>2, "tb"=>0, "ret"=>0, "sfty"=>0, "avg"=>31.333, "net_avg"=>31.333, "ret_yds"=>0, "avg_ret"=>0.0, "in20_pct"=>66.667, "tb_pct"=>0.0}
@@ -4,18 +4,19 @@ module Sportradar
4
4
  attr_accessor :avg_yards, :yards, :touchdowns, :longest, :longest_touchdown, :targets, :receptions, :yards_after_catch, :redzone_targets, :air_yards
5
5
 
6
6
  def set_stats
7
- @avg_yards = response["avg_yards"]
8
- @yards = response["yards"]
9
- @touchdowns = response["touchdowns"]
10
- @longest = response["longest"]
7
+ @yards = response["yards"] || response['yds']
8
+ @touchdowns = response["touchdowns"] || response['td']
9
+ @longest = response["longest"] || response['lg']
11
10
  @longest_touchdown = response["longest_touchdown"]
12
- @targets = response["targets"]
13
- @receptions = response["receptions"]
14
- @yards_after_catch = response["yards_after_catch"]
15
- @redzone_targets = response["redzone_targets"]
16
- @air_yards = response["air_yards"]
11
+ @targets = response["targets"] || response['tar']
12
+ @receptions = response["receptions"] || response['rec']
13
+ @yards_after_catch = response["yards_after_catch"] || response['yac']
14
+ @redzone_targets = response["redzone_targets"] || response['rz_tar']
15
+ @air_yards = response["air_yards"] # unknown ncaafb
16
+ @avg_yards = response["avg_yards"] || (@yards.to_f / @receptions.to_i)
17
17
  end
18
18
  end
19
19
 
20
20
  end
21
21
  end
22
+ # ncaafb = {"tar"=>54, "rec"=>38, "yds"=>441, "yac"=>441, "fd"=>19, "avg"=>11.605, "td"=>4, "lg"=>34, "rz_tar"=>8, "fum"=>0, "yds_10_pls"=>9, "yds_20_pls"=>3, "yds_30_pls"=>3, "yds_40_pls"=>0, "yds_50_pls"=>0}
@@ -4,17 +4,19 @@ module Sportradar
4
4
  attr_accessor :avg_yards, :yards, :touchdowns, :longest, :longest_touchdown, :attempts, :tlost, :tlost_yards, :redzone_attempts
5
5
 
6
6
  def set_stats
7
- @avg_yards = response["avg_yards"]
8
- @yards = response["yards"]
9
- @touchdowns = response["touchdowns"]
10
- @longest = response["longest"]
11
- @longest_touchdown = response["longest_touchdown"]
12
- @attempts = response["attempts"]
13
- @tlost = response["tlost"]
14
- @tlost_yards = response["tlost_yards"]
15
- @redzone_attempts = response["redzone_attempts"]
7
+ @avg_yards = response["avg_yards"] || response['avg']
8
+ @yards = response["yards"] || response['yds']
9
+ @touchdowns = response["touchdowns"] || response['td']
10
+ @longest = response["longest"] || response['lg']
11
+ @longest_touchdown = response["longest_touchdown"] # unknown ncaafb
12
+ @attempts = response["attempts"] || response['att']
13
+ @tlost = response["tlost"] # unknown ncaafb
14
+ @tlost_yards = response["tlost_yards"] # unknown ncaafb
15
+ @redzone_attempts = response["redzone_attempts"] || response['rz_att']
16
16
  end
17
17
  end
18
18
 
19
19
  end
20
20
  end
21
+
22
+ # ncaafb = {"att"=>35, "yds"=>189, "avg"=>5.4, "lg"=>40, "td"=>2, "fd"=>11, "fd_pct"=>31.429, "sfty"=>0, "rz_att"=>8, "fum"=>0, "yds_10_pls"=>1, "yds_20_pls"=>1, "yds_30_pls"=>1, "yds_40_pls"=>1, "yds_50_pls"=>0}
@@ -5,9 +5,13 @@ module Sportradar
5
5
  attr_accessor :response, :player, :name, :id, :position, :yards, :players
6
6
 
7
7
  def initialize(data)
8
- @response = data || {}
9
- @player = Sportradar::Api::Nfl::Player.new(response) if response['name'] # this isn't used yet, and we need to determine a better solution
10
- @players = parse_into_array(selector: response["player"], klass: self.class) if response["player"]
8
+ if data['name']
9
+ @response = data
10
+ @player = Sportradar::Api::Football::Nfl::Player.new(data) # need to handle ncaa/nfl, although it may not matter
11
+ else
12
+ @response = data['team'] || data['totals'] || data['kicks']
13
+ @players = parse_into_array(selector: data["players"], klass: self.class) if data["players"]
14
+ end
11
15
  set_stats
12
16
  end
13
17
 
@@ -0,0 +1,160 @@
1
+ module Sportradar
2
+ module Api
3
+ module Football
4
+ class Team < Data
5
+ attr_accessor :response, :id, :market, :name, :alias, :full_name, :venue, :records, :player_stats, :team_stats, :seed, :season, :type, :stats
6
+
7
+ def initialize(data, **opts)
8
+ @response = data
9
+ @api = opts[:api]
10
+
11
+ @games_hash = {}
12
+ @players_hash = {}
13
+ @player_stats = {}
14
+ @records = {}
15
+ @stats = nil
16
+ @points = nil
17
+
18
+ case data
19
+ when String
20
+ @id = data
21
+ when Hash
22
+ @id = data['id']
23
+ update(data, **opts)
24
+ end
25
+ end
26
+
27
+ def update(data, **opts)
28
+ handle_names(data)
29
+ @id = data['id'] || @id
30
+
31
+ @venue = Venue.new(data['venue']) if data['venue']
32
+
33
+ @seed = data['seed'].to_i if data['seed']
34
+ @alias = data['alias'] if data['alias']
35
+ @points = data['points'].to_i if data['points']
36
+
37
+ parse_records(data) if data['records']
38
+ parse_players(data.dig('players'), opts[:game]) if data.dig('players')
39
+ # parse_stats(data['statistics']) if data['statistics']
40
+ if opts[:game]
41
+ add_game(opts[:game])
42
+ opts[:game].update_score(id => @points) if @points
43
+ if data['statistics']
44
+ @stats = Sportradar::Api::Football::GameStats.new(data['statistics'])
45
+ opts[:game].update_stats(self, @stats)
46
+ end
47
+ end
48
+ end
49
+ def handle_names(data)
50
+ # need to do some more work here
51
+ @name = data['name'] if data['name']
52
+ if data['name'] && !data.key?('market')
53
+ @full_name = data['name']
54
+ elsif data['name'] && data['market']
55
+ @market = data['market']
56
+ @full_name = [@market, data['name']].join(' ')
57
+ end
58
+ end
59
+
60
+ def record(type = 'overall')
61
+ @records[type]
62
+ end
63
+
64
+ def games
65
+ @games_hash.values
66
+ end
67
+ def add_game(game)
68
+ @games_hash[game.id] = game.id if game
69
+ end
70
+
71
+ # def parse_stats(data)
72
+ # @stats = data
73
+ # end
74
+
75
+ def players
76
+ get_roster if @players_hash.empty?
77
+ @players_hash.values
78
+ end
79
+ alias :roster :players
80
+ def parse_players(data, game)
81
+ create_data(@players_hash, data, klass: player_class, api: api, team: self, game: game)
82
+ end
83
+ def update_player_stats(player, stats, game = nil)
84
+ game ? game.update_player_stats(player, stats) : @player_stats.merge!(player.id => stats.merge!(player: player))
85
+ end
86
+
87
+ def get_roster
88
+ data = api.get_data(path_roster).to_h
89
+ ingest_roster(data)
90
+ end
91
+ def ingest_roster(data)
92
+ update(data)
93
+ data
94
+ end
95
+
96
+ def get_season_stats(year = default_year)
97
+ data = api.get_data(path_season_stats(year)).to_h
98
+ ingest_season_stats(data)
99
+ end
100
+ def ingest_season_stats(data)
101
+ parse_season_stats(data)
102
+ end
103
+
104
+ # def ingest_season_stats(data)
105
+ # update(data, source: :teams)
106
+ # data
107
+ # end
108
+
109
+ def queue_season_stats(year = default_year)
110
+ url, headers, options, timeout = api.get_request_info(path_season_stats(year))
111
+ {url: url, headers: headers, params: options, timeout: timeout, callback: method(:ingest_season_stats)}
112
+ end
113
+
114
+ def parse_records(data)
115
+ @records['overall'] = Record.new(data, type: 'overall')
116
+ data['records'].each { |record| @records[record['record_type']] = Record.new(record, type: record['record_type']) }
117
+ end
118
+
119
+ def parse_season_stats(data)
120
+ @team_stats = data.dig('statistics')
121
+ update(data)
122
+ player_data = data.dig('players')
123
+ create_data(@players_hash, player_data, klass: player_class, api: api, team: self)
124
+ data
125
+ end
126
+
127
+ def path_base
128
+ "teams/#{ id }"
129
+ end
130
+ def path_base_stats(year = season_year, season = default_season)
131
+ "seasontd/#{year}/#{season}/teams/#{id}"
132
+ end
133
+ def path_roster
134
+ "#{ path_base }/profile" # nfl is profile, ncaa is roster
135
+ end
136
+ def path_season_stats
137
+ "#{ path_base_stats }/statistics"
138
+ end
139
+
140
+
141
+ def season_year
142
+ @season || default_year
143
+ end
144
+ alias :year :season_year
145
+
146
+ private
147
+ def default_year
148
+ (Date.today - 60).year
149
+ end
150
+ def default_date
151
+ Date.today
152
+ end
153
+ def default_season
154
+ 'reg'
155
+ end
156
+
157
+ end
158
+ end
159
+ end
160
+ end
@@ -0,0 +1,25 @@
1
+ module Sportradar
2
+ module Api
3
+ module Football
4
+ class Venue < Data
5
+ attr_accessor :response, :id, :name, :city, :state, :country, :zip, :address, :capacity, :surface, :roof_type, :timezone
6
+
7
+ def initialize(data)
8
+ @response = data
9
+ @id = data["id"]
10
+ @name = data["name"]
11
+ @city = data["city"]
12
+ @state = data["state"]
13
+ @country = data["country"]
14
+ @zip = data["zip"]
15
+ @address = data["address"]
16
+ @capacity = data["capacity"]
17
+ @timezone = data['timezone']
18
+ @surface = data["surface"]
19
+ @roof_type = data["roof_type"]
20
+ end
21
+
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,57 @@
1
+ module Sportradar
2
+ module Api
3
+ module Football
4
+ class Week < Data
5
+ attr_accessor :response, :id, :number, :api, :hierarchy, :year, :type, :sequence
6
+
7
+ def all_attributes
8
+ [:number]
9
+ end
10
+
11
+ def initialize(data = {}, **opts)
12
+ # @response = data
13
+ @api = opts[:api]
14
+ @id = data['id']
15
+ @hierarchy = opts[:hierarchy]
16
+
17
+ @games_hash = {}
18
+
19
+ update(data, **opts)
20
+ end
21
+
22
+ def update(data, source: nil, **opts)
23
+ # update stuff
24
+ @year = opts[:hierarchy].season_year if opts[:hierarchy]
25
+ @type = opts[:hierarchy].season if opts[:hierarchy]
26
+
27
+ @number = data['number'] || data['title'] || @number
28
+ @sequence = data['sequence'] if data['sequence']
29
+
30
+ create_data(@games_hash, data['games'], klass: game_class, week: self, api: api)
31
+ end
32
+
33
+ def games
34
+ @games_hash.values
35
+ end
36
+
37
+ end
38
+ end
39
+ end
40
+ end
41
+
42
+ __END__
43
+
44
+
45
+
46
+ ncaafb = Sportradar::Api::Football::Ncaafb::Hierarchy.new
47
+ ncaafb = Sportradar::Api::Football::Ncaafb::Hierarchy.new
48
+ res1 = ncaafb.get_schedule;
49
+ res2 = ncaafb.get_weekly_schedule;
50
+
51
+ ncaafb = Sportradar::Api::Football::Ncaafb::Hierarchy.new
52
+ gg = ncaafb.games;
53
+ g = gg.first;
54
+ g.week
55
+ g.week_number
56
+ g.year
57
+ g.type