sportradar-api 0.9.24 → 0.9.25

Sign up to get free protection for your applications and to get access to all the features.
Files changed (90) hide show
  1. checksums.yaml +4 -4
  2. data/.env.sample +1 -1
  3. data/Gemfile.lock +2 -2
  4. data/README.md +1 -1
  5. data/lib/sportradar/api.rb +23 -1
  6. data/lib/sportradar/api/basketball.rb +21 -0
  7. data/lib/sportradar/api/basketball/bio.rb +33 -0
  8. data/lib/sportradar/api/basketball/broadcast.rb +15 -0
  9. data/lib/sportradar/api/basketball/nba.rb +123 -0
  10. data/lib/sportradar/api/basketball/nba/conference.rb +27 -0
  11. data/lib/sportradar/api/basketball/nba/division.rb +29 -0
  12. data/lib/sportradar/api/basketball/nba/game.rb +263 -0
  13. data/lib/sportradar/api/basketball/nba/hierarchy.rb +46 -0
  14. data/lib/sportradar/api/basketball/nba/overview.rb +64 -0
  15. data/lib/sportradar/api/basketball/nba/player.rb +146 -0
  16. data/lib/sportradar/api/basketball/nba/quarter.rb +51 -0
  17. data/lib/sportradar/api/basketball/nba/record.rb +34 -0
  18. data/lib/sportradar/api/basketball/nba/schedule.rb +32 -0
  19. data/lib/sportradar/api/basketball/nba/scoring.rb +89 -0
  20. data/lib/sportradar/api/basketball/nba/season.rb +42 -0
  21. data/lib/sportradar/api/basketball/nba/team.rb +166 -0
  22. data/lib/sportradar/api/basketball/overview.rb +74 -0
  23. data/lib/sportradar/api/basketball/play.rb +65 -0
  24. data/lib/sportradar/api/basketball/plays.rb +38 -0
  25. data/lib/sportradar/api/basketball/plays/assist.rb +11 -0
  26. data/lib/sportradar/api/basketball/plays/base.rb +88 -0
  27. data/lib/sportradar/api/basketball/plays/block.rb +11 -0
  28. data/lib/sportradar/api/basketball/plays/clear_path_foul.rb +9 -0
  29. data/lib/sportradar/api/basketball/plays/defensive_three_seconds.rb +8 -0
  30. data/lib/sportradar/api/basketball/plays/delay.rb +9 -0
  31. data/lib/sportradar/api/basketball/plays/ejection.rb +9 -0
  32. data/lib/sportradar/api/basketball/plays/end_period.rb +15 -0
  33. data/lib/sportradar/api/basketball/plays/flagrant_one.rb +9 -0
  34. data/lib/sportradar/api/basketball/plays/flagrant_two.rb +9 -0
  35. data/lib/sportradar/api/basketball/plays/foul.rb +14 -0
  36. data/lib/sportradar/api/basketball/plays/free_throw_made.rb +20 -0
  37. data/lib/sportradar/api/basketball/plays/free_throw_miss.rb +20 -0
  38. data/lib/sportradar/api/basketball/plays/jumpball.rb +9 -0
  39. data/lib/sportradar/api/basketball/plays/kickball.rb +9 -0
  40. data/lib/sportradar/api/basketball/plays/lineup_change.rb +9 -0
  41. data/lib/sportradar/api/basketball/plays/offensive_foul.rb +9 -0
  42. data/lib/sportradar/api/basketball/plays/official_timeout.rb +9 -0
  43. data/lib/sportradar/api/basketball/plays/open_inbound.rb +9 -0
  44. data/lib/sportradar/api/basketball/plays/open_tip.rb +9 -0
  45. data/lib/sportradar/api/basketball/plays/personal_foul.rb +9 -0
  46. data/lib/sportradar/api/basketball/plays/rebound.rb +15 -0
  47. data/lib/sportradar/api/basketball/plays/review.rb +8 -0
  48. data/lib/sportradar/api/basketball/plays/shooting_foul.rb +9 -0
  49. data/lib/sportradar/api/basketball/plays/shot_made.rb +21 -0
  50. data/lib/sportradar/api/basketball/plays/shot_miss.rb +21 -0
  51. data/lib/sportradar/api/basketball/plays/steal.rb +11 -0
  52. data/lib/sportradar/api/basketball/plays/team_timeout.rb +9 -0
  53. data/lib/sportradar/api/basketball/plays/technical_foul.rb +11 -0
  54. data/lib/sportradar/api/basketball/plays/three_point_made.rb +11 -0
  55. data/lib/sportradar/api/basketball/plays/three_point_miss.rb +8 -0
  56. data/lib/sportradar/api/basketball/plays/timeout.rb +15 -0
  57. data/lib/sportradar/api/basketball/plays/turnover.rb +16 -0
  58. data/lib/sportradar/api/basketball/plays/tv_timeout.rb +9 -0
  59. data/lib/sportradar/api/basketball/plays/two_point_made.rb +11 -0
  60. data/lib/sportradar/api/basketball/plays/two_point_miss.rb +8 -0
  61. data/lib/sportradar/api/basketball/profile.rb +48 -0
  62. data/lib/sportradar/api/basketball/season.rb +20 -0
  63. data/lib/sportradar/api/basketball/venue.rb +53 -0
  64. data/lib/sportradar/api/data.rb +42 -0
  65. data/lib/sportradar/api/mma.rb +195 -0
  66. data/lib/sportradar/api/mma/event.rb +111 -0
  67. data/lib/sportradar/api/mma/fight.rb +107 -0
  68. data/lib/sportradar/api/mma/fighter.rb +95 -0
  69. data/lib/sportradar/api/mma/judge.rb +70 -0
  70. data/lib/sportradar/api/mma/league.rb +63 -0
  71. data/lib/sportradar/api/mma/referee.rb +70 -0
  72. data/lib/sportradar/api/mma/result.rb +68 -0
  73. data/lib/sportradar/api/mma/roster.rb +72 -0
  74. data/lib/sportradar/api/mma/schedule.rb +53 -0
  75. data/lib/sportradar/api/mma/score.rb +83 -0
  76. data/lib/sportradar/api/mma/venue.rb +72 -0
  77. data/lib/sportradar/api/ncaafb.rb +185 -0
  78. data/lib/sportradar/api/ncaafb/drive.rb +89 -0
  79. data/lib/sportradar/api/ncaafb/game.rb +161 -0
  80. data/lib/sportradar/api/ncaafb/play.rb +39 -0
  81. data/lib/sportradar/api/ncaafb/player.rb +61 -0
  82. data/lib/sportradar/api/ncaafb/quarter.rb +37 -0
  83. data/lib/sportradar/api/ncaafb/season.rb +71 -0
  84. data/lib/sportradar/api/ncaafb/team.rb +69 -0
  85. data/lib/sportradar/api/ncaafb/week.rb +33 -0
  86. data/lib/sportradar/api/nfl.rb +6 -0
  87. data/lib/sportradar/api/nfl/conference.rb +2 -1
  88. data/lib/sportradar/api/request.rb +1 -0
  89. data/lib/sportradar/api/version.rb +1 -1
  90. metadata +81 -2
@@ -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, :event, :name, :country_code, :country, :state, :city
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,185 @@
1
+ module Sportradar
2
+ module Api
3
+ class Ncaafb < Request
4
+ attr_accessor :league, :access_level, :simulation, :error
5
+
6
+ def initialize(access_level = 't')
7
+ @league = 'ncaafb'
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("#{ year }/#{ season }/schedule")
15
+ # response = self.class.get 'http://developer.sportradar.us/files/ncaafb_v1_season_schedule_example.xml'
16
+ if response.success? && response['season']
17
+ Sportradar::Api::Ncaafb::Season.new(response['season'], api: self)
18
+ else
19
+ @error = response
20
+ end
21
+ end
22
+
23
+ def weekly_schedule(week = 1, year = Date.today.year, season = "reg")
24
+ response = get request_url("#{ week_path(year, season, week) }/schedule")
25
+ # response = self.class.get 'http://developer.sportradar.us/files/NFL_Official_Weekly_Schedule_Sample.xml'
26
+ if response.success? && response['games']
27
+ Sportradar::Api::Ncaafb::Week.new(response['games'], api: self)
28
+ else
29
+ @error = response
30
+ end
31
+ end
32
+
33
+ def roster(team_id, year = Date.today.year, season = "reg")
34
+ Team.new(team_id).tap { |team| team.roster }
35
+ end
36
+
37
+
38
+ # def weekly_depth_charts(week = 1, year = Date.today.year, season = "reg" )
39
+ # response = get request_url("seasontd/#{ week_path(year, season, week) }/depth_charts")
40
+ # Sportradar::Api::Nfl::LeagueDepthChart.new response
41
+ # end
42
+
43
+ # def weekly_injuries(week = 1, year = Date.today.year, season = "reg")
44
+ # response = get request_url("seasontd/#{ week_path(year, season, week) }/injuries")
45
+ # Sportradar::Api::Nfl::Season.new response["season"] if response.success? && response["season"]
46
+ # end
47
+
48
+ # # gid = '8494fbf9-fe96-4d6d-81b2-5ed32347676f'
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
+ # Sportradar::Api::Nfl::Game.new response["game"] if response.success? && response["game"] # mostly done, just missing play statistics
55
+ # end
56
+
57
+ # def game_roster(game_id)
58
+ # check_simulation(game_id)
59
+ # response = get request_url("games/#{ game_id }/roster")
60
+ # Sportradar::Api::Nfl::Game.new response["game"] if response.success? && response["game"]
61
+ # end
62
+
63
+ def game_statistics(game_data)
64
+ # check_simulation(game_id)
65
+ base = "#{ year }/#{ ncaafb_season }/#{ ncaafb_season_week }/#{ away_team}/#{ home_team }/statistics"
66
+ response = get_data(base)
67
+ Sportradar::Api::Nfl::Game.new response["game"] if response.success? && response["game"]
68
+ ## Need to properly implement statistics
69
+ end
70
+
71
+ # def play_by_play(game_id)
72
+ # check_simulation(game_id)
73
+ # response = get request_url("games/#{ game_id }/pbp")
74
+ # Sportradar::Api::Nfl::Game.new response["game"] if response.success? && response["game"]
75
+ # # need to get into quarters, drives, plays, stats more still
76
+ # end
77
+
78
+ # # player_id = "ede260be-5ae6-4a06-887b-e4a130932705"
79
+ # def player_profile(player_id)
80
+ # response = get request_url("players/#{ player_id }/profile")
81
+ # Sportradar::Api::Nfl::Player.new response["player"] if response.success? && response["player"]
82
+ # end
83
+
84
+ # # team_id = "97354895-8c77-4fd4-a860-32e62ea7382a"
85
+ # def seasonal_statistics(team_id, year = Date.today.year, season = "reg")
86
+ # raise Sportradar::Api::Error::InvalidLeague unless allowed_seasons.include? season
87
+ # response = get request_url("seasontd/#{ year }/#{ season }/teams/#{ team_id }/statistics")
88
+ # Sportradar::Api::Nfl::Season.new response["season"] if response.success? && response["season"]
89
+ # # TODO: Object map team & player records - statistics
90
+ # end
91
+
92
+ # def team_profile(team_id)
93
+ # response = get request_url("teams/#{ team_id }/profile")
94
+ # Sportradar::Api::Nfl::Team.new response["team"] if response.success? && response["team"]
95
+ # end
96
+
97
+ # def league_hierarchy
98
+ # response = get request_url("league/hierarchy")
99
+ # Sportradar::Api::Nfl::Hierarchy.new response["league"] if response.success? && response["league"]
100
+ # end
101
+
102
+ # def standings(year = Date.today.year)
103
+ # response = get request_url("seasontd/#{ year }/standings")
104
+ # Sportradar::Api::Nfl::Season.new response["season"] if response.success? && response["season"]
105
+ # # TODO Needs implement rankings/records/stats on team
106
+ # end
107
+
108
+ # def daily_change_log(date = Date.today)
109
+ # response = get request_url("league/#{date_path(date)}/changes")
110
+ # Sportradar::Api::Nfl::Changelog.new response["league"]["changelog"] if response.success? && response["league"] && response["league"]["changelog"]
111
+ # end
112
+
113
+ # def simulation_games
114
+ # [
115
+ # # "f45b4a31-b009-4039-8394-42efbc6d5532",
116
+ # # "5a7042cb-fe7a-4838-b93f-6b8c167ec384",
117
+ # # "7f761bb5-7963-43ea-a01b-baf4f5d50fe3"
118
+ # ]
119
+ # end
120
+
121
+ # def active_simulation
122
+ # game = simulation_games.lazy.map {|game_id| game_boxscore game_id }.find{ |game| game.status == 'inprogress'}
123
+ # if game
124
+ # puts "Live Game: #{game.summary.home.full_name} vs #{game.summary.away.full_name}. Q#{game.quarter} #{game.clock}. game_id='#{game.id}'"
125
+ # game
126
+ # else
127
+ # puts "No active simulation"
128
+ # end
129
+ # end
130
+
131
+ def get_data(url)
132
+ get request_url(url)
133
+ end
134
+
135
+ def get_pbp(*args)
136
+ 'pbp'
137
+ end
138
+
139
+ private
140
+
141
+ def check_simulation(game_id)
142
+ @simulation = true if simulation_games.include?(game_id)
143
+ end
144
+
145
+ def request_url(path)
146
+ if simulation
147
+ # "/nfl-sim1/#{path}"
148
+ else
149
+ "/ncaafb-#{access_level}#{version}/#{path}"
150
+ end
151
+ end
152
+
153
+ def api_key
154
+ if access_level != 't'
155
+ Sportradar::Api.api_key_params('ncaafb', 'production')
156
+ else
157
+ Sportradar::Api.api_key_params('ncaafb')
158
+ end
159
+ end
160
+
161
+ def version
162
+ Sportradar::Api.version('ncaafb')
163
+ end
164
+
165
+ def allowed_access_levels
166
+ %w[rt p s b t]
167
+ end
168
+
169
+ def allowed_seasons
170
+ ["pre", "reg", "pst"]
171
+ end
172
+ end
173
+ end
174
+ end
175
+
176
+ __END__
177
+
178
+ sr = Sportradar::Api::Ncaafb.new
179
+ sw = sr.weekly_schedule;
180
+ ss = sr.schedule;
181
+
182
+ ss.games.count
183
+ ss.weeks.count
184
+ ss.weeks.first.response['game'].count
185
+