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,129 @@
1
+ module Sportradar
2
+ module Api
3
+ module Basketball
4
+ class Nba < Request
5
+ attr_accessor :league, :access_level, :simulation, :error
6
+
7
+ def initialize(access_level = default_access_level)
8
+ @league = 'nba'
9
+ raise Sportradar::Api::Error::InvalidAccessLevel unless allowed_access_levels.include? access_level
10
+ @access_level = access_level
11
+ end
12
+
13
+ def schedule(season_year = default_year, nba_season = default_season)
14
+ raise Sportradar::Api::Error::InvalidSeason unless allowed_seasons.include? nba_season
15
+ response = get request_url("games/#{season_year}/#{nba_season}/schedule")
16
+ if response.success?
17
+ Sportradar::Api::Basketball::Nba::Season.new(response.to_h, api: self)
18
+ else
19
+ @error = response
20
+ end
21
+ end
22
+
23
+ def daily_schedule(date = default_date, nba_season = default_season)
24
+ response = get request_url("games/#{ date.year }/#{ date.month }/#{ date.day }/schedule")
25
+ if response.success?
26
+ Sportradar::Api::Basketball::Nba::Schedule.new(response.to_h, api: self)
27
+ else
28
+ @error = response
29
+ end
30
+ end
31
+
32
+ def series_schedule(season_year = default_year)
33
+ response = get request_url("series/#{season_year}/pst/schedule")
34
+ if response.success?
35
+ Sportradar::Api::Basketball::Nba::Season.new(response.to_h, api: self)
36
+ else
37
+ @error = response
38
+ end
39
+ end
40
+
41
+ def league_hierarchy
42
+ response = get request_url("league/hierarchy")
43
+ if response.success?
44
+ Sportradar::Api::Basketball::Nba::Hierarchy.new(response.to_h, api: self)
45
+ else
46
+ response
47
+ end
48
+ end
49
+ alias :hierarchy :league_hierarchy
50
+
51
+ def standings(season_year = default_year, nba_season = default_season)
52
+ response = get request_url("seasontd/#{season_year}/#{nba_season}/standings")
53
+ if response.success?
54
+ Sportradar::Api::Basketball::Nba::Hierarchy.new(response.to_h, api: self)
55
+ else
56
+ response
57
+ end
58
+ end
59
+
60
+ def get_data(url)
61
+ get request_url(url)
62
+ end
63
+
64
+ def default_year
65
+ 2016
66
+ end
67
+ def default_date
68
+ Date.today
69
+ end
70
+ def default_season
71
+ 'reg'
72
+ end
73
+ def default_access_level
74
+ if (ENV['SPORTRADAR_ENV'] || ENV['RACK_ENV'] || ENV['RAILS_ENV']) == 'production'
75
+ 'p'
76
+ else
77
+ 't'
78
+ end
79
+ end
80
+
81
+ def content_format
82
+ 'json'
83
+ end
84
+
85
+ private
86
+
87
+ def check_simulation(game_id)
88
+ @simulation = true if simulation_games.include?(game_id)
89
+ end
90
+
91
+ def request_url(path)
92
+ # puts "/nba-#{access_level}#{version}/#{path}"
93
+ if simulation
94
+ # "/nfl-sim1/#{path}"
95
+ else
96
+ "/nba-#{access_level}#{version}/#{path}"
97
+ end
98
+ end
99
+
100
+ def api_key
101
+ if !['t', 'sim'].include?(access_level)
102
+ Sportradar::Api.api_key_params('nba', 'production')
103
+ else
104
+ Sportradar::Api.api_key_params('nba')
105
+ end
106
+ end
107
+
108
+ def version
109
+ Sportradar::Api.version('nba')
110
+ end
111
+
112
+ def allowed_access_levels
113
+ %w[p t sim]
114
+ end
115
+
116
+ def allowed_seasons
117
+ ["pre", "reg", "pst"]
118
+ end
119
+
120
+ end
121
+ end
122
+ end
123
+ end
124
+
125
+ __END__
126
+
127
+ sr = Sportradar::Api::Basketball::Nba.new
128
+ lh = sr.league_hierarchy;
129
+ ls = sr.standings;
@@ -0,0 +1,44 @@
1
+ module Sportradar
2
+ module Api
3
+ module Basketball
4
+ class Ncaamb
5
+ class Bracket < Data
6
+ attr_accessor :response, :id, :name, :location, :start, :end
7
+
8
+ def initialize(data, **opts)
9
+ @response = data
10
+ @api = opts[:api]
11
+ @tournament = opts[:tournament]
12
+
13
+ @id = data['id']
14
+
15
+ @games_hash = {}
16
+
17
+ update(data)
18
+ end
19
+
20
+ def update(data, **opts)
21
+ @response = data
22
+
23
+ @name = data['name'] if data['name']
24
+ @location = data['location'] if data['location']
25
+
26
+ # update_games(data['games']) if data['games']
27
+ update_participants(data['participants']) if data['participants']
28
+ self
29
+ end
30
+
31
+ # def games
32
+ # @games_hash.values
33
+ # end
34
+
35
+ # rounds are either bracketed (bracketed) or not (games)
36
+ # def update_games(data)
37
+ # create_data(@games_hash, data, klass: Game, api: @api, season: self)
38
+ # end
39
+
40
+ end
41
+ end
42
+ end
43
+ end
44
+ end
@@ -0,0 +1,41 @@
1
+ module Sportradar
2
+ module Api
3
+ module Basketball
4
+ class Ncaamb
5
+ class Conference < 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
+
17
+ @teams_hash = create_data({}, data["teams"], klass: Team, conference: self, api: @api) # if data["team"]
18
+ end
19
+
20
+ def teams
21
+ @assigned_teams || @teams_hash.values
22
+ end
23
+ def teams=(array)
24
+ @assigned_teams = array
25
+ end
26
+ def team(code_name)
27
+ teams_by_name[code_name]
28
+ end
29
+ private def teams_by_name
30
+ @teams_by_name ||= teams.map { |t| [t.alias, t] }.to_h
31
+ end
32
+ def conferences
33
+ teams.flat_map(&:conferences)
34
+ end
35
+
36
+ end
37
+ end
38
+ end
39
+ end
40
+ end
41
+
@@ -0,0 +1,42 @@
1
+ module Sportradar
2
+ module Api
3
+ module Basketball
4
+ class Ncaamb
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
+ update(data, **opts)
16
+ end
17
+
18
+ def update(data, **opts)
19
+ @conferences_hash = create_data({}, data["conferences"], klass: Conference, division: self, api: @api) if data["conferences"]
20
+ end
21
+
22
+ def conferences
23
+ @conferences_hash.values
24
+ end
25
+
26
+ def conference(code_name)
27
+ conferences_by_name[code_name]
28
+ end
29
+
30
+ def conferences_by_name
31
+ @conferences_by_name ||= conferences.map { |c| [c.alias, c] }.to_h
32
+ end
33
+
34
+ def teams
35
+ conferences.flat_map(&:teams)
36
+ end
37
+
38
+ end
39
+ end
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,75 @@
1
+ module Sportradar
2
+ module Api
3
+ module Basketball
4
+ class Ncaamb
5
+ class Game < Sportradar::Api::Basketball::Game
6
+
7
+ # NCAA MB specific
8
+
9
+ def period_display
10
+ if period > 3
11
+ "#{period - 2}OT"
12
+ elsif period == 3
13
+ 'OT'
14
+ else
15
+ "#{period}H"
16
+ end
17
+ end
18
+
19
+ def team_class
20
+ Team
21
+ end
22
+ def period_class
23
+ Half
24
+ end
25
+
26
+ def period_name
27
+ 'half'
28
+ end
29
+ alias :half :period
30
+ alias :halfs :periods
31
+
32
+ def api
33
+ @api || Sportradar::Api::Basketball::Ncaamb.new
34
+ end
35
+
36
+ def sim!
37
+ @api = api.sim!
38
+ self
39
+ end
40
+
41
+ end
42
+ end
43
+ end
44
+ end
45
+ end
46
+
47
+ __END__
48
+
49
+ ss = sr.schedule;
50
+ sr = Sportradar::Api::Basketball::Ncaamb.new
51
+ gid = "29111b80-992d-4e32-a88d-220fb4bd3121"
52
+ g = Sportradar::Api::Basketball::Ncaamb::Game.new({'id' => gid}, api: sr)
53
+ sd = sr.daily_schedule;
54
+ sd = sr.daily_schedule(Date.new(2017,1,21))
55
+ g = sd.games.detect{ |g| g.id == gid }
56
+ g = sd.games.last;
57
+ box = g.get_box;
58
+ sum = g.get_summary;
59
+ pbp = g.get_pbp;
60
+ g.periods.size
61
+ g.plays.size
62
+
63
+ Sportradar::Api::Basketball::Nba::Team.all.size # => 32 - includes all star teams
64
+
65
+ g1 = sd.games.first;
66
+ sd = sr.schedule;
67
+ sd = sr.daily_schedule;
68
+ sr = Sportradar::Api::Basketball::Nba.new
69
+ sd = sr.daily_schedule(Date.yesterday);
70
+ g = sd.games.last;
71
+ g.get_summary;
72
+ g.get_pbp;
73
+ g.get_box;
74
+ g.scoring
75
+ g.get_pbp; g.changed? :pbp
@@ -0,0 +1,49 @@
1
+ module Sportradar
2
+ module Api
3
+ module Basketball
4
+ class Ncaamb
5
+ class Half < Data
6
+ attr_accessor :response, :id, :game, :number, :sequence, :home_points, :away_points, :drives
7
+ # @all_hash = {}
8
+ # def self.new(data, **opts)
9
+ # existing = @all_hash[data['id']]
10
+ # if existing
11
+ # existing.update(data, **opts)
12
+ # existing
13
+ # else
14
+ # @all_hash[data['id']] = super
15
+ # end
16
+ # end
17
+ # def self.all
18
+ # @all_hash.values
19
+ # end
20
+
21
+ def initialize(data, **opts)
22
+ @response = data
23
+ @api = opts[:api]
24
+ # @game = opts[:game]
25
+
26
+ @id = response["id"]
27
+ @number = response['number']
28
+ @sequence = response['sequence']
29
+
30
+ @plays_hash = {}
31
+
32
+ update(data)
33
+ end
34
+ def update(data, **opts)
35
+ create_data(@plays_hash, data.dig('events'), klass: Play, api: @api, half: self)
36
+ end
37
+
38
+ def plays
39
+ @plays_hash.values
40
+ end
41
+ alias :events :plays
42
+
43
+ private
44
+
45
+ end
46
+ end
47
+ end
48
+ end
49
+ end
@@ -0,0 +1,65 @@
1
+ module Sportradar
2
+ module Api
3
+ module Basketball
4
+ class Ncaamb
5
+ class Hierarchy < Data
6
+ attr_accessor :response, :id, :name, :alias
7
+ def all_attributes
8
+ [:name, :alias, :conferences, :divisions, :teams]
9
+ end
10
+
11
+ def initialize(data, **opts)
12
+ # @response = data
13
+ @api = opts[:api]
14
+
15
+ @id = data.dig('league', 'id')
16
+ @name = data.dig('league', 'name')
17
+ @alias = data.dig('league', 'alias')
18
+
19
+ @divisions_hash = create_data({}, data['divisions'], klass: Division, hierarchy: self, api: @api)
20
+ end
21
+ def divisions
22
+ @divisions_hash.values
23
+ end
24
+ def division(code_name)
25
+ divisions_by_name[code_name]
26
+ end
27
+ private def divisions_by_name
28
+ @divisions_by_name ||= divisions.map { |d| [d.alias, d] }.to_h
29
+ end
30
+ def conferences
31
+ divisions.flat_map(&:conferences)
32
+ end
33
+ def teams
34
+ conferences.flat_map(&:teams)
35
+ end
36
+
37
+ def api
38
+ @api || Sportradar::Api::Basketball::Ncaamb.new
39
+ end
40
+
41
+ end
42
+ end
43
+ end
44
+ end
45
+ end
46
+
47
+ __END__
48
+
49
+ st = sr.standings;
50
+
51
+ st = sr.standings;
52
+ sr = Sportradar::Api::Basketball::Ncaamb.new;
53
+ lh = sr.hierarchy;
54
+ div = lh.division('D1');
55
+ div.teams.count
56
+ div.conferences.count
57
+ div.conferences.first;
58
+ p12 = div.conference('PAC12');
59
+ t = p12.team('ARIZ') # => 'id' => "9b166a3f-e64b-4825-bb6b-92c6f0418263"
60
+ t = div.teams.sample
61
+ res = t.get_roster;
62
+ res = t.get_season_stats;
63
+
64
+ t = lh.teams.first;
65
+ t.venue.id
@@ -0,0 +1,162 @@
1
+ module Sportradar
2
+ module Api
3
+ module Basketball
4
+ class Ncaamb
5
+ class Player < Data
6
+ attr_accessor :response, :id, :number, :full_name, :first_name, :last_name, :position, :birth_place, :college, :height, :weight, :averages, :totals, :draft
7
+ # @all_hash = {}
8
+ # def self.new(data, **opts)
9
+ # existing = @all_hash[data['id']]
10
+ # if existing
11
+ # existing.update(data, **opts)
12
+ # existing
13
+ # else
14
+ # @all_hash[data['id']] = super
15
+ # end
16
+ # end
17
+ # def self.all
18
+ # @all_hash.values
19
+ # end
20
+
21
+
22
+ def initialize(data, **opts)
23
+ @response = data
24
+ @api = opts[:api]
25
+ @team = opts[:team]
26
+
27
+ @id = data["id"]
28
+
29
+ update(data, **opts)
30
+ end
31
+
32
+ def bio
33
+ Bio.new(self)
34
+ end
35
+
36
+ def name # to match api for NFL::Player
37
+ full_name
38
+ end
39
+ def display_name
40
+ full_name
41
+ end
42
+ def jersey
43
+ @jersey_number
44
+ end
45
+
46
+ def birth_date # to match api for NFL::Player
47
+ @birthdate
48
+ end
49
+
50
+ def update(data, **opts)
51
+ @status = data['status'] if data['status'] # "ACT",
52
+ @full_name = data['full_name'] if data['full_name'] # "Festus Ezeli",
53
+ @first_name = data['first_name'] if data['first_name'] # "Festus",
54
+ @last_name = data['last_name'] if data['last_name'] # "Ezeli",
55
+ @abbr_name = data['abbr_name'] if data['abbr_name'] # "F.Ezeli",
56
+ @height = data['height'] if data['height'] # "83",
57
+ @weight = data['weight'] if data['weight'] # "265",
58
+ @position = data['position'] if data['position'] # "C",
59
+ @primary_position = data['primary_position'] if data['primary_position'] # "C",
60
+ @jersey_number = data['jersey_number'] if data['jersey_number'] # "31",
61
+ @experience = data['experience'] if data['experience'] # "3",
62
+ @birth_place = data['birth_place'].gsub(',,', ', ') if data['birth_place'] # "Benin City,, NGA",
63
+ @updated = data['updated'] if data['updated'] # "2016-07-08T12:11:59+00:00",
64
+
65
+
66
+ # NCAA specific below
67
+
68
+ # update_injuries(data)
69
+ # update_draft(data)
70
+
71
+ @team.update_player_stats(self, data['statistics'], opts[:game]) if data['statistics']
72
+ if avgs = data['average']
73
+ @totals = data['total']
74
+ @averages = avgs.except(:player)
75
+ @team.update_player_stats(self, avgs)
76
+ end
77
+
78
+ self
79
+ end
80
+
81
+ def injured?
82
+ # !!(@injury && @injury.out?)
83
+ end
84
+
85
+ def age
86
+ # if birth_date.present?
87
+ # now = Time.now.utc.to_date
88
+ # dob = birth_date.to_date
89
+ # now.year - dob.year - ((now.month > dob.month || (now.month == dob.month && now.day >= dob.day)) ? 0 : 1)
90
+ # end
91
+ end
92
+
93
+ # def stats
94
+ # {
95
+ # "played"=>"true",
96
+ # "active"=>"true",
97
+ # "starter"=>"true",
98
+ # "statistics"=>
99
+ # {"minutes"=>"33:23",
100
+ # "field_goals_made"=>"5",
101
+ # "field_goals_att"=>"11",
102
+ # "field_goals_pct"=>"45.5",
103
+ # "three_points_made"=>"1",
104
+ # "three_points_att"=>"5",
105
+ # "three_points_pct"=>"20.0",
106
+ # "two_points_made"=>"4",
107
+ # "two_points_att"=>"6",
108
+ # "two_points_pct"=>"66.667",
109
+ # "blocked_att"=>"0",
110
+ # "free_throws_made"=>"2",
111
+ # "free_throws_att"=>"2",
112
+ # "free_throws_pct"=>"100.0",
113
+ # "offensive_rebounds"=>"1",
114
+ # "defensive_rebounds"=>"3",
115
+ # "rebounds"=>"4",
116
+ # "assists"=>"6",
117
+ # "turnovers"=>"2",
118
+ # "steals"=>"0",
119
+ # "blocks"=>"0",
120
+ # "assists_turnover_ratio"=>"3.0",
121
+ # "personal_fouls"=>"1",
122
+ # "tech_fouls"=>"0",
123
+ # "flagrant_fouls"=>"0",
124
+ # "pls_min"=>"4",
125
+ # "points"=>"13"}}
126
+ # end
127
+ def update_draft(data)
128
+ # @draft = data['draft'] if data['draft'] # {"team_id"=>"583ec825-fb46-11e1-82cb-f4ce4684ea4c", "year"=>"2012", "round"=>"1", "pick"=>"30"},
129
+ end
130
+ def update_injuries(data)
131
+ # @injury = Injury.new(data['injuries']) if data['injuries']
132
+ # {"injury"=>
133
+ # {"id"=>"06423591-3fc1-4d2b-8c60-a3f30d735345",
134
+ # "comment"=>"Ezeli suffered a setback in his recovery from a procedure on his knee and there is no timetable for his return, according to Jason Quick of csnnw.com.",
135
+ # "desc"=>"Knee",
136
+ # "status"=>"Out",
137
+ # "start_date"=>"2016-10-25",
138
+ # "update_date"=>"2016-11-09"}}}
139
+ end
140
+
141
+ def api
142
+ @api || Sportradar::Api::Basketball::Nba.new
143
+ end
144
+
145
+
146
+ end
147
+ end
148
+ end
149
+ end
150
+ end
151
+
152
+ __END__
153
+
154
+ ss = sr.schedule;
155
+ sr = Sportradar::Api::Basketball::Nba.new
156
+ sd = sr.daily_schedule;
157
+ g = sd.games.last;
158
+ g2 = sd.games.first;
159
+ t = g.home;
160
+ t.get_roster;
161
+ t.players.first
162
+
@@ -0,0 +1,55 @@
1
+ module Sportradar
2
+ module Api
3
+ module Basketball
4
+ class Ncaamb
5
+ class Round < Data
6
+ attr_accessor :response, :id, :name, :location, :start, :end, :sequence
7
+
8
+ def initialize(data, **opts)
9
+ @response = data
10
+ @api = opts[:api]
11
+ @tournament = opts[:tournament]
12
+
13
+ @id = data['id']
14
+
15
+ @games_hash = {}
16
+
17
+ update(data, **opts)
18
+ end
19
+
20
+ def update(data, **opts)
21
+ @response = data
22
+
23
+ @name = data['name'] if data['name']
24
+ @sequence = data['sequence'] if data['sequence']
25
+
26
+ update_games(data['games']) if data['games']
27
+ update_brackets(data['bracketed']) if data['bracketed']
28
+ end
29
+
30
+ def games
31
+ @games_hash.values
32
+ end
33
+
34
+
35
+ def update_games(data)
36
+ create_data(@games_hash, data, klass: Game, api: @api, season: self)
37
+ end
38
+
39
+ def update_brackets(data)
40
+ data.each do |hash|
41
+ create_data(@games_hash, hash['games'], klass: Game, api: @api, round: self, tournament: @tournament)
42
+ # @tournament.update_bracket(data['bracket'].merge('games' => data['games']))
43
+ end
44
+ # hash = {
45
+ # "bracket"=>{"id"=>"fc853dd0-4744-4735-9e16-5953a155dc1c", "name"=>"East Regional", "location"=>"Philadelphia, PA, USA"},
46
+ # 'games' => [],
47
+ # }
48
+
49
+ end
50
+
51
+ end
52
+ end
53
+ end
54
+ end
55
+ end