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.
- checksums.yaml +4 -4
- data/.env.sample +6 -0
- data/.travis.yml +1 -0
- data/Gemfile.lock +32 -30
- data/README.md +12 -9
- data/lib/sportradar/api/baseball/README.md +28 -0
- data/lib/sportradar/api/baseball/error.rb +25 -0
- data/lib/sportradar/api/baseball/event.rb +44 -0
- data/lib/sportradar/api/baseball/events/at_bat.rb +96 -0
- data/lib/sportradar/api/baseball/events/lineup.rb +41 -0
- data/lib/sportradar/api/baseball/events/warming_up.rb +35 -0
- data/lib/sportradar/api/baseball/fielder.rb +26 -0
- data/lib/sportradar/api/baseball/game.rb +472 -0
- data/lib/sportradar/api/baseball/half_inning.rb +69 -0
- data/lib/sportradar/api/baseball/inning.rb +42 -0
- data/lib/sportradar/api/baseball/lineup.rb +116 -0
- data/lib/sportradar/api/baseball/mlb/division.rb +32 -0
- data/lib/sportradar/api/baseball/mlb/hierarchy.rb +273 -0
- data/lib/sportradar/api/baseball/mlb/league.rb +27 -0
- data/lib/sportradar/api/baseball/mlb.rb +84 -0
- data/lib/sportradar/api/baseball/outcome.rb +87 -0
- data/lib/sportradar/api/baseball/pitch.rb +245 -0
- data/lib/sportradar/api/baseball/player.rb +119 -0
- data/lib/sportradar/api/baseball/record.rb +42 -0
- data/lib/sportradar/api/baseball/runner.rb +78 -0
- data/lib/sportradar/api/baseball/scoring.rb +86 -0
- data/lib/sportradar/api/baseball/team.rb +147 -0
- data/lib/sportradar/api/baseball/venue.rb +51 -0
- data/lib/sportradar/api/baseball.rb +46 -0
- data/lib/sportradar/api/basketball/broadcast.rb +15 -0
- data/lib/sportradar/api/basketball/game.rb +339 -0
- data/lib/sportradar/api/basketball/injury.rb +41 -0
- data/lib/sportradar/api/basketball/nba/conference.rb +27 -0
- data/lib/sportradar/api/basketball/nba/division.rb +30 -0
- data/lib/sportradar/api/basketball/nba/game.rb +62 -0
- data/lib/sportradar/api/basketball/nba/hierarchy.rb +47 -0
- data/lib/sportradar/api/basketball/nba/player.rb +160 -0
- data/lib/sportradar/api/basketball/nba/quarter.rb +51 -0
- data/lib/sportradar/api/basketball/nba/schedule.rb +43 -0
- data/lib/sportradar/api/basketball/nba/scoring.rb +15 -0
- data/lib/sportradar/api/basketball/nba/season.rb +54 -0
- data/lib/sportradar/api/basketball/nba/series.rb +82 -0
- data/lib/sportradar/api/basketball/nba/team.rb +74 -0
- data/lib/sportradar/api/basketball/nba.rb +129 -0
- data/lib/sportradar/api/basketball/ncaamb/bracket.rb +44 -0
- data/lib/sportradar/api/basketball/ncaamb/conference.rb +41 -0
- data/lib/sportradar/api/basketball/ncaamb/division.rb +42 -0
- data/lib/sportradar/api/basketball/ncaamb/game.rb +75 -0
- data/lib/sportradar/api/basketball/ncaamb/half.rb +49 -0
- data/lib/sportradar/api/basketball/ncaamb/hierarchy.rb +65 -0
- data/lib/sportradar/api/basketball/ncaamb/player.rb +162 -0
- data/lib/sportradar/api/basketball/ncaamb/round.rb +55 -0
- data/lib/sportradar/api/basketball/ncaamb/schedule.rb +41 -0
- data/lib/sportradar/api/basketball/ncaamb/season.rb +55 -0
- data/lib/sportradar/api/basketball/ncaamb/team.rb +61 -0
- data/lib/sportradar/api/basketball/ncaamb/tournament.rb +154 -0
- data/lib/sportradar/api/basketball/ncaamb.rb +149 -0
- data/lib/sportradar/api/basketball/play.rb +75 -0
- data/lib/sportradar/api/basketball/plays/assist.rb +14 -0
- data/lib/sportradar/api/basketball/plays/base.rb +126 -0
- data/lib/sportradar/api/basketball/plays/block.rb +14 -0
- data/lib/sportradar/api/basketball/plays/clear_path_foul.rb +11 -0
- data/lib/sportradar/api/basketball/plays/deadball.rb +11 -0
- data/lib/sportradar/api/basketball/plays/defensive_three_seconds.rb +11 -0
- data/lib/sportradar/api/basketball/plays/delay.rb +11 -0
- data/lib/sportradar/api/basketball/plays/ejection.rb +14 -0
- data/lib/sportradar/api/basketball/plays/end_period.rb +28 -0
- data/lib/sportradar/api/basketball/plays/flagrant_one.rb +11 -0
- data/lib/sportradar/api/basketball/plays/flagrant_two.rb +11 -0
- data/lib/sportradar/api/basketball/plays/foul.rb +17 -0
- data/lib/sportradar/api/basketball/plays/free_throw_made.rb +23 -0
- data/lib/sportradar/api/basketball/plays/free_throw_miss.rb +25 -0
- data/lib/sportradar/api/basketball/plays/jumpball.rb +12 -0
- data/lib/sportradar/api/basketball/plays/kickball.rb +11 -0
- data/lib/sportradar/api/basketball/plays/lineup_change.rb +11 -0
- data/lib/sportradar/api/basketball/plays/offensive_foul.rb +11 -0
- data/lib/sportradar/api/basketball/plays/official_timeout.rb +11 -0
- data/lib/sportradar/api/basketball/plays/open_inbound.rb +9 -0
- data/lib/sportradar/api/basketball/plays/open_tip.rb +11 -0
- data/lib/sportradar/api/basketball/plays/personal_foul.rb +9 -0
- data/lib/sportradar/api/basketball/plays/rebound.rb +28 -0
- data/lib/sportradar/api/basketball/plays/review.rb +11 -0
- data/lib/sportradar/api/basketball/plays/shooting_foul.rb +9 -0
- data/lib/sportradar/api/basketball/plays/shot_made.rb +22 -0
- data/lib/sportradar/api/basketball/plays/shot_miss.rb +22 -0
- data/lib/sportradar/api/basketball/plays/steal.rb +11 -0
- data/lib/sportradar/api/basketball/plays/team_timeout.rb +14 -0
- data/lib/sportradar/api/basketball/plays/technical_foul.rb +14 -0
- data/lib/sportradar/api/basketball/plays/three_point_made.rb +14 -0
- data/lib/sportradar/api/basketball/plays/three_point_miss.rb +11 -0
- data/lib/sportradar/api/basketball/plays/timeout.rb +24 -0
- data/lib/sportradar/api/basketball/plays/turnover.rb +19 -0
- data/lib/sportradar/api/basketball/plays/tv_timeout.rb +11 -0
- data/lib/sportradar/api/basketball/plays/two_point_made.rb +14 -0
- data/lib/sportradar/api/basketball/plays/two_point_miss.rb +11 -0
- data/lib/sportradar/api/basketball/plays.rb +39 -0
- data/lib/sportradar/api/basketball/record.rb +28 -0
- data/lib/sportradar/api/basketball/scoring.rb +103 -0
- data/lib/sportradar/api/basketball/season.rb +20 -0
- data/lib/sportradar/api/basketball/team.rb +136 -0
- data/lib/sportradar/api/basketball/venue.rb +54 -0
- data/lib/sportradar/api/basketball.rb +35 -0
- data/lib/sportradar/api/{nfl/broadcast.rb → broadcast.rb} +1 -1
- data/lib/sportradar/api/content/article.rb +1 -1
- data/lib/sportradar/api/content/article_list.rb +1 -1
- data/lib/sportradar/api/content.rb +17 -5
- data/lib/sportradar/api/data.rb +53 -0
- data/lib/sportradar/api/football/README.md +62 -0
- data/lib/sportradar/api/football/drive.rb +114 -0
- data/lib/sportradar/api/football/event.rb +36 -0
- data/lib/sportradar/api/football/game.rb +404 -0
- data/lib/sportradar/api/football/game_stats.rb +135 -0
- data/lib/sportradar/api/football/ncaafb/api.rb +81 -0
- data/lib/sportradar/api/football/ncaafb/conference.rb +53 -0
- data/lib/sportradar/api/football/ncaafb/division.rb +42 -0
- data/lib/sportradar/api/football/ncaafb/drive.rb +36 -0
- data/lib/sportradar/api/football/ncaafb/game.rb +130 -0
- data/lib/sportradar/api/football/ncaafb/play.rb +97 -0
- data/lib/sportradar/api/football/ncaafb/player.rb +31 -0
- data/lib/sportradar/api/football/ncaafb/quarter.rb +15 -0
- data/lib/sportradar/api/football/ncaafb/subdivision.rb +43 -0
- data/lib/sportradar/api/football/ncaafb/team.rb +49 -0
- data/lib/sportradar/api/football/ncaafb/week.rb +24 -0
- data/lib/sportradar/api/football/ncaafb.rb +273 -0
- data/lib/sportradar/api/football/nfl/api.rb +76 -0
- data/lib/sportradar/api/football/nfl/conference.rb +35 -0
- data/lib/sportradar/api/football/nfl/depth_chart.rb +53 -0
- data/lib/sportradar/api/football/nfl/division.rb +37 -0
- data/lib/sportradar/api/football/nfl/drive.rb +19 -0
- data/lib/sportradar/api/football/nfl/event.rb +19 -0
- data/lib/sportradar/api/football/nfl/game.rb +77 -0
- data/lib/sportradar/api/football/nfl/league_depth_chart.rb +41 -0
- data/lib/sportradar/api/football/nfl/play.rb +27 -0
- data/lib/sportradar/api/football/nfl/player.rb +31 -0
- data/lib/sportradar/api/football/nfl/quarter.rb +15 -0
- data/lib/sportradar/api/football/nfl/team.rb +42 -0
- data/lib/sportradar/api/football/nfl/team_depth_chart.rb +44 -0
- data/lib/sportradar/api/football/nfl/week.rb +24 -0
- data/lib/sportradar/api/football/nfl.rb +322 -0
- data/lib/sportradar/api/football/play.rb +116 -0
- data/lib/sportradar/api/football/play_statistics.rb +313 -0
- data/lib/sportradar/api/football/player.rb +121 -0
- data/lib/sportradar/api/football/quarter.rb +46 -0
- data/lib/sportradar/api/football/record.rb +48 -0
- data/lib/sportradar/api/football/scoring.rb +92 -0
- data/lib/sportradar/api/football/situation.rb +32 -0
- data/lib/sportradar/api/football/stat_pack/defense.rb +20 -20
- data/lib/sportradar/api/football/stat_pack/extra_points.rb +5 -4
- data/lib/sportradar/api/football/stat_pack/field_goals.rb +6 -5
- data/lib/sportradar/api/football/stat_pack/fumbles.rb +11 -9
- data/lib/sportradar/api/football/stat_pack/kick_returns.rb +8 -7
- data/lib/sportradar/api/football/stat_pack/kickoffs.rb +9 -7
- data/lib/sportradar/api/football/stat_pack/misc_returns.rb +1 -1
- data/lib/sportradar/api/football/stat_pack/passing.rb +13 -11
- data/lib/sportradar/api/football/stat_pack/penalties.rb +2 -2
- data/lib/sportradar/api/football/stat_pack/punt_returns.rb +7 -6
- data/lib/sportradar/api/football/stat_pack/punts.rb +12 -10
- data/lib/sportradar/api/football/stat_pack/receiving.rb +10 -9
- data/lib/sportradar/api/football/stat_pack/rushing.rb +11 -9
- data/lib/sportradar/api/football/stat_pack.rb +7 -3
- data/lib/sportradar/api/football/team.rb +160 -0
- data/lib/sportradar/api/football/venue.rb +25 -0
- data/lib/sportradar/api/football/week.rb +57 -0
- data/lib/sportradar/api/football.rb +47 -0
- data/lib/sportradar/api/images/asset.rb +2 -1
- data/lib/sportradar/api/images/ref.rb +15 -0
- data/lib/sportradar/api/images.rb +51 -9
- data/lib/sportradar/api/mma/event.rb +111 -0
- data/lib/sportradar/api/mma/fight.rb +107 -0
- data/lib/sportradar/api/mma/fighter.rb +95 -0
- data/lib/sportradar/api/mma/judge.rb +70 -0
- data/lib/sportradar/api/mma/league.rb +63 -0
- data/lib/sportradar/api/mma/referee.rb +70 -0
- data/lib/sportradar/api/mma/result.rb +68 -0
- data/lib/sportradar/api/mma/roster.rb +72 -0
- data/lib/sportradar/api/mma/schedule.rb +53 -0
- data/lib/sportradar/api/mma/score.rb +83 -0
- data/lib/sportradar/api/mma/venue.rb +72 -0
- data/lib/sportradar/api/mma.rb +195 -0
- data/lib/sportradar/api/poll.rb +40 -0
- data/lib/sportradar/api/request.rb +40 -8
- data/lib/sportradar/api/soccer/schedule.rb +1 -0
- data/lib/sportradar/api/version.rb +1 -1
- data/lib/sportradar/api.rb +20 -34
- metadata +157 -34
- data/lib/sportradar/api/nfl/.play_statistics.rb.swo +0 -0
- data/lib/sportradar/api/nfl/changelog.rb +0 -17
- data/lib/sportradar/api/nfl/coach.rb +0 -17
- data/lib/sportradar/api/nfl/conference.rb +0 -16
- data/lib/sportradar/api/nfl/depth_chart.rb +0 -47
- data/lib/sportradar/api/nfl/division.rb +0 -16
- data/lib/sportradar/api/nfl/draft.rb +0 -16
- data/lib/sportradar/api/nfl/drive.rb +0 -73
- data/lib/sportradar/api/nfl/event.rb +0 -19
- data/lib/sportradar/api/nfl/franchise.rb +0 -14
- data/lib/sportradar/api/nfl/game.rb +0 -94
- data/lib/sportradar/api/nfl/game_statistic.rb +0 -133
- data/lib/sportradar/api/nfl/hierarchy.rb +0 -19
- data/lib/sportradar/api/nfl/injury.rb +0 -16
- data/lib/sportradar/api/nfl/league_depth_chart.rb +0 -26
- data/lib/sportradar/api/nfl/play.rb +0 -39
- data/lib/sportradar/api/nfl/play_statistics.rb +0 -247
- data/lib/sportradar/api/nfl/player.rb +0 -49
- data/lib/sportradar/api/nfl/position.rb +0 -14
- data/lib/sportradar/api/nfl/quarter.rb +0 -29
- data/lib/sportradar/api/nfl/scoring.rb +0 -25
- data/lib/sportradar/api/nfl/season.rb +0 -23
- data/lib/sportradar/api/nfl/situation.rb +0 -18
- data/lib/sportradar/api/nfl/statistic.rb +0 -28
- data/lib/sportradar/api/nfl/summary.rb +0 -17
- data/lib/sportradar/api/nfl/team.rb +0 -56
- data/lib/sportradar/api/nfl/team_depth_chart.rb +0 -44
- data/lib/sportradar/api/nfl/venue.rb +0 -22
- data/lib/sportradar/api/nfl/week.rb +0 -16
- 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
|