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,70 @@
1
+ module Sportradar
2
+ module Api
3
+ class Mma
4
+ class Referee < Data
5
+ attr_accessor :response, :id, :first_name, :last_name
6
+ @all_hash = {}
7
+ def self.new(data, **opts)
8
+ existing = @all_hash[data['id']]
9
+ if existing
10
+ existing.update(data, **opts)
11
+ existing.add_fight(opts[:fight])
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
+ @roster = opts[:roster]
25
+ @fights_hash = {}
26
+
27
+ @id = data['id']
28
+
29
+ update(data)
30
+ end
31
+
32
+ def fights
33
+ @fights_hash.values
34
+ end
35
+ def add_fight(fight)
36
+ @fights_hash[fight.id] = fight if fight
37
+ end
38
+
39
+
40
+ def update(data, **opts)
41
+ @first_name = data['first_name'] if data['first_name'] # "Sai",
42
+ @last_name = data['last_name'] if data['last_name'] # "The Boss",
43
+
44
+ self
45
+ end
46
+
47
+ def api
48
+ @api ||= Sportradar::Api::Mma.new
49
+ end
50
+
51
+ end
52
+ end
53
+ end
54
+ end
55
+
56
+ __END__
57
+
58
+
59
+ m = Sportradar::Api::Mma.new
60
+ sr = m.participants;
61
+ f = sr.fighters.sample;
62
+
63
+
64
+ m = Sportradar::Api::Mma.new
65
+ sc = m.schedule;
66
+ e = sc.events.sample;
67
+ e.fights.first.fighters.first.born
68
+
69
+ fighter_hash = {'id' => "259117dc-c443-4086-8c1d-abd082e3d4b9" } # => Conor McGregor
70
+ f = Sportradar::Api::Mma::Fighter.new(fighter_hash)
@@ -0,0 +1,68 @@
1
+ module Sportradar
2
+ module Api
3
+ class Mma
4
+ class Result < Data
5
+ attr_accessor :response, :id, :round, :time, :outcome, :submission, :endstrike, :endtarget, :endposition, :winner, :draw
6
+
7
+ def initialize(data, **opts)
8
+ @response = data
9
+ @api = opts[:api]
10
+ @fight = opts[:fight]
11
+ @scores_hash = {}
12
+
13
+
14
+ update(data)
15
+ end
16
+
17
+ def scores
18
+ @scores_hash.values
19
+ end
20
+ def add_score(score)
21
+ @scores_hash[score.id] = score if score
22
+ end
23
+
24
+
25
+ def update(data, **opts)
26
+ @round = data['round'] if data['round'] # "3",
27
+ @time = data['time'] if data['time'] # "05:00",
28
+ @outcome = data['method'] if data['method'] # "Decision - Split",
29
+ @submission = data['submission'] if data['submission'] # "",
30
+ @endstrike = data['endstrike'] if data['endstrike'] # "",
31
+ @endtarget = data['endtarget'] if data['endtarget'] # "",
32
+ @endposition = data['endposition'] if data['endposition'] # "",
33
+ @winner = data['winner'] if data['winner'] # "3043fe6a-1f8b-4aa7-85fe-8f8859740cc4",
34
+ @draw = data['draw'] if data['draw'] # "false",
35
+
36
+ update_scores(data)
37
+ self
38
+ end
39
+ def update_scores(data)
40
+ return if String === data['scores']
41
+ create_data(@scores_hash, data.dig('scores', 'judge'), klass: Score, api: api, result: self)
42
+ # @judges = Judge.new(data['judges'], fight: self, api: api) if data['judges']
43
+ end
44
+
45
+ def api
46
+ @api ||= Sportradar::Api::Mma.new
47
+ end
48
+
49
+ end
50
+ end
51
+ end
52
+ end
53
+
54
+ __END__
55
+
56
+
57
+ m = Sportradar::Api::Mma.new
58
+ sr = m.participants;
59
+ f = sr.fighters.sample;
60
+
61
+
62
+ m = Sportradar::Api::Mma.new
63
+ sc = m.schedule;
64
+ e = sc.events.sample;
65
+ e.fights.first.fighters.first.born
66
+
67
+ fighter_hash = {'id' => "259117dc-c443-4086-8c1d-abd082e3d4b9" } # => Conor McGregor
68
+ f = Sportradar::Api::Mma::Fighter.new(fighter_hash)
@@ -0,0 +1,72 @@
1
+ module Sportradar
2
+ module Api
3
+ class Mma
4
+ class Roster < Data
5
+ attr_accessor :response, :id, :name, :scheduled, :venue
6
+
7
+ def initialize(data, **opts)
8
+ @response = data
9
+ @api = opts[:api]
10
+
11
+ @generated = response['generated']
12
+
13
+ @fighters_hash = {}
14
+ @referees_hash = {}
15
+ @judges_hash = {}
16
+
17
+ update(data)
18
+ end
19
+
20
+ def fighters
21
+ @fighters_hash ||= update_fighters(response)
22
+ @fighters_hash.values
23
+ end
24
+ def referees
25
+ @referees_hash ||= update_referees(response)
26
+ @referees_hash.values
27
+ end
28
+ def judges
29
+ @judges_hash ||= update_judges(response)
30
+ @judges_hash.values
31
+ end
32
+
33
+ def update(data)
34
+ # update_fighters(data)
35
+ # update_referees(data)
36
+ # update_judges(data)
37
+
38
+ self
39
+ end
40
+
41
+ def update_fighters(data)
42
+ create_data(@fighters_hash, response.dig('fighters', 'fighter'), klass: Fighter, api: api, roster: self)
43
+ end
44
+ def update_referees(data)
45
+ create_data(@referees_hash, response.dig('referees', 'referee'), klass: Referee, api: api, roster: self)
46
+ end
47
+ def update_judges(data)
48
+ create_data(@judges_hash, response.dig('judges', 'judge'), klass: Judge, api: api, roster: self)
49
+ end
50
+ def api
51
+ @api ||= Sportradar::Api::Mma.new
52
+ end
53
+
54
+ end
55
+ end
56
+ end
57
+ end
58
+
59
+ __END__
60
+
61
+ m = Sportradar::Api::Mma.new
62
+ sr = m.participants;
63
+
64
+
65
+ sc = m.schedule;
66
+ sc.events.size
67
+ e = sc.events.last;
68
+ e.venue.events.size
69
+
70
+ Sportradar::Api::Mma::Schedule.new({}, api: m)
71
+ Sportradar::Api::Mma::Schedule.new
72
+
@@ -0,0 +1,53 @@
1
+ module Sportradar
2
+ module Api
3
+ class Mma
4
+ class Schedule < Data
5
+ attr_accessor :response, :id, :name, :scheduled, :venue
6
+
7
+ def initialize(data, **opts)
8
+ @response = data
9
+ @api = opts[:api]
10
+
11
+ @generated = response['generated']
12
+ @events_hash = {}
13
+ update(data)
14
+ end
15
+
16
+ def events
17
+ @events_hash ||= update_events(response)
18
+ @events_hash.values
19
+ end
20
+
21
+ def update(data)
22
+ update_events(data)
23
+
24
+ self
25
+ end
26
+
27
+ def update_events(data)
28
+ create_data(@events_hash, response.dig('events', 'event'), klass: Event, api: api, schedule: self)
29
+ end
30
+ def api
31
+ @api ||= Sportradar::Api::Mma.new
32
+ end
33
+
34
+
35
+ KEYS_SCHED = ["id", "name", "scheduled", "venue", "league", "fights"]
36
+
37
+ end
38
+ end
39
+ end
40
+ end
41
+
42
+ __END__
43
+
44
+ m = Sportradar::Api::Mma.new
45
+ sc = m.schedule;
46
+ se = m.events;
47
+ sc.events.size
48
+ e = sc.events.last;
49
+ e.venue.events.size
50
+
51
+ Sportradar::Api::Mma::Schedule.new({}, api: m)
52
+ Sportradar::Api::Mma::Schedule.new
53
+
@@ -0,0 +1,83 @@
1
+ module Sportradar
2
+ module Api
3
+ class Mma
4
+ class Score < Data
5
+ attr_accessor :response, :id, :first_name, :last_name, :winner_score, :loser_score
6
+ # @all_hash = {}
7
+ # def self.new(data, **opts)
8
+ # existing = @all_hash[data['id']]
9
+ # if existing
10
+ # existing.update(data, **opts)
11
+ # existing.add_fight(opts[:fight])
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
+ @result = opts[:result]
25
+
26
+ @id = data['id']
27
+
28
+ update(data)
29
+ end
30
+
31
+ def fights
32
+ @fights_hash.values
33
+ end
34
+ def add_fight(fight)
35
+ @fights_hash[fight.id] = fight if fight
36
+ end
37
+
38
+
39
+ def update(data, **opts)
40
+ @first_name = data['first_name'] if data['first_name']
41
+ @last_name = data['last_name'] if data['last_name']
42
+ @winner_score = data['winner_score'] if data['winner_score']
43
+ @loser_score = data['loser_score'] if data['loser_score']
44
+
45
+ self
46
+ end
47
+
48
+ # def path_base
49
+ # "participants/#{ id }"
50
+ # end
51
+ # def path_profile
52
+ # "#{ path_base }/profile"
53
+ # end
54
+
55
+ # def get_profile
56
+ # data = api.get_data(path_profile)['profile'].dig('fighters', 'fighter')
57
+ # update(data)
58
+ # self
59
+ # end
60
+ def api
61
+ @api ||= Sportradar::Api::Mma.new
62
+ end
63
+
64
+ end
65
+ end
66
+ end
67
+ end
68
+
69
+ __END__
70
+
71
+
72
+ m = Sportradar::Api::Mma.new
73
+ sr = m.participants;
74
+ f = sr.fighters.sample;
75
+
76
+
77
+ m = Sportradar::Api::Mma.new
78
+ sc = m.schedule;
79
+ e = sc.events.sample;
80
+ e.fights.first.fighters.first.born
81
+
82
+ fighter_hash = {'id' => "259117dc-c443-4086-8c1d-abd082e3d4b9" } # => Conor McGregor
83
+ f = Sportradar::Api::Mma::Fighter.new(fighter_hash)
@@ -0,0 +1,72 @@
1
+ module Sportradar
2
+ module Api
3
+ class Mma
4
+ class Venue < Data
5
+ attr_accessor :response, :id, :name, :address, :city, :state, :country, :zip, :capacity, :timezone
6
+ @all_hash = {}
7
+ def self.new(data, **opts)
8
+ existing = @all_hash[data['name']]
9
+ if existing
10
+ existing.update(data)
11
+ existing.add_event(opts[:event])
12
+ existing
13
+ else
14
+ @all_hash[data['name']] = 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
+ @event = opts[:event]
25
+ @events_hash = {}
26
+
27
+ @id = data['id']
28
+
29
+ update(data)
30
+ end
31
+
32
+ def events
33
+ @events_hash.values
34
+ end
35
+ def add_event(event)
36
+ @events_hash[event.id] = event if event
37
+ end
38
+
39
+ def update(data, **opts)
40
+ @name = data['name']
41
+ @country_code = data['country_code']
42
+ @country = data['country']
43
+ @state = data['state']
44
+ @city = data['city']
45
+
46
+ @id = @name + ', ' + @city
47
+
48
+ self
49
+ end
50
+
51
+ def add_event(event)
52
+ @events << event if event
53
+ end
54
+ def api
55
+ @api ||= Sportradar::Api::Mma.new
56
+ end
57
+
58
+
59
+ KEYS_SCHED = ["id", "name", "scheduled", "venue", "league", "fights"]
60
+
61
+ end
62
+ end
63
+ end
64
+ end
65
+
66
+ __END__
67
+
68
+ m = Sportradar::Api::Mma.new
69
+ sc = m.schedule;
70
+ sc.events.size
71
+ e = sc.events.last;
72
+ e.venue.events.size
@@ -0,0 +1,195 @@
1
+ module Sportradar
2
+ module Api
3
+ class Mma < Request
4
+ attr_accessor :league, :access_level, :simulation, :error
5
+
6
+ def initialize(access_level = 't')
7
+ @league = 'mma'
8
+ raise Sportradar::Api::Error::InvalidAccessLevel unless allowed_access_levels.include? access_level
9
+ @access_level = access_level
10
+ end
11
+
12
+ def schedule
13
+ response = get request_url("schedule")
14
+ if response.success? && response['schedule']
15
+ Sportradar::Api::Mma::Schedule.new(response['schedule'], api: self)
16
+ else
17
+ @error = response
18
+ end
19
+ end
20
+
21
+ def participants
22
+ response = get request_url("profiles")
23
+ if response.success? && response['profile']
24
+ Sportradar::Api::Mma::Roster.new(response['profile'], api: self)
25
+ else
26
+ @error = response
27
+ end
28
+ end
29
+
30
+ def statistics(event_id = "8f85ecc5-0d4d-470b-b357-075cc7e7bedd")
31
+ event_hash = {"id" => event_id } # => UFC 205 - McGregor/Alvarez
32
+ event = Event.new({ 'id' => event_id })
33
+ event.get_stats
34
+ end
35
+ def generate_simulation_event(event_id = "8f85ecc5-0d4d-470b-b357-075cc7e7bedd")
36
+ event = Event.new({ 'id' => event_id })
37
+ i = 0
38
+ base_path = "simulations/mma/#{event_id}"
39
+ FileUtils.mkdir_p(base_path)
40
+ loop do
41
+ t = Time.now
42
+ print "#{t}: Data pull #{i+=1}\r"
43
+ res = event.get_stats.body
44
+ File.write("#{base_path}/#{t.to_i}.xml", res)
45
+ wait = (t.to_i + 60 - Time.now.to_i)
46
+ wait.times do |j|
47
+ print "#{t}: Data pull #{i} complete, #{wait - j} seconds until next.\r"
48
+ sleep 1
49
+ end
50
+ puts
51
+ end
52
+ end
53
+
54
+ # def roster(team_id, year = Date.today.year, season = "reg")
55
+ # Team.new(team_id).tap { |team| team.roster }
56
+ # end
57
+
58
+
59
+ # def weekly_depth_charts(week = 1, year = Date.today.year, season = "reg" )
60
+ # response = get request_url("seasontd/#{ week_path(year, season, week) }/depth_charts")
61
+ # Sportradar::Api::Nfl::LeagueDepthChart.new response
62
+ # end
63
+
64
+ # def weekly_injuries(week = 1, year = Date.today.year, season = "reg")
65
+ # response = get request_url("seasontd/#{ week_path(year, season, week) }/injuries")
66
+ # Sportradar::Api::Nfl::Season.new response["season"] if response.success? && response["season"]
67
+ # end
68
+
69
+ # # gid = '8494fbf9-fe96-4d6d-81b2-5ed32347676f'
70
+ # # past_game_id = "0141a0a5-13e5-4b28-b19f-0c3923aaef6e"
71
+ # # future_game_id = "28290722-4ceb-4a4c-a4e5-1f9bec7283b3"
72
+ # def game_boxscore(game_id)
73
+ # check_simulation(game_id)
74
+ # response = get request_url("games/#{ game_id }/boxscore")
75
+ # Sportradar::Api::Nfl::Game.new response["game"] if response.success? && response["game"] # mostly done, just missing play statistics
76
+ # end
77
+
78
+ # def game_roster(game_id)
79
+ # check_simulation(game_id)
80
+ # response = get request_url("games/#{ game_id }/roster")
81
+ # Sportradar::Api::Nfl::Game.new response["game"] if response.success? && response["game"]
82
+ # end
83
+
84
+ # def game_statistics(game_data)
85
+ # # check_simulation(game_id)
86
+ # base = "#{ year }/#{ mma_season }/#{ mma_season_week }/#{ away_team}/#{ home_team }/statistics"
87
+ # response = get_data(base)
88
+ # Sportradar::Api::Nfl::Game.new response["game"] if response.success? && response["game"]
89
+ # ## Need to properly implement statistics
90
+ # end
91
+
92
+ # def play_by_play(game_id)
93
+ # check_simulation(game_id)
94
+ # response = get request_url("games/#{ game_id }/pbp")
95
+ # Sportradar::Api::Nfl::Game.new response["game"] if response.success? && response["game"]
96
+ # # need to get into quarters, drives, plays, stats more still
97
+ # end
98
+
99
+ # # player_id = "ede260be-5ae6-4a06-887b-e4a130932705"
100
+ # def player_profile(player_id)
101
+ # response = get request_url("players/#{ player_id }/profile")
102
+ # Sportradar::Api::Nfl::Player.new response["player"] if response.success? && response["player"]
103
+ # end
104
+
105
+ # # team_id = "97354895-8c77-4fd4-a860-32e62ea7382a"
106
+ # def seasonal_statistics(team_id, year = Date.today.year, season = "reg")
107
+ # raise Sportradar::Api::Error::InvalidLeague unless allowed_seasons.include? season
108
+ # response = get request_url("seasontd/#{ year }/#{ season }/teams/#{ team_id }/statistics")
109
+ # Sportradar::Api::Nfl::Season.new response["season"] if response.success? && response["season"]
110
+ # # TODO: Object map team & player records - statistics
111
+ # end
112
+
113
+ # def team_profile(team_id)
114
+ # response = get request_url("teams/#{ team_id }/profile")
115
+ # Sportradar::Api::Nfl::Team.new response["team"] if response.success? && response["team"]
116
+ # end
117
+
118
+ # def league_hierarchy
119
+ # response = get request_url("league/hierarchy")
120
+ # Sportradar::Api::Nfl::Hierarchy.new response["league"] if response.success? && response["league"]
121
+ # end
122
+
123
+ # def standings(year = Date.today.year)
124
+ # response = get request_url("seasontd/#{ year }/standings")
125
+ # Sportradar::Api::Nfl::Season.new response["season"] if response.success? && response["season"]
126
+ # # TODO Needs implement rankings/records/stats on team
127
+ # end
128
+
129
+ # def daily_change_log(date = Date.today)
130
+ # response = get request_url("league/#{date_path(date)}/changes")
131
+ # Sportradar::Api::Nfl::Changelog.new response["league"]["changelog"] if response.success? && response["league"] && response["league"]["changelog"]
132
+ # end
133
+
134
+ # def simulation_games
135
+ # [
136
+ # # "f45b4a31-b009-4039-8394-42efbc6d5532",
137
+ # # "5a7042cb-fe7a-4838-b93f-6b8c167ec384",
138
+ # # "7f761bb5-7963-43ea-a01b-baf4f5d50fe3"
139
+ # ]
140
+ # end
141
+
142
+ # def active_simulation
143
+ # game = simulation_games.lazy.map {|game_id| game_boxscore game_id }.find{ |game| game.status == 'inprogress'}
144
+ # if game
145
+ # puts "Live Game: #{game.summary.home.full_name} vs #{game.summary.away.full_name}. Q#{game.quarter} #{game.clock}. game_id='#{game.id}'"
146
+ # game
147
+ # else
148
+ # puts "No active simulation"
149
+ # end
150
+ # end
151
+
152
+ def get_data(url)
153
+ get request_url(url)
154
+ end
155
+
156
+ private
157
+
158
+ # def check_simulation(game_id)
159
+ # @simulation = true if simulation_games.include?(game_id)
160
+ # end
161
+
162
+ def request_url(path)
163
+ "/mma-#{access_level}#{version}/#{path}"
164
+ end
165
+
166
+ def api_key
167
+ if access_level != 't'
168
+ Sportradar::Api.api_key_params('mma', 'production')
169
+ else
170
+ Sportradar::Api.api_key_params('mma')
171
+ end
172
+ end
173
+
174
+ def version
175
+ Sportradar::Api.version('mma')
176
+ end
177
+
178
+ def allowed_access_levels
179
+ %w[p t]
180
+ end
181
+
182
+ end
183
+ end
184
+ end
185
+
186
+ __END__
187
+
188
+ sr = Sportradar::Api::Mma.new
189
+ ss = sr.schedule;
190
+ sp = sr.participants;
191
+
192
+ ss.games.count
193
+ ss.weeks.count
194
+ ss.weeks.first.response['game'].count
195
+
@@ -0,0 +1,40 @@
1
+ module Sportradar
2
+ module Api
3
+ class Rank
4
+ def initialize(data)
5
+ @id = data['id']
6
+ @name = data['name']
7
+ @market = data['market']
8
+ @rank = data['rank']
9
+ @wins = data['wins']
10
+ @losses = data['losses']
11
+ @prev_rank = data['prev_rank']
12
+ @points = data['points'] || data['votes']
13
+ @fp_votes = data['fp_votes'].to_i
14
+ if data['rpi']
15
+ @rpi = data
16
+ end
17
+ end
18
+ end
19
+ class Poll
20
+ def initialize(data)
21
+ @response = data
22
+
23
+ @id = data.dig('poll', 'id')
24
+ @name = data.dig('poll', 'name')
25
+ @alias = data.dig('poll', 'alias')
26
+ @week = data['week']
27
+ @year = data['year']
28
+ @time = data['effective_date']
29
+
30
+ update(data)
31
+ end
32
+ def update(data)
33
+ @ranked = data['rankings'].map { |h| Rank.new(h) }
34
+ if @alias == 'AP' || @alias == 'US'
35
+ @votes = data['candidates'].map.with_index(@ranked.size + 1) { |h, i| Rank.new(h.merge('rank' => i)) }
36
+ end
37
+ end
38
+ end
39
+ end
40
+ end