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
|
@@ -13,3 +13,50 @@ require "sportradar/api/football/stat_pack/punt_returns"
|
|
|
13
13
|
require "sportradar/api/football/stat_pack/punts"
|
|
14
14
|
require "sportradar/api/football/stat_pack/receiving"
|
|
15
15
|
require "sportradar/api/football/stat_pack/rushing"
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
require "sportradar/api/football/team"
|
|
19
|
+
require "sportradar/api/football/venue"
|
|
20
|
+
require "sportradar/api/football/record"
|
|
21
|
+
require "sportradar/api/football/player"
|
|
22
|
+
require "sportradar/api/football/week"
|
|
23
|
+
require "sportradar/api/football/scoring"
|
|
24
|
+
require "sportradar/api/football/game_stats"
|
|
25
|
+
require "sportradar/api/football/play_statistics"
|
|
26
|
+
require "sportradar/api/football/game"
|
|
27
|
+
require "sportradar/api/football/quarter"
|
|
28
|
+
require "sportradar/api/football/drive"
|
|
29
|
+
require "sportradar/api/football/play"
|
|
30
|
+
require "sportradar/api/football/situation"
|
|
31
|
+
require "sportradar/api/football/event"
|
|
32
|
+
|
|
33
|
+
require "sportradar/api/football/ncaafb"
|
|
34
|
+
require "sportradar/api/football/ncaafb/api"
|
|
35
|
+
require "sportradar/api/football/ncaafb/week"
|
|
36
|
+
require "sportradar/api/football/ncaafb/division"
|
|
37
|
+
require "sportradar/api/football/ncaafb/conference"
|
|
38
|
+
require "sportradar/api/football/ncaafb/subdivision"
|
|
39
|
+
require "sportradar/api/football/ncaafb/team"
|
|
40
|
+
require "sportradar/api/football/ncaafb/game"
|
|
41
|
+
require "sportradar/api/football/ncaafb/quarter"
|
|
42
|
+
require "sportradar/api/football/ncaafb/drive"
|
|
43
|
+
require "sportradar/api/football/ncaafb/play"
|
|
44
|
+
require "sportradar/api/football/ncaafb/player"
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
require "sportradar/api/football/nfl"
|
|
48
|
+
require "sportradar/api/football/nfl/api"
|
|
49
|
+
require "sportradar/api/football/nfl/week"
|
|
50
|
+
require "sportradar/api/football/nfl/division"
|
|
51
|
+
require "sportradar/api/football/nfl/conference"
|
|
52
|
+
require "sportradar/api/football/nfl/team"
|
|
53
|
+
require "sportradar/api/football/nfl/league_depth_chart"
|
|
54
|
+
require "sportradar/api/football/nfl/team_depth_chart"
|
|
55
|
+
require "sportradar/api/football/nfl/depth_chart"
|
|
56
|
+
require "sportradar/api/football/nfl/game"
|
|
57
|
+
require "sportradar/api/football/nfl/quarter"
|
|
58
|
+
require "sportradar/api/football/nfl/drive"
|
|
59
|
+
require "sportradar/api/football/nfl/event"
|
|
60
|
+
require "sportradar/api/football/nfl/play"
|
|
61
|
+
require "sportradar/api/football/nfl/player"
|
|
62
|
+
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
module Sportradar
|
|
2
2
|
module Api
|
|
3
3
|
class Images::Asset < Data
|
|
4
|
-
attr_accessor :response, :id, :player_id, :created, :updated, :title, :description, :copyright, :links, :tags
|
|
4
|
+
attr_accessor :response, :id, :player_id, :created, :updated, :title, :description, :copyright, :links, :tags, :refs
|
|
5
5
|
|
|
6
6
|
def initialize(data)
|
|
7
7
|
@response = data
|
|
@@ -14,6 +14,7 @@ module Sportradar
|
|
|
14
14
|
@copyright = data["copyright"]
|
|
15
15
|
@links = parse_into_array(selector: response["links"]["link"], klass: Sportradar::Api::Images::Link) if response["links"] && response["links"]["link"]
|
|
16
16
|
@tags = parse_into_array(selector: response["tags"]["tag"], klass: Sportradar::Api::Images::Tag) if response["tags"] && response["tags"]["tag"]
|
|
17
|
+
@refs = parse_into_array(selector: response["refs"]["ref"], klass: Sportradar::Api::Images::Ref) if response["refs"] && response["refs"]["ref"]
|
|
17
18
|
end
|
|
18
19
|
|
|
19
20
|
end
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
module Sportradar
|
|
2
|
+
module Api
|
|
3
|
+
class Images::Ref < Data
|
|
4
|
+
attr_accessor :response, :sportradar_id, :sportsdata_id, :type, :name
|
|
5
|
+
def initialize(data)
|
|
6
|
+
@response = data
|
|
7
|
+
@sportradar_id = data["sportradar_id"]
|
|
8
|
+
@sportsdata_id = data["sportsdata_id"]
|
|
9
|
+
@type = data["type"]
|
|
10
|
+
@name = data["name"]
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
@@ -1,21 +1,28 @@
|
|
|
1
1
|
module Sportradar
|
|
2
2
|
module Api
|
|
3
3
|
class Images < Request
|
|
4
|
-
attr_accessor :sport, :league, :access_level, :nfl_premium
|
|
5
|
-
def initialize( sport, access_level: 't', league: nil, nfl_premium: false)
|
|
4
|
+
attr_accessor :sport, :league, :access_level, :nfl_premium, :usat_premium, :event_id, :date, :live_image_request
|
|
5
|
+
def initialize( sport, access_level: 't', league: nil, nfl_premium: false, usat_premium: false, event_id: nil, date: nil )
|
|
6
6
|
raise Sportradar::Api::Error::InvalidSport unless allowed_sports.include? sport
|
|
7
7
|
@sport = sport
|
|
8
8
|
raise Sportradar::Api::Error::InvalidLeague unless soccer_leagues.include?(league) || league.nil?
|
|
9
9
|
@league = league
|
|
10
10
|
@nfl_premium = nfl_premium
|
|
11
|
+
@usat_premium = usat_premium
|
|
12
|
+
@event_id = event_id
|
|
13
|
+
@date = date.strftime("%Y/%m/%d") if date.present?
|
|
11
14
|
raise Sportradar::Api::Error::InvalidAccessLevel unless allowed_access_levels.include? access_level
|
|
12
15
|
@access_level = access_level
|
|
13
16
|
end
|
|
14
17
|
|
|
15
18
|
def player_manifests(year = Date.today.year)
|
|
16
19
|
if league
|
|
17
|
-
|
|
18
|
-
|
|
20
|
+
if year != Date.today.year
|
|
21
|
+
response = get request_url("#{league}/#{image_type}/players/#{year}/manifest")
|
|
22
|
+
else
|
|
23
|
+
response = get request_url("#{league}/#{image_type}/players/manifest")
|
|
24
|
+
end
|
|
25
|
+
elsif nfl_premium || usat_premium
|
|
19
26
|
response = get request_url("#{image_type}/players/#{year}/manifest")
|
|
20
27
|
else
|
|
21
28
|
response = get request_url("players/#{image_type}/manifests/all_assets")
|
|
@@ -43,7 +50,11 @@ module Sportradar
|
|
|
43
50
|
|
|
44
51
|
def venue_manifests
|
|
45
52
|
raise Sportradar::Api::Error::InvalidLeague unless league.nil?
|
|
46
|
-
|
|
53
|
+
if version == 3
|
|
54
|
+
response = get request_url("venues/manifest")
|
|
55
|
+
else
|
|
56
|
+
response = get request_url("venues/manifests/all_assets")
|
|
57
|
+
end
|
|
47
58
|
if response.success? && response["assetlist"]
|
|
48
59
|
Sportradar::Api::Images::AssetList.new response["assetlist"]
|
|
49
60
|
else
|
|
@@ -52,8 +63,29 @@ module Sportradar
|
|
|
52
63
|
end
|
|
53
64
|
alias_method :all_venues, :venue_manifests
|
|
54
65
|
|
|
66
|
+
# Event manifests will respont to either date or event_id
|
|
67
|
+
def event_manifests
|
|
68
|
+
# /[league]/[image_type]/events/[year]/[month]/[day]/manifest.[format]?api_key={your_api_key}
|
|
69
|
+
raise Sportradar::Api::Error::InvalidType unless date.present? || event_id.present?
|
|
70
|
+
@live_image_request = true
|
|
71
|
+
if event_id.present?
|
|
72
|
+
response = get request_url("actionshots/events/game/#{event_id}/manifest")
|
|
73
|
+
elsif date.present?
|
|
74
|
+
response = get request_url("actionshots/events/#{date}/manifest")
|
|
75
|
+
end
|
|
76
|
+
if response.success? && response["assetlist"]
|
|
77
|
+
Sportradar::Api::Images::AssetList.new response["assetlist"]
|
|
78
|
+
else
|
|
79
|
+
response
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
end
|
|
83
|
+
alias_method :all_events, :event_manifests
|
|
84
|
+
alias_method :live_images, :event_manifests
|
|
85
|
+
|
|
55
86
|
# The Player Images, Coach Images, Venue Images APIs aren't really meant to be used directly, the manifests return an href path of an image we can pass it into the image_url method to get the entire image url
|
|
56
87
|
def image_url(href)
|
|
88
|
+
@live_image_request = true if href.include?('actionshots')
|
|
57
89
|
href.slice!(0) if href.chars.first == '/' # remove initial '/'
|
|
58
90
|
set_base request_url(href) + api_key_query_string
|
|
59
91
|
end
|
|
@@ -80,6 +112,14 @@ module Sportradar
|
|
|
80
112
|
Sportradar::Api.api_key_params("images_nfl_official_premium", "production")
|
|
81
113
|
elsif nfl_premium
|
|
82
114
|
Sportradar::Api.api_key_params("images_nfl_official_premium")
|
|
115
|
+
elsif sport == 'mlb' && usat_premium && access_level == 'p'
|
|
116
|
+
Sportradar::Api.api_key_params("images_mlb_premium", "production")
|
|
117
|
+
elsif sport == 'mlb' && usat_premium
|
|
118
|
+
Sportradar::Api.api_key_params("images_mlb_premium")
|
|
119
|
+
elsif live_image_request && access_level == 'p'
|
|
120
|
+
Sportradar::Api.api_key_params("live_images_#{sport}", "production")
|
|
121
|
+
elsif live_image_request
|
|
122
|
+
Sportradar::Api.api_key_params("live_images_#{sport}")
|
|
83
123
|
elsif access_level == 'p'
|
|
84
124
|
Sportradar::Api.api_key_params("images_#{sport}", "production")
|
|
85
125
|
else
|
|
@@ -95,15 +135,17 @@ module Sportradar
|
|
|
95
135
|
def provider
|
|
96
136
|
if nfl_premium
|
|
97
137
|
'ap_premium'
|
|
138
|
+
elsif usat_premium
|
|
139
|
+
'usat_premium'
|
|
98
140
|
elsif uses_v2_api?
|
|
99
141
|
'usat'
|
|
100
142
|
elsif uses_v3_api?
|
|
101
|
-
'reuters'
|
|
143
|
+
sport == 'mlb' ? 'usat' : 'reuters'
|
|
102
144
|
end
|
|
103
145
|
end
|
|
104
146
|
|
|
105
147
|
def version
|
|
106
|
-
if uses_v3_api? || nfl_premium
|
|
148
|
+
if uses_v3_api? || nfl_premium || usat_premium
|
|
107
149
|
3
|
|
108
150
|
elsif uses_v2_api?
|
|
109
151
|
Sportradar::Api.version('images')
|
|
@@ -131,11 +173,11 @@ module Sportradar
|
|
|
131
173
|
end
|
|
132
174
|
|
|
133
175
|
def v2_api_sports
|
|
134
|
-
['golf',
|
|
176
|
+
['golf', 'nascar', 'nba', 'nfl', 'nhl', 'ncaafb', 'ncaamb', 'mls']
|
|
135
177
|
end
|
|
136
178
|
|
|
137
179
|
def v3_api_sports
|
|
138
|
-
['soccer', 'cricket', 'f1', 'rugby', 'tennis']
|
|
180
|
+
['mlb', 'soccer', 'cricket', 'f1', 'rugby', 'tennis']
|
|
139
181
|
end
|
|
140
182
|
|
|
141
183
|
def soccer_leagues
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
module Sportradar
|
|
2
|
+
module Api
|
|
3
|
+
class Mma
|
|
4
|
+
class Event < Data
|
|
5
|
+
attr_accessor :response, :id, :name, :scheduled, :venue, :league
|
|
6
|
+
|
|
7
|
+
def initialize(data, **opts)
|
|
8
|
+
@response = data
|
|
9
|
+
@api = opts[:api]
|
|
10
|
+
@fights_hash = {}
|
|
11
|
+
@updated_at = Time.now
|
|
12
|
+
|
|
13
|
+
@id = response['id']
|
|
14
|
+
@name = response['name']
|
|
15
|
+
update(data)
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def fights
|
|
19
|
+
@fights_hash.values
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def update(data)
|
|
23
|
+
@scheduled = Time.parse(data["scheduled"]) if data["scheduled"]
|
|
24
|
+
@venue = Venue.new(data['venue'], event: self, api: api) if data['venue']
|
|
25
|
+
@league = League.new(data['league'], event: self, api: api) if data['league']
|
|
26
|
+
update_fights(data)
|
|
27
|
+
|
|
28
|
+
self
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def update_fights(data)
|
|
32
|
+
return if String === data['fights']
|
|
33
|
+
create_data(@fights_hash, data.dig('fights', 'fight'), klass: Fight, api: api, event: self)
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
def path_base
|
|
38
|
+
"events/#{ id }"
|
|
39
|
+
end
|
|
40
|
+
def path_stats
|
|
41
|
+
"#{ path_base }/summary"
|
|
42
|
+
end
|
|
43
|
+
# def path_pbp
|
|
44
|
+
# "#{ path_base }/pbp"
|
|
45
|
+
# end
|
|
46
|
+
|
|
47
|
+
def get_stats
|
|
48
|
+
res = api.get_data(path_stats)
|
|
49
|
+
data = res['summary']
|
|
50
|
+
@updated_at = data['generated']
|
|
51
|
+
update(data.dig('events', 'event'))
|
|
52
|
+
res
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
def api
|
|
56
|
+
@api ||= Sportradar::Api::Mma.new
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
# def get_pbp
|
|
61
|
+
# data = api.get_data(path_pbp)['game']
|
|
62
|
+
# update(data)
|
|
63
|
+
# @quarter = data['quarter'].first
|
|
64
|
+
# @pbp = set_pbp(data['quarter'][1..-1])
|
|
65
|
+
# end
|
|
66
|
+
|
|
67
|
+
# def set_pbp(data)
|
|
68
|
+
# @quarters = parse_into_array_with_options(selector: data, klass: self.parent::Quarter, api: api, game: self)
|
|
69
|
+
# @plays = nil # to clear empty array empty
|
|
70
|
+
# @quarters
|
|
71
|
+
# end
|
|
72
|
+
|
|
73
|
+
KEYS_SCHED = ["id", "name", "scheduled", "venue", "league", "fights"]
|
|
74
|
+
|
|
75
|
+
end
|
|
76
|
+
end
|
|
77
|
+
end
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
__END__
|
|
81
|
+
|
|
82
|
+
m = Sportradar::Api::Mma.new
|
|
83
|
+
sc = m.schedule;
|
|
84
|
+
e = sc.events.sample;
|
|
85
|
+
e = sc.events.first;
|
|
86
|
+
e = sc.events.last;
|
|
87
|
+
|
|
88
|
+
|
|
89
|
+
|
|
90
|
+
m = Sportradar::Api::Mma.new
|
|
91
|
+
sr = m.participants;
|
|
92
|
+
e = sc.events.sample;
|
|
93
|
+
f = sr.fighters.sample;
|
|
94
|
+
f.fights.size
|
|
95
|
+
sc = m.schedule;
|
|
96
|
+
f.fights.size
|
|
97
|
+
f.fights.first
|
|
98
|
+
f.fights.first.event
|
|
99
|
+
|
|
100
|
+
|
|
101
|
+
event_hash = {"id"=>"f7c80a91-c6e7-4636-a5ec-62e59ca0afab" }
|
|
102
|
+
e = Sportradar::Api::Mma::Event.new(event_hash)
|
|
103
|
+
e.get_stats;
|
|
104
|
+
e
|
|
105
|
+
|
|
106
|
+
event_hash = {"id"=>"8f85ecc5-0d4d-470b-b357-075cc7e7bedd" } # => UFC 205 - McGregor/Alvarez
|
|
107
|
+
e = Sportradar::Api::Mma::Event.new(event_hash)
|
|
108
|
+
res = e.get_stats;
|
|
109
|
+
f = e.fights.last.result
|
|
110
|
+
f.scores
|
|
111
|
+
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
module Sportradar
|
|
2
|
+
module Api
|
|
3
|
+
class Mma
|
|
4
|
+
class Fight < Data
|
|
5
|
+
attr_accessor :response, :id, :event, :accolade, :scheduled_rounds, :weight_class, :result
|
|
6
|
+
@all_hash = {}
|
|
7
|
+
def self.new(data, **opts)
|
|
8
|
+
existing = @all_hash[data['id']]
|
|
9
|
+
if existing
|
|
10
|
+
existing.update(data)
|
|
11
|
+
# existing.add_event(opts[:event])
|
|
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
|
+
@event = opts[:event]
|
|
25
|
+
@fighters_hash = {}
|
|
26
|
+
|
|
27
|
+
@id = data['id']
|
|
28
|
+
|
|
29
|
+
update(data)
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def fighters
|
|
33
|
+
@fighters_hash ||= update_fighters(response)
|
|
34
|
+
@fighters_hash.values
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def score
|
|
38
|
+
result.scores
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
def update(data, **opts)
|
|
42
|
+
@accolade = data['accolade'] if data['accolade']
|
|
43
|
+
@scheduled_rounds = data['scheduled_rounds'] if data['scheduled_rounds'] # "3",
|
|
44
|
+
@weight_class = data['weight_class'] if data['weight_class'] # {"id"=>"LW", "weight"=>"146-155", "description"=>"Lightweight"},
|
|
45
|
+
|
|
46
|
+
@referee = Referee.new(data['referee'], fight: self, api: api) if data['referee']
|
|
47
|
+
@result = Result.new(data['result'], fight: self, api: api) if data['result']
|
|
48
|
+
|
|
49
|
+
update_fighters(data) if data['fighters']
|
|
50
|
+
|
|
51
|
+
self
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
def update_fighters(data)
|
|
55
|
+
create_data(@fighters_hash, response.dig('fighters', 'fighter'), klass: Fighter, api: api, fight: self)
|
|
56
|
+
end
|
|
57
|
+
def api
|
|
58
|
+
@api ||= Sportradar::Api::Mma.new
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
# def path_base
|
|
63
|
+
# "games/#{ id }"
|
|
64
|
+
# end
|
|
65
|
+
# def path_box
|
|
66
|
+
# "#{ path_base }/boxscore"
|
|
67
|
+
# end
|
|
68
|
+
# def path_pbp
|
|
69
|
+
# "#{ path_base }/pbp"
|
|
70
|
+
# end
|
|
71
|
+
|
|
72
|
+
# def get_box
|
|
73
|
+
# data = api.get_data(path_box)['game']
|
|
74
|
+
# update(data)
|
|
75
|
+
# @quarter = data.delete('quarter')
|
|
76
|
+
# data
|
|
77
|
+
# end
|
|
78
|
+
|
|
79
|
+
# def get_pbp
|
|
80
|
+
# data = api.get_data(path_pbp)['game']
|
|
81
|
+
# update(data)
|
|
82
|
+
# @quarter = data['quarter'].first
|
|
83
|
+
# @pbp = set_pbp(data['quarter'][1..-1])
|
|
84
|
+
# end
|
|
85
|
+
|
|
86
|
+
# def set_pbp(data)
|
|
87
|
+
# @quarters = parse_into_array_with_options(selector: data, klass: self.parent::Quarter, api: api, game: self)
|
|
88
|
+
# @plays = nil # to clear empty array empty
|
|
89
|
+
# @quarters
|
|
90
|
+
# end
|
|
91
|
+
|
|
92
|
+
KEYS_SCHED = ["id", "name", "scheduled", "venue", "league", "fights"]
|
|
93
|
+
|
|
94
|
+
end
|
|
95
|
+
end
|
|
96
|
+
end
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
__END__
|
|
100
|
+
|
|
101
|
+
m = Sportradar::Api::Mma.new
|
|
102
|
+
sc = m.schedule;
|
|
103
|
+
sc.events.size;
|
|
104
|
+
e = sc.events.sample;
|
|
105
|
+
e = sc.events.first;
|
|
106
|
+
e = sc.events.last;
|
|
107
|
+
e.venue.events.size
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
module Sportradar
|
|
2
|
+
module Api
|
|
3
|
+
class Mma
|
|
4
|
+
class Fighter < Data
|
|
5
|
+
attr_accessor :response, :id, :height, :weight, :reach, :stance, :first_name, :nick_name, :last_name, :record, :born, :out_of
|
|
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
|
+
@height = data['height'] if data['height'] # "72",
|
|
42
|
+
@weight = data['weight'] if data['weight'] # "170",
|
|
43
|
+
@reach = data['reach'] if data['reach'] # "",
|
|
44
|
+
@stance = data['stance'] if data['stance'] # "",
|
|
45
|
+
@first_name = data['first_name'] if data['first_name'] # "Sai",
|
|
46
|
+
@nick_name = data['nick_name'] if data['nick_name'] # "The Boss",
|
|
47
|
+
@last_name = data['last_name'] if data['last_name'] # "Wang",
|
|
48
|
+
@record = data['record'] if data['record'] # {"wins"=>"6", "losses"=>"4", "draws"=>"1", "no_contests"=>"0"},
|
|
49
|
+
@born = data['born'] if data['born'] # {"date"=>"1988-01-16", "country_code"=>"UNK", "country"=>"Unknown", "state"=>"", "city"=>""},
|
|
50
|
+
@out_of = data['out_of'] if data['out_of'] # {"country_code"=>"UNK", "country"=>"Unknown", "state"=>"", "city"=>""}}
|
|
51
|
+
|
|
52
|
+
self
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
def path_base
|
|
56
|
+
"participants/#{ id }"
|
|
57
|
+
end
|
|
58
|
+
def path_profile
|
|
59
|
+
"#{ path_base }/profile"
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
def get_profile
|
|
63
|
+
data = api.get_data(path_profile)['profile'].dig('fighters', 'fighter')
|
|
64
|
+
update(data)
|
|
65
|
+
self
|
|
66
|
+
end
|
|
67
|
+
def api
|
|
68
|
+
@api ||= Sportradar::Api::Mma.new
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
|
|
72
|
+
|
|
73
|
+
KEYS_SCHED = ["id", "name", "scheduled", "venue", "league", "fights"]
|
|
74
|
+
KEYS_EVENT = ["height", "weight", "reach", "stance", "first_name", "nick_name", "last_name", "record"]
|
|
75
|
+
|
|
76
|
+
end
|
|
77
|
+
end
|
|
78
|
+
end
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
__END__
|
|
82
|
+
|
|
83
|
+
|
|
84
|
+
m = Sportradar::Api::Mma.new
|
|
85
|
+
sr = m.participants;
|
|
86
|
+
f = sr.fighters.sample;
|
|
87
|
+
|
|
88
|
+
|
|
89
|
+
m = Sportradar::Api::Mma.new
|
|
90
|
+
sc = m.schedule;
|
|
91
|
+
e = sc.events.sample;
|
|
92
|
+
e.fights.first.fighters.first.born
|
|
93
|
+
|
|
94
|
+
fighter_hash = {'id' => "259117dc-c443-4086-8c1d-abd082e3d4b9" } # => Conor McGregor
|
|
95
|
+
f = Sportradar::Api::Mma::Fighter.new(fighter_hash)
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
module Sportradar
|
|
2
|
+
module Api
|
|
3
|
+
class Mma
|
|
4
|
+
class Judge < 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
|
+
@nick_name = data['nick_name'] if data['nick_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,63 @@
|
|
|
1
|
+
module Sportradar
|
|
2
|
+
module Api
|
|
3
|
+
class Mma
|
|
4
|
+
class League < Data
|
|
5
|
+
attr_accessor :response, :id, :event, :name, :alias
|
|
6
|
+
@all_hash = {}
|
|
7
|
+
def self.new(data, **opts)
|
|
8
|
+
existing = @all_hash[data['id']]
|
|
9
|
+
if existing
|
|
10
|
+
existing.update(data)
|
|
11
|
+
existing.add_event(opts[:event])
|
|
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
|
+
@event = opts[:event]
|
|
25
|
+
@events_hash = {}
|
|
26
|
+
|
|
27
|
+
@id = response['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)
|
|
40
|
+
@name = response['name']
|
|
41
|
+
@alias = response['alias']
|
|
42
|
+
|
|
43
|
+
self
|
|
44
|
+
end
|
|
45
|
+
def api
|
|
46
|
+
@api ||= Sportradar::Api::Mma.new
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
KEYS_SCHED = ["id", "name", "scheduled", "venue", "league", "fights"]
|
|
51
|
+
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
__END__
|
|
58
|
+
|
|
59
|
+
m = Sportradar::Api::Mma.new
|
|
60
|
+
sc = m.schedule;
|
|
61
|
+
sc.events.size
|
|
62
|
+
e = sc.events.last;
|
|
63
|
+
e.league.events.size
|