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
@@ -1,29 +0,0 @@
1
- module Sportradar
2
- module Api
3
- class Nfl::Quarter < Data
4
- attr_accessor :response, :id, :number, :sequence, :home_points, :away_points, :drives, :scoring
5
-
6
- def initialize(data)
7
- @response = data
8
- @id = data["id"]
9
- @number = data["number"]
10
- @sequence = data["sequence"]
11
- @home_points = data["home_points"]
12
- # @home_points = response['scoring']['home']['points'] # from play_by_play
13
- @away_points = data["away_points"]
14
- # @away_points = response['scoring']['away']['points'] # from play_by_play
15
- @drives = parse_into_array(selector: response["play_by_play"]["drive"], klass: Sportradar::Api::Nfl::Drive) if response["play_by_play"] && response["play_by_play"]["drive"]
16
- @scoring = Nfl::QuarterScoring.new(data['scoring']) if data['scoring']
17
- end
18
-
19
- end
20
-
21
- class Nfl::QuarterScoring < Data
22
- attr_accessor :home, :away
23
- def initialize(data)
24
- @home = OpenStruct.new(data['home'])
25
- @away = OpenStruct.new(data['away'])
26
- end
27
- end
28
- end
29
- end
@@ -1,25 +0,0 @@
1
- module Sportradar
2
- module Api
3
- class Nfl::Scoring < Data
4
- attr_accessor :response, :quarters
5
-
6
- def initialize(data)
7
- @response = data
8
- response['quarter'] = response['quarter'].select {|x| x.is_a? Hash } if response['quarter'].is_a?(Array) && response['quarter'].map(&:class).uniq.count > 1
9
- @quarters = parse_into_array(selector: response["quarter"], klass: Sportradar::Api::Nfl::Quarter) if response["quarter"]
10
- end
11
-
12
- def final
13
- "#{home}-#{away}"
14
- end
15
-
16
- def home
17
- quarters.map {|quarter| quarter.home_points.to_i }.reduce(:+)
18
- end
19
-
20
- def away
21
- quarters.map {|quarter| quarter.away_points.to_i }.reduce(:+)
22
- end
23
- end
24
- end
25
- end
@@ -1,23 +0,0 @@
1
- module Sportradar
2
- module Api
3
- class Nfl::Season < Data
4
- attr_accessor :response, :id, :year, :type, :name, :weeks, :injuries, :team, :conferences, :divisions, :teams
5
-
6
- def initialize(data)
7
- @response = data
8
- @id = data["id"]
9
- @year = data["year"]
10
- @type = data["type"]
11
- @name = data["name"]
12
- @team = Sportradar::Api::Nfl::Team.new(data["team"]) if data["team"].is_a?(Hash)
13
- @injuries = data["injuries"]["team"].map {|team| Sportradar::Api::Nfl::Team.new team } if data["injuries"] && data["injuries"]["team"]
14
- @weeks = parse_into_array(selector: response["week"], klass: Sportradar::Api::Nfl::Week) if response["week"]
15
- @conferences = parse_into_array(selector: response["conference"], klass: Sportradar::Api::Nfl::Conference) if response["conference"]
16
- @divisions = conferences.flat_map(&:divisions) if conferences&.all? { |conference| conference.divisions }
17
- @divisions ||= parse_into_array(selector: response["division"], klass: Sportradar::Api::Nfl::Division) if response["division"]
18
- @teams = @divisions.flat_map(&:teams) if divisions&.all? {|division| division.teams }
19
- end
20
-
21
- end
22
- end
23
- end
@@ -1,18 +0,0 @@
1
- module Sportradar
2
- module Api
3
- class Nfl::Situation < Data
4
- attr_accessor :response, :clock, :down, :yfd, :possession, :location, :team_id
5
-
6
- def initialize(data)
7
- @response = data
8
- @clock = data["clock"]
9
- @down = data["down"]
10
- @yfd = data["yfd"]
11
- @possession = OpenStruct.new data["possession"] if data["possession"]
12
- @location = OpenStruct.new data["location"] if data["location"]
13
- @team_id = possession.id if possession
14
- end
15
-
16
- end
17
- end
18
- end
@@ -1,28 +0,0 @@
1
- module Sportradar
2
- module Api
3
- class Nfl::Statistic < Data
4
- attr_accessor :response, :id, :sequence, :reference, :clock, :home_points, :away_points, :type, :play_clock, :wall_clock, :start_situation, :end_situation, :description, :alt_description, :statistics, :score, :scoring_play
5
-
6
- def initialize(data)
7
- @response = data
8
- @alt_description = data["alt_description"]
9
- @away_points = data["away_points"]
10
- @clock = data["clock"]
11
- @description = data["description"]
12
- @end_situation = Sportradar::Api::Nfl::Situation.new data["end_situation"] if data["end_situation"]
13
- @home_points = data["home_points"]
14
- @id = data["id"]
15
- @play_clock = data["play_clock"]
16
- @reference = data["reference"]
17
- @score = data["score"]
18
- @scoring_play = data["scoring_play"]
19
- @sequence = data["sequence"]
20
- @start_situation = Sportradar::Api::Nfl::Situation.new data["start_situation"] if data["start_situation"]
21
- @statistics = data["statistics"]
22
- @type = data["type"]
23
- @wall_clock = data["wall_clock"]
24
- end
25
-
26
- end
27
- end
28
- end
@@ -1,17 +0,0 @@
1
- module Sportradar
2
- module Api
3
- class Nfl::Summary < Data
4
- attr_accessor :response, :season, :week, :venue, :home, :away
5
-
6
- def initialize(data)
7
- @response = data
8
- @season = Sportradar::Api::Nfl::Season.new data["season"] if data["season"]
9
- @week = Sportradar::Api::Nfl::Week.new data["week"] if data["week"]
10
- @venue = Sportradar::Api::Nfl::Venue.new data["venue"] if data["venue"]
11
- @home = Sportradar::Api::Nfl::Team.new data["home"] if data["home"]
12
- @away = Sportradar::Api::Nfl::Team.new data["away"] if data["away"]
13
- end
14
-
15
- end
16
- end
17
- end
@@ -1,56 +0,0 @@
1
- module Sportradar
2
- module Api
3
- class Nfl::Team < Data
4
- attr_accessor :response, :id, :name, :alias, :game_number, :defense, :special_teams, :offense, :players, :statistics, :team_records, :player_records, :market, :franchise, :venue, :hierarchy, :coaches, :players, :used_timeouts, :remaining_timeouts, :points, :wins, :losses, :ties, :win_pct, :rank, :stats, :depth_chart
5
-
6
- alias_method :score, :points
7
-
8
- def initialize(data)
9
- @response = data
10
- @id = data["id"]
11
- @name = data["name"]
12
- @alias = data["alias"]
13
- @game_number = data["game_number"]
14
- @market = data["market"]
15
-
16
- # These come from boxscore summary
17
- @used_timeouts = data["used_timeouts"]
18
- @remaining_timeouts = data["remaining_timeouts"]
19
- @points = data["points"]
20
-
21
- @franchise = Sportradar::Api::Nfl::Franchise.new data["franchise"] if data["franchise"]
22
- @venue = Sportradar::Api::Nfl::Venue.new data["venue"] if data["venue"]
23
- @hierarchy = Sportradar::Api::Nfl::Hierarchy.new data["hierarchy"] if data["hierarchy"]
24
-
25
- @wins = data["wins"]
26
- @losses = data["losses"]
27
- @losses = data["losses"]
28
- @ties = data["ties"]
29
- @win_pct = data["win_pct"].to_f if data["win_pct"]
30
- @rank = data["rank"]
31
-
32
- @statistics = OpenStruct.new data["statistics"] if data["statistics"] # TODO Implement better?
33
- @team_records = OpenStruct.new data["team_records"] if data["team_records"] # TODO Implement better?
34
- @player_records = OpenStruct.new data["player_records"] if data["player_records"] # TODO Implement better?
35
-
36
- @defense = parse_into_array(selector: data["defense"]["position"], klass: Sportradar::Api::Nfl::Position) if data["defense"] && data["defense"]["position"]
37
- @offense = parse_into_array(selector: data["offense"]["position"], klass: Sportradar::Api::Nfl::Position) if data["offense"] && data["offense"]["position"]
38
- @special_teams = parse_into_array(selector: data["special_teams"]["position"], klass: Sportradar::Api::Nfl::Position) if data["special_teams"] && data["special_teams"]["position"]
39
- @coaches = parse_into_array(selector: response["coaches"]["coach"], klass: Sportradar::Api::Nfl::Coach) if response["coaches"] && response["coaches"]["coach"]
40
- @players = parse_into_array(selector: response["player"], klass: Sportradar::Api::Nfl::Player) if response["player"]
41
- @players ||= parse_into_array(selector: response["players"]["player"], klass: Sportradar::Api::Nfl::Player) if response["players"] && response["players"]["player"]
42
- end
43
-
44
- def full_name
45
- [market, name].join(' ')
46
- end
47
-
48
- def record
49
- if wins && losses && ties
50
- "#{wins}-#{losses}" << (ties == '0' ? '' : "-#{ties}")
51
- end
52
- end
53
-
54
- end
55
- end
56
- end
@@ -1,44 +0,0 @@
1
- module Sportradar
2
- module Api
3
- class Nfl::TeamDepthChart < Data
4
- include Enumerable
5
- attr_accessor :response, :season, :team_id, :abbrev
6
-
7
- # data.keys => ["offense", "defense", "special_teams", "name", "market", "alias", "id"]
8
- def initialize(data, season)
9
- @response = data
10
- @season = season
11
- @team_id = response['id']
12
- @abbrev = response['alias']
13
- end
14
-
15
- def offense
16
- @offense ||= Sportradar::Api::Nfl::DepthChart.new(response['offense']) if response['offense']
17
- end
18
-
19
- def defense
20
- @defense ||= Sportradar::Api::Nfl::DepthChart.new(response['defense']) if response['defense']
21
- end
22
-
23
- def special_teams
24
- @special_teams ||= Sportradar::Api::Nfl::DepthChart.new(response['special_teams']) if response['special_teams']
25
- end
26
-
27
- def team
28
- @team ||= Sportradar::Api::Nfl::Team.new(response).tap { |team| team.depth_chart = self }
29
- end
30
-
31
- def each
32
- [:offense, :defense, :special_teams].each { |type| yield type, send(type) }
33
- end
34
-
35
- # These aren't ever used, but handy if you need to invoke for testing
36
- # private
37
-
38
- # def set_charts
39
- # [offense, defense, special_teams]
40
- # end
41
-
42
- end
43
- end
44
- end
@@ -1,22 +0,0 @@
1
- module Sportradar
2
- module Api
3
- class Nfl::Venue < Data
4
- attr_accessor :response, :id, :name, :city, :state, :country, :zip, :address, :capacity, :surface, :roof_type
5
-
6
- def initialize(data)
7
- @response = data
8
- @id = data["id"]
9
- @name = data["name"]
10
- @city = data["city"]
11
- @state = data["state"]
12
- @country = data["country"]
13
- @zip = data["zip"]
14
- @address = data["address"]
15
- @capacity = data["capacity"]
16
- @surface = data["surface"]
17
- @roof_type = data["roof_type"]
18
- end
19
-
20
- end
21
- end
22
- end
@@ -1,16 +0,0 @@
1
- module Sportradar
2
- module Api
3
- class Nfl::Week < Data
4
- attr_accessor :response, :id, :sequence, :title, :games
5
-
6
- def initialize(data)
7
- @response = data
8
- @id = data["id"]
9
- @sequence = data["sequence"]
10
- @title = data["title"]
11
- @games = parse_into_array(selector: response["game"], klass: Sportradar::Api::Nfl::Game) if response["game"]
12
- end
13
-
14
- end
15
- end
16
- end
@@ -1,205 +0,0 @@
1
- module Sportradar
2
- module Api
3
- class Nfl < Request
4
- attr_accessor :league, :access_level, :simulation
5
-
6
- def initialize( access_level = "ot")
7
- @league = "nfl"
8
- raise Sportradar::Api::Error::InvalidAccessLevel unless allowed_access_levels.include? access_level
9
- @access_level = access_level
10
- end
11
-
12
- def schedule(year = Date.today.year, season = "reg")
13
- raise Sportradar::Api::Error::InvalidSeason unless allowed_seasons.include? season
14
- response = get request_url("games/#{ year }/#{ season }/schedule")
15
- if response.success? && response["season"]
16
- Sportradar::Api::Nfl::Season.new response["season"]
17
- else
18
- response
19
- end
20
- end
21
-
22
- def weekly_schedule(week = 1, year = Date.today.year, season = "reg")
23
- response = get request_url("games/#{ week_path(year, season, week) }/schedule")
24
- if response.success? && response["season"]
25
- Sportradar::Api::Nfl::Season.new response["season"]
26
- else
27
- response
28
- end
29
- end
30
-
31
- def weekly_depth_charts(week = 1, year = Date.today.year, season = "reg" )
32
- response = get request_url("seasontd/#{ week_path(year, season, week) }/depth_charts")
33
- if response.success?
34
- Sportradar::Api::Nfl::LeagueDepthChart.new response['season']
35
- else
36
- response
37
- end
38
- end
39
-
40
- def weekly_injuries(week = 1, year = Date.today.year, season = "reg")
41
- response = get request_url("seasontd/#{ week_path(year, season, week) }/injuries")
42
- if response.success? && response["season"]
43
- Sportradar::Api::Nfl::Season.new response["season"]
44
- else
45
- response
46
- end
47
- end
48
-
49
- # past_game_id = "0141a0a5-13e5-4b28-b19f-0c3923aaef6e"
50
- # future_game_id = "28290722-4ceb-4a4c-a4e5-1f9bec7283b3"
51
- def game_boxscore(game_id)
52
- check_simulation(game_id)
53
- response = get request_url("games/#{ game_id }/boxscore")
54
- if response.success? && response["game"] # mostly done, just missing play statistics
55
- Sportradar::Api::Nfl::Game.new response["game"]
56
- else
57
- response
58
- end
59
- end
60
-
61
- def game_roster(game_id)
62
- check_simulation(game_id)
63
- response = get request_url("games/#{ game_id }/roster")
64
- if response.success? && response["game"]
65
- Sportradar::Api::Nfl::Game.new response["game"]
66
- else
67
- response
68
- end
69
- end
70
-
71
- def game_statistics(game_id)
72
- check_simulation(game_id)
73
- response = get request_url("games/#{ game_id }/statistics")
74
- if response.success? && response["game"]
75
- Sportradar::Api::Nfl::Game.new response["game"]
76
- else
77
- response
78
- end
79
- ## Need to properly implement statistics
80
- end
81
-
82
- def play_by_play(game_id)
83
- check_simulation(game_id)
84
- response = get request_url("games/#{ game_id }/pbp")
85
- if response.success? && response["game"]
86
- Sportradar::Api::Nfl::Game.new response["game"]
87
- else
88
- response
89
- end
90
- # need to get into quarters, drives, plays, stats more still
91
- end
92
-
93
- # player_id = "ede260be-5ae6-4a06-887b-e4a130932705"
94
- def player_profile(player_id)
95
- response = get request_url("players/#{ player_id }/profile")
96
- if response.success? && response["player"]
97
- Sportradar::Api::Nfl::Player.new response["player"]
98
- else
99
- response
100
- end
101
- end
102
-
103
- # team_id = "97354895-8c77-4fd4-a860-32e62ea7382a"
104
- def seasonal_statistics(team_id, year = Date.today.year, season = "reg")
105
- raise Sportradar::Api::Error::InvalidLeague unless allowed_seasons.include? season
106
- response = get request_url("seasontd/#{ year }/#{ season }/teams/#{ team_id }/statistics")
107
- if response.success? && response["season"]
108
- Sportradar::Api::Nfl::Season.new response["season"]
109
- else
110
- response
111
- end
112
- # TODO: Object map team & player records - statistics
113
- end
114
-
115
- def team_profile(team_id)
116
- response = get request_url("teams/#{ team_id }/profile")
117
- if response.success? && response["team"]
118
- Sportradar::Api::Nfl::Team.new response["team"]
119
- else
120
- response
121
- end
122
- end
123
-
124
- def league_hierarchy
125
- response = get request_url("league/hierarchy")
126
- if response.success? && response["league"]
127
- Sportradar::Api::Nfl::Hierarchy.new response["league"]
128
- else
129
- response
130
- end
131
- end
132
-
133
- def standings(year = Date.today.year)
134
- response = get request_url("seasontd/#{ year }/standings")
135
- if response.success? && response["season"]
136
- Sportradar::Api::Nfl::Season.new response["season"]
137
- else
138
- response
139
- end
140
- # TODO Needs implement rankings/records/stats on team
141
- end
142
-
143
- def daily_changelog(date = Date.today)
144
- response = get request_url("league/#{date_path(date)}/changes")
145
- if response.success? && response["league"] && response["league"]["changelog"]
146
- Sportradar::Api::Nfl::Changelog.new response["league"]["changelog"]
147
- else
148
- response
149
- end
150
- end
151
-
152
- def simulation_games
153
- [
154
- "f45b4a31-b009-4039-8394-42efbc6d5532",
155
- "5a7042cb-fe7a-4838-b93f-6b8c167ec384",
156
- "7f761bb5-7963-43ea-a01b-baf4f5d50fe3"
157
- ]
158
- end
159
-
160
- def active_simulation
161
- game = simulation_games.lazy.map {|game_id| game_boxscore game_id }.find{ |g| g.status == 'inprogress' if g.is_a?(Sportradar::Api::Nfl::Game) }
162
- if game
163
- puts "Live Game: #{game.summary.home.full_name} vs #{game.summary.away.full_name}. Q#{game.quarter} #{game.clock}. game_id='#{game.id}'"
164
- game
165
- else
166
- "No active simulation"
167
- end
168
- end
169
-
170
- private
171
-
172
- def check_simulation(game_id)
173
- @simulation = true if simulation_games.include?(game_id)
174
- end
175
-
176
- def request_url(path)
177
- if simulation
178
- "/nfl-sim1/#{path}"
179
- else
180
- "/nfl-#{access_level}#{version}/#{path}"
181
- end
182
- end
183
-
184
- def api_key
185
- if access_level == 'o'
186
- Sportradar::Api.api_key_params("nfl", "production")
187
- else
188
- Sportradar::Api.api_key_params("nfl")
189
- end
190
- end
191
-
192
- def version
193
- Sportradar::Api.version("nfl")
194
- end
195
-
196
- def allowed_access_levels
197
- ["o", "ot"]
198
- end
199
-
200
- def allowed_seasons
201
- ["pre", "reg", "pst"]
202
- end
203
- end
204
- end
205
- end