sportradar-api 0.10.55 → 0.11.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile.lock +28 -26
- data/README.md +7 -6
- data/lib/sportradar/api/baseball/{REAME.md → README.md} +0 -0
- data/lib/sportradar/api/baseball/game.rb +29 -2
- data/lib/sportradar/api/baseball/mlb/hierarchy.rb +1 -0
- data/lib/sportradar/api/baseball/record.rb +0 -4
- data/lib/sportradar/api/baseball/venue.rb +2 -1
- data/lib/sportradar/api/basketball/game.rb +2 -2
- data/lib/sportradar/api/basketball/record.rb +0 -4
- data/lib/sportradar/api/basketball/venue.rb +2 -1
- data/lib/sportradar/api/data.rb +3 -3
- data/lib/sportradar/api/football/README.md +62 -0
- data/lib/sportradar/api/football/drive.rb +105 -0
- data/lib/sportradar/api/football/event.rb +33 -0
- data/lib/sportradar/api/football/game.rb +389 -0
- data/lib/sportradar/api/football/game_stats.rb +135 -0
- data/lib/sportradar/api/football/ncaafb/api.rb +76 -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 +16 -0
- data/lib/sportradar/api/football/ncaafb/game.rb +110 -0
- data/lib/sportradar/api/football/ncaafb/play.rb +20 -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 +45 -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/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/play.rb +20 -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/week.rb +24 -0
- data/lib/sportradar/api/football/nfl.rb +293 -0
- data/lib/sportradar/api/football/play.rb +93 -0
- data/lib/sportradar/api/football/player.rb +111 -0
- data/lib/sportradar/api/football/quarter.rb +42 -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 +20 -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 +43 -0
- data/lib/sportradar/api/mma/venue.rb +1 -1
- data/lib/sportradar/api/request.rb +19 -2
- data/lib/sportradar/api/version.rb +1 -1
- data/lib/sportradar/api.rb +0 -41
- metadata +41 -43
- data/lib/sportradar/api/ncaafb/drive.rb +0 -89
- data/lib/sportradar/api/ncaafb/game.rb +0 -161
- data/lib/sportradar/api/ncaafb/play.rb +0 -39
- data/lib/sportradar/api/ncaafb/player.rb +0 -61
- data/lib/sportradar/api/ncaafb/quarter.rb +0 -37
- data/lib/sportradar/api/ncaafb/season.rb +0 -71
- data/lib/sportradar/api/ncaafb/team.rb +0 -69
- data/lib/sportradar/api/ncaafb/week.rb +0 -33
- data/lib/sportradar/api/ncaafb.rb +0 -185
- data/lib/sportradar/api/nfl/.play_statistics.rb.swo +0 -0
- data/lib/sportradar/api/nfl/broadcast.rb +0 -13
- 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 -17
- 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 -123
- 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 -249
- data/lib/sportradar/api/nfl/player.rb +0 -56
- 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 -211
@@ -1,161 +0,0 @@
|
|
1
|
-
module Sportradar
|
2
|
-
module Api
|
3
|
-
class Ncaafb
|
4
|
-
class Game < Data
|
5
|
-
# attr_accessor :response, :id, :status, :reference, :number, :scheduled, :entry_mode, :venue, :home, :away, :broadcast, :number, :attendance, :utc_offset, :weather, :clock, :quarter, :summary, :situation, :last_event, :scoring, :scoring_drives, :quarters, :stats, :week, :season
|
6
|
-
attr_accessor :response, :id, :scheduled, :coverage, :home_rotation, :away_rotation, :home, :away, :status, :neutral_site, :home_points, :away_points, :venue, :weather, :broadcast, :links, :summary, :scoring_drives, :teams
|
7
|
-
|
8
|
-
def initialize(data, **opts)
|
9
|
-
@response = data
|
10
|
-
@api = opts[:api]
|
11
|
-
@week = opts[:week]
|
12
|
-
|
13
|
-
@id = response["id"]
|
14
|
-
@year = response['year'] || @week&.season.year
|
15
|
-
@type = response['type'] || @week&.season.type
|
16
|
-
@week_number = response['week'] || @week&.sequence
|
17
|
-
@coverage = response['coverage']
|
18
|
-
@scheduled = Time.parse(response["scheduled"]) if response["scheduled"]
|
19
|
-
@home = Team.new(response['home'], api: api, game: self)
|
20
|
-
@away = Team.new(response['away'], api: api, game: self)
|
21
|
-
@status = response['status']
|
22
|
-
@home_rotation = response['home_rotation']
|
23
|
-
@away_rotation = response['away_rotation']
|
24
|
-
@neutral_site = response['neutral_site'] == 'true'
|
25
|
-
@home_points = response['home_points']
|
26
|
-
@away_points = response['away_points']
|
27
|
-
@venue = response['venue']
|
28
|
-
# @venue = Sportradar::Api::Ncaafb::Venue.new(response["venue"]) if response["venue"]
|
29
|
-
@weather = response['weather']
|
30
|
-
@broadcast = response['broadcast']
|
31
|
-
@links = structure_links response.dig('links', 'link')
|
32
|
-
|
33
|
-
@teams_hash = { @home.id => @home, @away.id => @away }
|
34
|
-
end
|
35
|
-
|
36
|
-
# def current_score
|
37
|
-
# "#{summary.home.points}-#{summary.away.points}" if summary
|
38
|
-
# end
|
39
|
-
|
40
|
-
def box
|
41
|
-
@box ||= get_boxscore
|
42
|
-
end
|
43
|
-
|
44
|
-
def pbp
|
45
|
-
@pbp ||= drives
|
46
|
-
end
|
47
|
-
|
48
|
-
def roster
|
49
|
-
@roster ||= get_roster
|
50
|
-
end
|
51
|
-
|
52
|
-
def quarters
|
53
|
-
@quarters ||= get_pbp
|
54
|
-
end
|
55
|
-
|
56
|
-
def drives
|
57
|
-
@drives ||= quarters.flat_map(&:drives)
|
58
|
-
end
|
59
|
-
|
60
|
-
def plays
|
61
|
-
@plays ||= quarters.flat_map(&:plays)
|
62
|
-
end
|
63
|
-
|
64
|
-
def teams(id = nil)
|
65
|
-
id ? @teams_hash[id.to_i] : @teams_hash.values
|
66
|
-
end
|
67
|
-
|
68
|
-
|
69
|
-
def update(data)
|
70
|
-
@attendance = data['attendance'] if data['attendance']
|
71
|
-
@summary = data['summary'] if data['summary']
|
72
|
-
@scheduled = Time.parse(data["scheduled"]) if data["scheduled"]
|
73
|
-
home.update(data['home']) if data['home']
|
74
|
-
away.update(data['away']) if data['away']
|
75
|
-
@status = data['status'] if data['status']
|
76
|
-
|
77
|
-
@completed = Time.parse(data['completed']) if data['completed']
|
78
|
-
@quarter = data['quarter'] if data['quarter']
|
79
|
-
@clock = data['clock'] if data['clock']
|
80
|
-
@scoring_drives = set_scoring_drives(data['scoring_drives']) if data['scoring_drives']
|
81
|
-
end
|
82
|
-
|
83
|
-
private
|
84
|
-
|
85
|
-
def set_scoring_drives(data)
|
86
|
-
parse_into_array_with_options(selector: data, klass: Sportradar::Api::Ncaafb::Drive, api: api, game: self)
|
87
|
-
end
|
88
|
-
# def set_team_rosters(data)
|
89
|
-
# update_data(@teams, data)
|
90
|
-
# end
|
91
|
-
|
92
|
-
def path_base
|
93
|
-
"#{ year }/#{ type }/#{ week_number }/#{ away }/#{ home }"
|
94
|
-
end
|
95
|
-
def path_box
|
96
|
-
links['boxscore'] || "#{ path_base }/boxscore"
|
97
|
-
end
|
98
|
-
def path_extended_box
|
99
|
-
"#{ path_base }/extended-boxscore"
|
100
|
-
end
|
101
|
-
def path_pbp
|
102
|
-
links['pbp'] || "#{ path_base }/pbp"
|
103
|
-
end
|
104
|
-
def path_roster
|
105
|
-
links['roster'] || "#{ path_base }/roster"
|
106
|
-
end
|
107
|
-
def path_summary
|
108
|
-
links['summary'] || "#{ path_base }/summary"
|
109
|
-
end
|
110
|
-
|
111
|
-
def get_boxscore
|
112
|
-
data = api.get_data(path_box)['game']
|
113
|
-
update(data)
|
114
|
-
self
|
115
|
-
end
|
116
|
-
def get_pbp
|
117
|
-
data = api.get_data(path_pbp)['game']
|
118
|
-
update(data)
|
119
|
-
@pbp = set_pbp(data['quarter'])
|
120
|
-
end
|
121
|
-
def get_roster
|
122
|
-
data = api.get_data(path_roster)['game']
|
123
|
-
update_data(@teams_hash, data['team'])
|
124
|
-
end
|
125
|
-
|
126
|
-
def set_pbp(data)
|
127
|
-
@quarters = parse_into_array_with_options(selector: data, klass: Sportradar::Api::Ncaafb::Quarter, api: api, game: self)
|
128
|
-
@drives = nil # to clear empty array empty
|
129
|
-
@plays = nil # to clear empty array empty
|
130
|
-
@quarters
|
131
|
-
end
|
132
|
-
|
133
|
-
def api
|
134
|
-
@api || Sportradar::Api::Ncaafb.new
|
135
|
-
end
|
136
|
-
# def set_scoring_drives
|
137
|
-
# if response["scoring_drives"] && response["scoring_drives"]["drive"]
|
138
|
-
# if response["scoring_drives"]["drive"].is_a?(Array)
|
139
|
-
# @scoring_drives = response["scoring_drives"]["drive"].map {|scoring_drive| Sportradar::Api::Nfl::Drive.new scoring_drive }
|
140
|
-
# elsif response["scoring_drives"]["drive"].is_a?(Hash)
|
141
|
-
# @scoring_drives = [ Sportradar::Api::Nfl::Drive.new(response["scoring_drives"]["drive"]) ]
|
142
|
-
# end
|
143
|
-
# end
|
144
|
-
# end
|
145
|
-
KEYS_SCHEDULE = ["id", "scheduled", "coverage", "home_rotation", "away_rotation", "home", "away", "status", "neutral_site", "home_points", "away_points", "venue", "weather", "broadcast", "links"]
|
146
|
-
|
147
|
-
end
|
148
|
-
end
|
149
|
-
end
|
150
|
-
end
|
151
|
-
|
152
|
-
__END__
|
153
|
-
|
154
|
-
sr = Sportradar::Api::Ncaafb.new;
|
155
|
-
ss = sr.schedule;
|
156
|
-
g = ss.weeks.first.games.first;
|
157
|
-
r = g.roster;
|
158
|
-
box = g.box;
|
159
|
-
pbp = g.pbp;
|
160
|
-
pbp.first.class # => Quarter
|
161
|
-
pbp.first.plays.count # => 9
|
@@ -1,39 +0,0 @@
|
|
1
|
-
module Sportradar
|
2
|
-
module Api
|
3
|
-
class Ncaafb
|
4
|
-
class Play < Data
|
5
|
-
attr_accessor :response, :id, :sequence, :reference, :clock, :home_points, :away_points, :type, :play_clock, :wall_clock, :start_situation, :end_situation, :description, :alt_description, :statistics, :score, :scoring_play, :team_id, :player_id
|
6
|
-
|
7
|
-
def initialize(data, **opts)
|
8
|
-
@response = data
|
9
|
-
@api = opts[:api]
|
10
|
-
@drive = opts[:drive]
|
11
|
-
|
12
|
-
@id = response['id'] # "4ddaf72b-c959-40c1-8bbb-0cd7ee6a32d9",
|
13
|
-
@clock = response['clock'] # "15:00",
|
14
|
-
@type = response['type'] # "kick",
|
15
|
-
@sequence = response['sequence'] # "2",
|
16
|
-
@updated = response['updated'] # "2016-08-27T21:19:31+00:00",
|
17
|
-
@side = response['side'] # "HAW",
|
18
|
-
@yard_line = response['yard_line'] # "48",
|
19
|
-
@down = response['down'] # "1",
|
20
|
-
@yfd = response['yfd'] # "10",
|
21
|
-
@summary = response['summary'] # "kicks 13 yards from HAW 35 to the HAW 48, downed by 28-P.Laird to HAW 48 for no gain (28-C.Hayes).",
|
22
|
-
@links = structure_links(response['links']) # {"link"=>{"rel"=>"summary", "href"=>"/2016/REG/1/HAW/CAL/plays/4ddaf72b-c959-40c1-8bbb-0cd7ee6a32d9.xml", "type"=>"application/xml"}}}
|
23
|
-
@participants = response['participants'] # {"player"=>[{"id"=>"5062ed5a-c920-4350-8be4-e32ac7b0b27b", "name"=>"Patrick Laird", "jersey"=>"28", "position"=>"RB", "team"=>"CAL"}, {"id"=>"0b0548c8-456f-4d6a-b3d1-f4f386b952e7", "name"=>"Cameron Hayes", "jersey"=>"28", "position"=>"DB", "team"=>"HAW"}]},
|
24
|
-
|
25
|
-
end
|
26
|
-
|
27
|
-
def parse_player
|
28
|
-
# TODO: Currently there is an issue where we are only mapping one player_id to a play, but there are plays with multiple players involved.
|
29
|
-
play_stats = @statistics.penalty || @statistics.rush || @statistics.return || @statistics.receive
|
30
|
-
if play_stats.is_a?(Array)
|
31
|
-
play_stats = play_stats.first
|
32
|
-
end
|
33
|
-
@player_id = play_stats.dig('player', 'id') if play_stats
|
34
|
-
end
|
35
|
-
|
36
|
-
end
|
37
|
-
end
|
38
|
-
end
|
39
|
-
end
|
@@ -1,61 +0,0 @@
|
|
1
|
-
module Sportradar
|
2
|
-
module Api
|
3
|
-
class Ncaafb
|
4
|
-
class Player < Data
|
5
|
-
attr_accessor :response, :id, :name, :name_abbr, :birthdate, :height, :weight, :position, :jersey_number, :status
|
6
|
-
|
7
|
-
def initialize(data, **opts)
|
8
|
-
@response = data
|
9
|
-
@api = opts[:api]
|
10
|
-
@team = opts[:team]
|
11
|
-
|
12
|
-
# case response
|
13
|
-
# when String
|
14
|
-
# @id = response
|
15
|
-
# when Hash
|
16
|
-
# @id = data['id']
|
17
|
-
# update(response)
|
18
|
-
# end
|
19
|
-
|
20
|
-
@id = response['id'] # => "83aa1cc4-9e79-432f-9178-6583fc1cc598",
|
21
|
-
@name_full = response['name_full'] # => "Raymond Davison",
|
22
|
-
@name_first = response['name_first'] # => "Raymond",
|
23
|
-
@name_last = response['name_last'] # => "Davison",
|
24
|
-
@name_abbr = response['name_abbr'] # => "R.Davison",
|
25
|
-
@birthdate = response['birthdate'] # => "",
|
26
|
-
@height = response['height'] # => "74",
|
27
|
-
@weight = response['weight'] # => "225",
|
28
|
-
@position = response['position'] # => "LB",
|
29
|
-
@jersey_number = response['jersey_number'] # => "31",
|
30
|
-
@status = response['status'] # => "ACT",
|
31
|
-
end
|
32
|
-
def full_name
|
33
|
-
# (market || name) ? [market, name].join(' ') : id
|
34
|
-
name_full || [name_first, name_last].join(' ')
|
35
|
-
end
|
36
|
-
def update(data)
|
37
|
-
@name_full = data['name_full'] if data['name_full']
|
38
|
-
@name_first = data['name_first'] if data['name_first']
|
39
|
-
@name_last = data['name_last'] if data['name_last']
|
40
|
-
@name_abbr = data['name_abbr'] if data['name_abbr']
|
41
|
-
@birthdate = data['birthdate'] if data['birthdate']
|
42
|
-
@height = data['height'] if data['height']
|
43
|
-
@weight = data['weight'] if data['weight']
|
44
|
-
@position = data['position'] if data['position']
|
45
|
-
@jersey_number = data['jersey_number'] if data['jersey_number']
|
46
|
-
@status = data['status'] if data['status']
|
47
|
-
end
|
48
|
-
def parse_players(data)
|
49
|
-
# @players = parse_into_array_with_options(data)
|
50
|
-
# data
|
51
|
-
end
|
52
|
-
|
53
|
-
|
54
|
-
def api
|
55
|
-
@api || Sportradar::Api::Ncaafb.new
|
56
|
-
end
|
57
|
-
|
58
|
-
end
|
59
|
-
end
|
60
|
-
end
|
61
|
-
end
|
@@ -1,37 +0,0 @@
|
|
1
|
-
module Sportradar
|
2
|
-
module Api
|
3
|
-
class Ncaafb
|
4
|
-
class Quarter < Data
|
5
|
-
attr_accessor :response, :id, :number, :sequence, :home_points, :away_points, :drives
|
6
|
-
|
7
|
-
def initialize(data, **opts)
|
8
|
-
@response = data
|
9
|
-
@api = opts[:api]
|
10
|
-
@game = opts[:game]
|
11
|
-
|
12
|
-
@id = response["id"]
|
13
|
-
@number = response['number']
|
14
|
-
@event = response['event']
|
15
|
-
|
16
|
-
# @number = data["number"]
|
17
|
-
# @sequence = data["sequence"]
|
18
|
-
# @home_points = data["home_points"]
|
19
|
-
# # @home_points = response['scoring']['home']['points'] # from play_by_play
|
20
|
-
# @away_points = data["away_points"]
|
21
|
-
# # @away_points = response['scoring']['away']['points'] # from play_by_play
|
22
|
-
# @drives = parse_into_array(selector: response["play_by_play"]["drive"], klass: Sportradar::Api::Nfl::Drive) if response["play_by_play"] && response["play_by_play"]["drive"]
|
23
|
-
end
|
24
|
-
|
25
|
-
def drives
|
26
|
-
@drives ||= parse_into_array_with_options(selector: response['drive'], klass: Sportradar::Api::Ncaafb::Drive, api: @api, quarter: self)
|
27
|
-
end
|
28
|
-
def plays
|
29
|
-
@plays ||= drives.flat_map(&:plays)
|
30
|
-
end
|
31
|
-
|
32
|
-
private
|
33
|
-
|
34
|
-
end
|
35
|
-
end
|
36
|
-
end
|
37
|
-
end
|
@@ -1,71 +0,0 @@
|
|
1
|
-
module Sportradar
|
2
|
-
module Api
|
3
|
-
class Ncaafb
|
4
|
-
class Season < Data
|
5
|
-
attr_accessor :response, :id, :year, :type, :name, :injuries, :team, :conferences, :divisions, :teams
|
6
|
-
|
7
|
-
def initialize(data, **opts)
|
8
|
-
@response = data
|
9
|
-
@api = opts[:api]
|
10
|
-
# @season = response['season'] # removing this to reduce ambiguity
|
11
|
-
@year = response['season']
|
12
|
-
@type = response['type']
|
13
|
-
|
14
|
-
# weeks
|
15
|
-
# set_conferences
|
16
|
-
# set_divisions
|
17
|
-
# set_teams
|
18
|
-
end
|
19
|
-
|
20
|
-
# private
|
21
|
-
|
22
|
-
def weeks(number = nil)
|
23
|
-
@weeks_hash ||= parse_into_array_with_options(selector: response["week"], klass: Sportradar::Api::Ncaafb::Week, api: @api, season: self).map { |w| [w.sequence.to_i, w] }.to_h
|
24
|
-
number ? @weeks_hash[number.to_i] : @weeks_hash.values
|
25
|
-
end
|
26
|
-
|
27
|
-
# set_(conferences|divisions|teams) are all identical to the same methods in Hierarchy
|
28
|
-
# There is likely more overlap between Sportradar's NFL standings and NFL hierarchy APIs
|
29
|
-
# Eventually, these should be shared between classes
|
30
|
-
# def set_conferences
|
31
|
-
# @conferences ||= parse_into_array(selector: response["week"], klass: Sportradar::Api::Ncaafb::Week)
|
32
|
-
# if response["conference"]
|
33
|
-
# if response["conference"].is_a?(Array)
|
34
|
-
# @conferences = response["conference"].map {|conference| Sportradar::Api::Nfl::Conference.new conference }
|
35
|
-
# elsif response["conference"].is_a?(Hash)
|
36
|
-
# @conferences = [ Sportradar::Api::Nfl::Conference.new(response["conference"]) ]
|
37
|
-
# end
|
38
|
-
# end
|
39
|
-
# end
|
40
|
-
|
41
|
-
# def set_divisions
|
42
|
-
# if conferences&.all? { |conference| conference.divisions }
|
43
|
-
# @divisions = conferences.flat_map(&:divisions)
|
44
|
-
# elsif response["division"]
|
45
|
-
# if response["division"].is_a?(Array)
|
46
|
-
# @divisions = response["division"].map {|division| Sportradar::Api::Nfl::Division.new division }
|
47
|
-
# elsif response["division"].is_a?(Hash)
|
48
|
-
# @divisions = [ Sportradar::Api::Nfl::Division.new(response["division"]) ]
|
49
|
-
# end
|
50
|
-
# end
|
51
|
-
# end
|
52
|
-
|
53
|
-
# def set_teams
|
54
|
-
# @teams = @divisions.flat_map(&:teams) if divisions&.all? {|division| division.teams }
|
55
|
-
# end
|
56
|
-
|
57
|
-
end
|
58
|
-
end
|
59
|
-
end
|
60
|
-
end
|
61
|
-
|
62
|
-
|
63
|
-
__END__
|
64
|
-
|
65
|
-
sr = Sportradar::Api::Ncaafb.new;
|
66
|
-
ss = sr.schedule;
|
67
|
-
week_count = ss.weeks.count;
|
68
|
-
w1 = ss.weeks.first;
|
69
|
-
w1 = ss.weeks(1);
|
70
|
-
teams = ss.weeks(1).games.flat_map(&:teams);
|
71
|
-
t = teams.first;
|
@@ -1,69 +0,0 @@
|
|
1
|
-
module Sportradar
|
2
|
-
module Api
|
3
|
-
class Ncaafb
|
4
|
-
class Team < Data
|
5
|
-
attr_accessor :response, :id, :name, :market
|
6
|
-
|
7
|
-
def initialize(data, **opts)
|
8
|
-
@response = data
|
9
|
-
@api = opts[:api]
|
10
|
-
|
11
|
-
case response
|
12
|
-
when String
|
13
|
-
@id = response
|
14
|
-
when Hash
|
15
|
-
@id = data['id']
|
16
|
-
update(response)
|
17
|
-
end
|
18
|
-
end
|
19
|
-
def full_name
|
20
|
-
(market || name) ? [market, name].join(' ') : id
|
21
|
-
end
|
22
|
-
def update(data)
|
23
|
-
@name = data['name'] if data['name']
|
24
|
-
@market = data['market'] if data['market']
|
25
|
-
@players = parse_players(data['player']) if data['player']
|
26
|
-
end
|
27
|
-
|
28
|
-
def players
|
29
|
-
@players ||= get_roster
|
30
|
-
end
|
31
|
-
alias :roster :players
|
32
|
-
def parse_players(data)
|
33
|
-
@players = parse_into_array_with_options(selector: data, klass: Sportradar::Api::Ncaafb::Player, api: api, team: self)
|
34
|
-
end
|
35
|
-
|
36
|
-
def get_roster
|
37
|
-
data = api.get_data(path_roster)['team']
|
38
|
-
update(data)
|
39
|
-
end
|
40
|
-
|
41
|
-
def path_base
|
42
|
-
"teams/#{ id }"
|
43
|
-
end
|
44
|
-
def path_roster
|
45
|
-
"#{ path_base }/roster"
|
46
|
-
end
|
47
|
-
|
48
|
-
|
49
|
-
def api
|
50
|
-
@api || Sportradar::Api::Ncaafb.new
|
51
|
-
end
|
52
|
-
|
53
|
-
end
|
54
|
-
end
|
55
|
-
end
|
56
|
-
end
|
57
|
-
|
58
|
-
__END__
|
59
|
-
|
60
|
-
sr = Sportradar::Api::Ncaafb.new;
|
61
|
-
ss = sr.schedule;
|
62
|
-
teams = ss.weeks(1).games.flat_map(&:teams);
|
63
|
-
t = teams.first;
|
64
|
-
ps = t.get_roster; # ps => players
|
65
|
-
|
66
|
-
|
67
|
-
# week_count = ss.weeks.count;
|
68
|
-
# w1 = ss.weeks.first;
|
69
|
-
# w1 = ss.weeks(1);
|
@@ -1,33 +0,0 @@
|
|
1
|
-
module Sportradar
|
2
|
-
module Api
|
3
|
-
class Ncaafb
|
4
|
-
class Week < Data
|
5
|
-
attr_accessor :response, :id, :sequence, :title, :season
|
6
|
-
|
7
|
-
def initialize(data, **opts)
|
8
|
-
@response = data
|
9
|
-
@api = opts[:api]
|
10
|
-
@season = opts[:season]
|
11
|
-
# @id = response['id']
|
12
|
-
# @year = response['year']
|
13
|
-
# @type = response['type']
|
14
|
-
@sequence = response['week']
|
15
|
-
|
16
|
-
rescue => e
|
17
|
-
binding.pry
|
18
|
-
end
|
19
|
-
|
20
|
-
def number
|
21
|
-
sequence
|
22
|
-
end
|
23
|
-
|
24
|
-
# private
|
25
|
-
|
26
|
-
def games
|
27
|
-
@games ||= parse_into_array_with_options(selector: response["game"], klass: Sportradar::Api::Ncaafb::Game, api: @api, week: self)
|
28
|
-
end
|
29
|
-
|
30
|
-
end
|
31
|
-
end
|
32
|
-
end
|
33
|
-
end
|
@@ -1,185 +0,0 @@
|
|
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
|
-
|
Binary file
|