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,62 @@
1
+ module Sportradar
2
+ module Api
3
+ module Basketball
4
+ class Nba
5
+ class Game < Sportradar::Api::Basketball::Game
6
+
7
+ # NBA specific
8
+
9
+ def team_class
10
+ Team
11
+ end
12
+ def period_class
13
+ Quarter
14
+ end
15
+
16
+ def period_name
17
+ 'quarter'
18
+ end
19
+ alias :quarter :period
20
+ alias :quarters :periods
21
+
22
+ def api
23
+ @api || Sportradar::Api::Basketball::Nba.new
24
+ end
25
+
26
+ def sim!
27
+ @api = api.sim!
28
+ self
29
+ end
30
+
31
+ end
32
+ end
33
+ end
34
+ end
35
+ end
36
+
37
+ __END__
38
+
39
+ ss = sr.schedule;
40
+ sd = sr.daily_schedule;
41
+ sr = Sportradar::Api::Basketball::Nba.new
42
+ sd = sr.daily_schedule(Date.yesterday);
43
+ sd = sr.daily_schedule(Date.new(2017, 1, 20));
44
+ g = sd.games.first;
45
+ box = g.get_box;
46
+ pbp = g.get_pbp;
47
+ g.quarters.size
48
+ g.plays.size
49
+
50
+ Sportradar::Api::Basketball::Nba::Team.all.size # => 32 - includes all star teams
51
+
52
+ g1 = sd.games.first;
53
+ sd = sr.schedule;
54
+ sd = sr.daily_schedule;
55
+ sr = Sportradar::Api::Basketball::Nba.new
56
+ sd = sr.daily_schedule(Date.yesterday);
57
+ g = sd.games.last;
58
+ g.get_summary;
59
+ g.get_pbp;
60
+ g.get_box;
61
+ g.scoring
62
+ g.get_pbp; g.changed? :pbp
@@ -0,0 +1,47 @@
1
+ module Sportradar
2
+ module Api
3
+ module Basketball
4
+ class Nba
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
+ @season = Season.new(data['season']) if data['season']
19
+ @conferences_hash = create_data({}, data['conferences'], klass: Conference, hierarchy: self, api: @api)
20
+ end
21
+ def conferences
22
+ @conferences_hash.values
23
+ end
24
+ def divisions
25
+ conferences.flat_map(&:divisions)
26
+ end
27
+ def teams
28
+ divisions.flat_map(&:teams)
29
+ end
30
+
31
+ def api
32
+ @api || Sportradar::Api::Basketball::Nba.new
33
+ end
34
+
35
+ end
36
+ end
37
+ end
38
+ end
39
+ end
40
+
41
+ __END__
42
+
43
+ st = sr.standings;
44
+ sr = Sportradar::Api::Basketball::Nba.new
45
+ lh = sr.league_hierarchy;
46
+ t = lh.teams.first;
47
+ t.venue.id
@@ -0,0 +1,160 @@
1
+ module Sportradar
2
+ module Api
3
+ module Basketball
4
+ class Nba
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 name # to match api for NFL::Player
33
+ full_name
34
+ end
35
+ def display_name
36
+ full_name
37
+ end
38
+ def jersey
39
+ @jersey_number
40
+ end
41
+
42
+ def birth_date # to match api for NFL::Player
43
+ @birthdate
44
+ end
45
+
46
+ def update(data, **opts)
47
+ @status = data['status'] if data['status'] # "ACT",
48
+ @full_name = data['full_name'] if data['full_name'] # "Festus Ezeli",
49
+ @first_name = data['first_name'] if data['first_name'] # "Festus",
50
+ @last_name = data['last_name'] if data['last_name'] # "Ezeli",
51
+ @abbr_name = data['abbr_name'] if data['abbr_name'] # "F.Ezeli",
52
+ @height = data['height'] if data['height'] # "83",
53
+ @weight = data['weight'] if data['weight'] # "265",
54
+ @position = data['position'] if data['position'] # "C",
55
+ @primary_position = data['primary_position'] if data['primary_position'] # "C",
56
+ @jersey_number = data['jersey_number'] if data['jersey_number'] # "31",
57
+ @experience = data['experience'] if data['experience'] # "3",
58
+ @birth_place = data['birth_place'].gsub(',,', ', ') if data['birth_place'] # "Benin City,, NGA",
59
+ @updated = data['updated'] if data['updated'] # "2016-07-08T12:11:59+00:00",
60
+
61
+ # NBA specific below
62
+
63
+ @college = data['college'] if data['college'] # "Vanderbilt",
64
+ @birthdate = data['birthdate'] if data['birthdate'] # "1989-10-21",
65
+
66
+ update_injuries(data)
67
+ update_draft(data)
68
+
69
+ @team.update_player_stats(self, data['statistics'], opts[:game]) if data['statistics']
70
+ if avgs = data['average']
71
+ @totals = data['total']
72
+ @averages = avgs.except(:player)
73
+ @team.update_player_stats(self, avgs)
74
+ end
75
+
76
+ self
77
+ end
78
+
79
+ def injured?
80
+ !!(@injury && @injury.out?)
81
+ end
82
+
83
+ def age
84
+ if birth_date.present?
85
+ now = Time.now.utc.to_date
86
+ dob = birth_date.to_date
87
+ now.year - dob.year - ((now.month > dob.month || (now.month == dob.month && now.day >= dob.day)) ? 0 : 1)
88
+ end
89
+ end
90
+
91
+ # def stats
92
+ # {
93
+ # "played"=>"true",
94
+ # "active"=>"true",
95
+ # "starter"=>"true",
96
+ # "statistics"=>
97
+ # {"minutes"=>"33:23",
98
+ # "field_goals_made"=>"5",
99
+ # "field_goals_att"=>"11",
100
+ # "field_goals_pct"=>"45.5",
101
+ # "three_points_made"=>"1",
102
+ # "three_points_att"=>"5",
103
+ # "three_points_pct"=>"20.0",
104
+ # "two_points_made"=>"4",
105
+ # "two_points_att"=>"6",
106
+ # "two_points_pct"=>"66.667",
107
+ # "blocked_att"=>"0",
108
+ # "free_throws_made"=>"2",
109
+ # "free_throws_att"=>"2",
110
+ # "free_throws_pct"=>"100.0",
111
+ # "offensive_rebounds"=>"1",
112
+ # "defensive_rebounds"=>"3",
113
+ # "rebounds"=>"4",
114
+ # "assists"=>"6",
115
+ # "turnovers"=>"2",
116
+ # "steals"=>"0",
117
+ # "blocks"=>"0",
118
+ # "assists_turnover_ratio"=>"3.0",
119
+ # "personal_fouls"=>"1",
120
+ # "tech_fouls"=>"0",
121
+ # "flagrant_fouls"=>"0",
122
+ # "pls_min"=>"4",
123
+ # "points"=>"13"}}
124
+ # end
125
+ def update_draft(data)
126
+ @draft = data['draft'] if data['draft'] # {"team_id"=>"583ec825-fb46-11e1-82cb-f4ce4684ea4c", "year"=>"2012", "round"=>"1", "pick"=>"30"},
127
+ end
128
+ def update_injuries(data)
129
+ @injury = Injury.new(data['injuries']) if data['injuries']
130
+ # {"injury"=>
131
+ # {"id"=>"06423591-3fc1-4d2b-8c60-a3f30d735345",
132
+ # "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.",
133
+ # "desc"=>"Knee",
134
+ # "status"=>"Out",
135
+ # "start_date"=>"2016-10-25",
136
+ # "update_date"=>"2016-11-09"}}}
137
+ end
138
+
139
+ def api
140
+ @api || Sportradar::Api::Basketball::Nba.new
141
+ end
142
+
143
+
144
+ end
145
+ end
146
+ end
147
+ end
148
+ end
149
+
150
+ __END__
151
+
152
+ ss = sr.schedule;
153
+ sr = Sportradar::Api::Basketball::Nba.new
154
+ sd = sr.daily_schedule;
155
+ g = sd.games.last;
156
+ g2 = sd.games.first;
157
+ t = g.home;
158
+ t.get_roster;
159
+ t.players.first
160
+
@@ -0,0 +1,51 @@
1
+ module Sportradar
2
+ module Api
3
+ module Basketball
4
+ class Nba
5
+ class Quarter < 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, quarter: self)
36
+ # rescue => e
37
+ # binding.pry
38
+ end
39
+
40
+ def plays
41
+ @plays_hash.values
42
+ end
43
+ alias :events :plays
44
+
45
+ private
46
+
47
+ end
48
+ end
49
+ end
50
+ end
51
+ end
@@ -0,0 +1,43 @@
1
+ module Sportradar
2
+ module Api
3
+ module Basketball
4
+ class Nba
5
+ class Schedule < Data
6
+ attr_accessor :response, :id, :name, :alias, :date
7
+
8
+ def initialize(data, **opts)
9
+ @response = data
10
+ @api = opts[:api]
11
+
12
+ # binding.pry
13
+ # ['league']
14
+ @id = data.dig('league', 'id')
15
+ @name = data.dig('league', 'name')
16
+ @alias = data.dig('league', 'alias')
17
+ @date = data.dig('date')
18
+
19
+ @games_hash = {}
20
+ update_games(data.dig('games'))
21
+ end
22
+
23
+ def games
24
+ @games_hash.values
25
+ end
26
+
27
+ def update_games(data)
28
+ create_data(@games_hash, data, klass: Game, api: @api, season: self)
29
+ end
30
+
31
+ end
32
+ end
33
+ end
34
+ end
35
+ end
36
+
37
+ __END__
38
+
39
+ sr = Sportradar::Api::Basketball::Nba.new
40
+ sd = sr.daily_schedule(Date.new(2017, 1, 21));
41
+ g = sd.games.sample
42
+
43
+ ss = sr.schedule;
@@ -0,0 +1,15 @@
1
+ # module Sportradar
2
+ # module Api
3
+ # module Basketball
4
+ # class Nba
5
+ # class Scoring < Sportradar::Api::Basketball::Game
6
+
7
+ # private def period_name
8
+ # 'quarter'
9
+ # end
10
+
11
+ # end
12
+ # end
13
+ # end
14
+ # end
15
+ # end
@@ -0,0 +1,54 @@
1
+ module Sportradar
2
+ module Api
3
+ module Basketball
4
+ class Nba
5
+ class Season < Basketball::Season
6
+ attr_accessor :response, :id, :name, :alias, :year
7
+
8
+ def initialize(data, **opts)
9
+ @response = data
10
+ @api = opts[:api]
11
+
12
+ @id = data.dig('league', 'id')
13
+ @name = data.dig('league', 'name')
14
+ @alias = data.dig('league', 'alias')
15
+
16
+ @year = data.dig('season', 'year')
17
+ @type = data.dig('season', 'type')
18
+
19
+ @games_hash = {}
20
+ @series_hash = {}
21
+
22
+ update_games(data['games']) if data['games']
23
+ update_series(data['series']) if data['series']
24
+ end
25
+
26
+ def games
27
+ @games_hash.values
28
+ end
29
+
30
+ def update_games(data)
31
+ create_data(@games_hash, data, klass: Game, api: @api, season: self)
32
+ end
33
+
34
+ def series
35
+ @series_hash.values
36
+ end
37
+
38
+ def update_series(data)
39
+ create_data(@series_hash, data, klass: Series, api: @api, season: self)
40
+ end
41
+
42
+ end
43
+ end
44
+ end
45
+ end
46
+ end
47
+
48
+ __END__
49
+
50
+ sd = sr.daily_schedule;
51
+ sr = Sportradar::Api::Basketball::Nba.new
52
+ ss = sr.standings;
53
+ ss = sr.schedule;
54
+ ss = sr.schedule(2015, 'pst)');
@@ -0,0 +1,82 @@
1
+ module Sportradar
2
+ module Api
3
+ module Basketball
4
+ class Nba
5
+ class Series < Basketball::Season
6
+ attr_accessor :response, :id, :status, :title, :round, :start_date
7
+ alias :name :title
8
+
9
+ def initialize(data, **opts)
10
+ @response = data
11
+ @api = opts[:api]
12
+
13
+ @id = data['id']
14
+ @games_hash = {}
15
+ @participants_hash = {}
16
+
17
+ update(data, **opts)
18
+ end
19
+
20
+ def update(data, **opts)
21
+ @title = data['title'] if data['title']
22
+ @round = data['round'] if data['round']
23
+ @status = data['status'] if data['status']
24
+ @start_date = data['start_date'] if data['start_date']
25
+
26
+
27
+ update_participants(data['participants']) if data['participants']
28
+ update_games(data['games']) if data['games']
29
+ end
30
+
31
+ def games
32
+ @games_hash.values
33
+ end
34
+
35
+ def update_games(data)
36
+ create_data(@games_hash, data, klass: Game, api: @api, series: self)
37
+ end
38
+
39
+ def participants
40
+ @participants_hash.values
41
+ end
42
+
43
+ def update_participants(data)
44
+ data.map! { |hash| hash.merge!(hash.delete('team') || {}) }
45
+ create_data(@participants_hash, data, klass: Team, api: @api, series: self)
46
+ end
47
+
48
+ def scheduled
49
+ games.first&.scheduled
50
+ end
51
+
52
+ # status helpers
53
+ def future?
54
+ ['scheduled', 'delayed', 'created', 'time-tbd'].include? status
55
+ end
56
+ def started?
57
+ ['inprogress', 'halftime', 'delayed'].include? status
58
+ end
59
+ def finished?
60
+ ['complete', 'closed'].include? status
61
+ end
62
+ def completed?
63
+ 'complete' == status
64
+ end
65
+ def closed?
66
+ 'closed' == status
67
+ end
68
+
69
+ end
70
+ end
71
+ end
72
+ end
73
+ end
74
+
75
+ __END__
76
+
77
+ sd = sr.daily_schedule;
78
+ sr = Sportradar::Api::Basketball::Nba.new
79
+ sr.series_schedule
80
+ ss = sr.standings;
81
+ ss = sr.schedule;
82
+ ss = sr.schedule(2015, 'pst)');
@@ -0,0 +1,74 @@
1
+ module Sportradar
2
+ module Api
3
+ module Basketball
4
+ class Nba
5
+ class Team < Sportradar::Api::Basketball::Team
6
+
7
+
8
+ @all_hash = {}
9
+ def self.new(data, **opts)
10
+ existing = @all_hash[data['id']]
11
+ if existing
12
+ existing.update(data, **opts)
13
+ existing
14
+ else
15
+ # unless data['id']
16
+ # data.merge!(data.delete('team')) if data['team']
17
+ # end
18
+ @all_hash[data['id']] = super
19
+ end
20
+ end
21
+ def self.all
22
+ @all_hash.values
23
+ end
24
+
25
+ def player_class
26
+ Player
27
+ end
28
+
29
+ def api
30
+ @api || Sportradar::Api::Basketball::Nba.new
31
+ end
32
+
33
+ def handle_names(data)
34
+ # need to do some more work here
35
+ @name = data['name'] if data['name']
36
+ if data['name'] && !data.key?('market')
37
+ @full_name = data['name']
38
+ if @full_name.split.size > 1
39
+ if @full_name.include? 'Blazers'
40
+ @market = 'Portland'
41
+ @name = 'Trail Blazers'
42
+ @full_name = 'Portland Trail Blazers'
43
+ else
44
+ @market = @full_name.split[0..-2].join(' ')
45
+ @name = @full_name.split.last
46
+ end
47
+ end
48
+ elsif data['name'] && data['market']
49
+ @market = data['market']
50
+ @full_name = [@market, data['name']].join(' ')
51
+ end
52
+ end
53
+
54
+ end
55
+ end
56
+ end
57
+ end
58
+ end
59
+
60
+ __END__
61
+ ss = sr.schedule;
62
+ sd = sr.daily_schedule;
63
+ sr = Sportradar::Api::Basketball::Nba.new
64
+ lh = sr.league_hierarchy;
65
+ t = lh.teams.first;
66
+ ss = t.get_season_stats;
67
+ g = sd.games.last;
68
+ t = g.home;
69
+ Sportradar::Api::Basketball::Nba::Team.all.size
70
+
71
+
72
+ # week_count = ss.weeks.count;
73
+ # w1 = ss.weeks.first;
74
+ # w1 = ss.weeks(1);