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
@@ -0,0 +1,111 @@
|
|
1
|
+
module Sportradar
|
2
|
+
module Api
|
3
|
+
module Football
|
4
|
+
class Player < Data
|
5
|
+
attr_accessor :response, :id, :number, :name_full, :name_first, :name_last, :position, :birth_place, :college, :height, :weight, :averages, :totals, :draft, :api
|
6
|
+
|
7
|
+
def initialize(data, **opts)
|
8
|
+
@response = data
|
9
|
+
@api = opts[:api]
|
10
|
+
@team = opts[:team]
|
11
|
+
|
12
|
+
@id = data["id"]
|
13
|
+
|
14
|
+
update(data, **opts)
|
15
|
+
end
|
16
|
+
|
17
|
+
def name # to match api for NFL::Player
|
18
|
+
name_full
|
19
|
+
end
|
20
|
+
def display_name
|
21
|
+
name_full
|
22
|
+
end
|
23
|
+
|
24
|
+
def birth_date # to match api for NFL::Player
|
25
|
+
@birthdate
|
26
|
+
end
|
27
|
+
|
28
|
+
def jersey
|
29
|
+
@jersey_number
|
30
|
+
end
|
31
|
+
|
32
|
+
def update(data, **opts)
|
33
|
+
@status = data['status'] if data['status']
|
34
|
+
@name_full = data['name_full'] || data['name'] || @name_full
|
35
|
+
@name_first = data['name_first'] if data['name_first']
|
36
|
+
@name_last = data['name_last'] if data['name_last']
|
37
|
+
@name_abbr = data['name_abbr'] if data['name_abbr']
|
38
|
+
@height = data['height'] if data['height']
|
39
|
+
@weight = data['weight'] if data['weight']
|
40
|
+
@position = data['position'] if data['position']
|
41
|
+
@primary_position = data['primary_position'] if data['primary_position']
|
42
|
+
@jersey_number = data['jersey_number'] || data['jersey'] || @jersey_number
|
43
|
+
@experience = data['experience'] if data['experience']
|
44
|
+
@birth_place = data['birth_place'].gsub(',,', ', ') if data['birth_place'] # "Benin City,, NGA",
|
45
|
+
@updated = data['updated'] if data['updated'] # "2016-07-08T12:11:59+00:00",
|
46
|
+
|
47
|
+
|
48
|
+
@games_started = data['games_started'] if data['games_started']
|
49
|
+
@games_played = data['games_played'] if data['games_played']
|
50
|
+
# NCAA specific below
|
51
|
+
|
52
|
+
# update_injuries(data)
|
53
|
+
# update_draft(data)
|
54
|
+
|
55
|
+
if stats = data['statistics']
|
56
|
+
@totals = stats
|
57
|
+
# binding.pry
|
58
|
+
@team.update_player_stats(self, stats.dup, opts[:game])
|
59
|
+
else
|
60
|
+
@totals = {}
|
61
|
+
end
|
62
|
+
|
63
|
+
self
|
64
|
+
end
|
65
|
+
|
66
|
+
def injured?
|
67
|
+
# !!(@injury && @injury.out?)
|
68
|
+
end
|
69
|
+
|
70
|
+
def age
|
71
|
+
# if birth_date.present?
|
72
|
+
# now = Time.now.utc.to_date
|
73
|
+
# dob = birth_date.to_date
|
74
|
+
# now.year - dob.year - ((now.month > dob.month || (now.month == dob.month && now.day >= dob.day)) ? 0 : 1)
|
75
|
+
# end
|
76
|
+
end
|
77
|
+
|
78
|
+
def update_draft(data)
|
79
|
+
# @draft = data['draft'] if data['draft'] # {"team_id"=>"583ec825-fb46-11e1-82cb-f4ce4684ea4c", "year"=>"2012", "round"=>"1", "pick"=>"30"},
|
80
|
+
end
|
81
|
+
def update_injuries(data)
|
82
|
+
# @injury = Injury.new(data['injuries']) if data['injuries']
|
83
|
+
# {"injury"=>
|
84
|
+
# {"id"=>"06423591-3fc1-4d2b-8c60-a3f30d735345",
|
85
|
+
# "comment"=>"Ezeli suffered a setback in his recovery from a procedure on his knee and there is no timetable for his return, according to Jason Quick of csnnw.com.",
|
86
|
+
# "desc"=>"Knee",
|
87
|
+
# "status"=>"Out",
|
88
|
+
# "start_date"=>"2016-10-25",
|
89
|
+
# "update_date"=>"2016-11-09"}}}
|
90
|
+
end
|
91
|
+
|
92
|
+
end
|
93
|
+
end
|
94
|
+
end
|
95
|
+
end
|
96
|
+
|
97
|
+
__END__
|
98
|
+
|
99
|
+
ncaafb = Marshal.load(File.binread('ncaafb.bin'));
|
100
|
+
|
101
|
+
t = ncaafb.teams.first;
|
102
|
+
t.get_roster;
|
103
|
+
t.players.first
|
104
|
+
t.players.first.totals
|
105
|
+
|
106
|
+
ncaafb = Marshal.load(File.binread('ncaafb.bin'));
|
107
|
+
t = ncaafb.teams.sample
|
108
|
+
data = t.get_season_stats(2016);
|
109
|
+
t.get_roster;
|
110
|
+
t.players.sample
|
111
|
+
t.players.sample.totals
|
@@ -0,0 +1,42 @@
|
|
1
|
+
module Sportradar
|
2
|
+
module Api
|
3
|
+
module Football
|
4
|
+
class Quarter < Data
|
5
|
+
attr_accessor :response, :api, :id, :number, :sequence, :home_points, :away_points, :scoring
|
6
|
+
|
7
|
+
def initialize(data, **opts)
|
8
|
+
@response = data
|
9
|
+
@id = data["number"]
|
10
|
+
@api = opts[:api]
|
11
|
+
|
12
|
+
@drives_hash = {}
|
13
|
+
|
14
|
+
update(data, **opts)
|
15
|
+
end
|
16
|
+
|
17
|
+
def update(data, **opts)
|
18
|
+
@number = data["number"]
|
19
|
+
@sequence = data["sequence"]
|
20
|
+
@home_points = data["home_points"]
|
21
|
+
@away_points = data["away_points"]
|
22
|
+
|
23
|
+
@home_info = data["home"]
|
24
|
+
@away_info = data["away"]
|
25
|
+
|
26
|
+
create_data(@drives_hash, data['pbp'], klass: drive_class, api: api, game: self) if data['pbp']
|
27
|
+
|
28
|
+
self
|
29
|
+
end
|
30
|
+
|
31
|
+
def drives
|
32
|
+
@drives_hash.values
|
33
|
+
end
|
34
|
+
|
35
|
+
def drive_class
|
36
|
+
Drive
|
37
|
+
end
|
38
|
+
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
@@ -0,0 +1,48 @@
|
|
1
|
+
module Sportradar
|
2
|
+
module Api
|
3
|
+
module Football
|
4
|
+
class Record < Data
|
5
|
+
attr_accessor :id, :team, :wins, :losses, :win_pct, :points_for, :points_against, :point_diff, :games_behind, :streak
|
6
|
+
|
7
|
+
def initialize(data, type: 'overall', **opts)
|
8
|
+
@team = opts[:team]
|
9
|
+
@type = type
|
10
|
+
|
11
|
+
update(data, **opts)
|
12
|
+
end
|
13
|
+
|
14
|
+
def update(data, **opts)
|
15
|
+
@wins = data['wins']
|
16
|
+
@losses = data['losses']
|
17
|
+
@win_pct = data['win_pct']
|
18
|
+
@points_for = data['points_for']
|
19
|
+
@points_against = data['points_against']
|
20
|
+
@point_diff = data['point_diff']
|
21
|
+
@games_behind = data['games_behind']
|
22
|
+
@streak = data['streak']
|
23
|
+
end
|
24
|
+
|
25
|
+
def <=>(other)
|
26
|
+
self.win_pct <=> other.win_pct
|
27
|
+
end
|
28
|
+
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
__END__
|
35
|
+
|
36
|
+
"wins"=>14,
|
37
|
+
"losses"=>2,
|
38
|
+
"ties"=>0,
|
39
|
+
"win_pct"=>0.875,
|
40
|
+
"points_for"=>441,
|
41
|
+
"points_against"=>250,
|
42
|
+
"points_rank"=>4,
|
43
|
+
"touchdown_diff"=>24,
|
44
|
+
"conf_h2h"=>0,
|
45
|
+
"rank"=>{"conference"=>1, "division"=>1},
|
46
|
+
"streak"=>{"type"=>"win", "length"=>7, "desc"=>"Won 7"},
|
47
|
+
"strength_of_schedule"=>{"sos"=>0.439453, "wins"=>113, "total"=>256},
|
48
|
+
"strength_of_victory"=>{"sov"=>0.424, "wins"=>95, "total"=>224},
|
@@ -0,0 +1,92 @@
|
|
1
|
+
module Sportradar
|
2
|
+
module Api
|
3
|
+
module Football
|
4
|
+
class Scoring < Data
|
5
|
+
attr_accessor :response, :api, :id, :home, :away, :scores
|
6
|
+
|
7
|
+
def initialize(data, **opts)
|
8
|
+
@api = opts[:api]
|
9
|
+
@game = opts[:game]
|
10
|
+
|
11
|
+
@scores = {}
|
12
|
+
@id = data['id']
|
13
|
+
|
14
|
+
update(data, **opts)
|
15
|
+
end
|
16
|
+
|
17
|
+
def update(data, source: nil, **opts)
|
18
|
+
new_scores = case source
|
19
|
+
when :box
|
20
|
+
parse_from_box(data)
|
21
|
+
when :extended_box
|
22
|
+
parse_from_box(data)
|
23
|
+
when :pbp
|
24
|
+
parse_from_pbp(data)
|
25
|
+
when :summary
|
26
|
+
parse_from_summary(data)
|
27
|
+
when :statistics
|
28
|
+
parse_from_statistics(data)
|
29
|
+
else
|
30
|
+
if data['quarter'] || data['half']
|
31
|
+
parse_from_pbp(data)
|
32
|
+
elsif data['team']
|
33
|
+
parse_from_box(data)
|
34
|
+
else # schedule requests
|
35
|
+
{}
|
36
|
+
end
|
37
|
+
end
|
38
|
+
@scores.each { |k, v| v.merge!(new_scores.delete(k) || {} ) }
|
39
|
+
new_scores.each { |k, v| @scores.merge!(k => v) }
|
40
|
+
end
|
41
|
+
|
42
|
+
def points(team_id)
|
43
|
+
@score[team_id].to_i
|
44
|
+
end
|
45
|
+
|
46
|
+
|
47
|
+
private
|
48
|
+
|
49
|
+
def parse_from_box(data)
|
50
|
+
# home
|
51
|
+
id = data.dig('home_team', 'id')
|
52
|
+
da = data.dig('home_team', 'scoring')
|
53
|
+
return {} unless da
|
54
|
+
home = da.map { |h| [h['quarter'].to_i, { id => h['points'].to_i }] }.to_h
|
55
|
+
# away
|
56
|
+
id = data.dig('away_team', 'id')
|
57
|
+
da = data.dig('away_team', 'scoring')
|
58
|
+
return {} unless da
|
59
|
+
away = da.map { |h| [h['quarter'].to_i, { id => h['points'].to_i }] }.to_h
|
60
|
+
|
61
|
+
home.each { |quarter, hash| hash.merge!(away[quarter]) }
|
62
|
+
end
|
63
|
+
|
64
|
+
def parse_from_statistics(data)
|
65
|
+
{}
|
66
|
+
end
|
67
|
+
|
68
|
+
def parse_from_pbp(data)
|
69
|
+
# period_name = data.key?('quarter') ? 'quarter' : 'half'
|
70
|
+
# period_name = 'periods'
|
71
|
+
# return {} unless data[period_name] # game hasn't started
|
72
|
+
# quarters = data[period_name]#[1..-1]
|
73
|
+
# overtimes = data['overtime']
|
74
|
+
# overtimes = [overtimes] if !overtimes.is_a?(Array)
|
75
|
+
# quarters = quarters[0] if (quarters.is_a?(Array) && (quarters.size == 1) && quarters.first.is_a?(Array))
|
76
|
+
# data = (quarters + overtimes).compact.map{|q| q['scoring'] }
|
77
|
+
# data.map.with_index(1) { |h, i| [i, { h.dig('home', 'id') => h.dig('home', 'points').to_i, h.dig('away', 'id') => h.dig('away', 'points').to_i }] }.to_h
|
78
|
+
{}
|
79
|
+
end
|
80
|
+
|
81
|
+
# def period_name
|
82
|
+
# 'quarter'
|
83
|
+
# end
|
84
|
+
|
85
|
+
def parse_from_summary(data)
|
86
|
+
{} # nothing for college
|
87
|
+
end
|
88
|
+
|
89
|
+
end
|
90
|
+
end
|
91
|
+
end
|
92
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
module Sportradar
|
2
|
+
module Api
|
3
|
+
module Football
|
4
|
+
class Situation < Data
|
5
|
+
attr_accessor :response, :clock, :down, :yfd, :possession, :location, :team_id
|
6
|
+
|
7
|
+
def initialize(data)
|
8
|
+
@response = data
|
9
|
+
@clock = data["clock"]
|
10
|
+
@down = data["down"]
|
11
|
+
@yfd = data["yfd"]
|
12
|
+
@possession = OpenStruct.new(data["possession"]) if data["possession"]
|
13
|
+
@location = OpenStruct.new(data["location"]) if data["location"]
|
14
|
+
@team_id = possession.id if possession
|
15
|
+
end
|
16
|
+
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -4,28 +4,28 @@ module Sportradar
|
|
4
4
|
attr_accessor :tackles, :assists, :combined, :sacks, :sack_yards, :interceptions, :passes_defended, :forced_fumbles, :fumble_recoveries, :qb_hits, :tloss, :tloss_yards, :safeties, :sp_tackles, :sp_assists, :sp_forced_fumbles, :sp_fumble_recoveries, :sp_blocks, :misc_tackles, :misc_assists, :misc_forced_fumbles, :misc_fumble_recoveries, :missed_tackles
|
5
5
|
|
6
6
|
def set_stats
|
7
|
-
@tackles = response["tackles"]
|
8
|
-
@assists = response["assists"]
|
9
|
-
@combined = response["combined"]
|
10
|
-
@sacks = response["sacks"]
|
11
|
-
@sack_yards = response["sack_yards"]
|
12
|
-
@interceptions = response["interceptions"]
|
13
|
-
@passes_defended = response["passes_defended"]
|
14
|
-
@forced_fumbles = response["forced_fumbles"]
|
15
|
-
@fumble_recoveries = response["fumble_recoveries"]
|
16
|
-
@qb_hits = response["qb_hits"]
|
17
|
-
@tloss = response["tloss"]
|
7
|
+
@tackles = response["tackles"] || response["tackle"]
|
8
|
+
@assists = response["assists"] || response['ast']
|
9
|
+
@combined = response["combined"] || response['comb']
|
10
|
+
@sacks = response["sacks"] || response['sack']
|
11
|
+
@sack_yards = response["sack_yards"] || response['sack_yds']
|
12
|
+
@interceptions = response["interceptions"] || response['int']
|
13
|
+
@passes_defended = response["passes_defended"] || response['pd']
|
14
|
+
@forced_fumbles = response["forced_fumbles"] || response['force_fum']
|
15
|
+
@fumble_recoveries = response["fumble_recoveries"] || response['fum_rec']
|
16
|
+
@qb_hits = response["qb_hits"] || response['qh']
|
17
|
+
@tloss = response["tloss"] || response['tlost']
|
18
18
|
@tloss_yards = response["tloss_yards"]
|
19
|
-
@safeties = response["safeties"]
|
20
|
-
@sp_tackles = response["sp_tackles"]
|
21
|
-
@sp_assists = response["sp_assists"]
|
22
|
-
@sp_forced_fumbles = response["sp_forced_fumbles"]
|
23
|
-
@sp_fumble_recoveries = response["sp_fumble_recoveries"]
|
19
|
+
@safeties = response["safeties"] || response['sfty']
|
20
|
+
@sp_tackles = response["sp_tackles"] || response['sp_tackle']
|
21
|
+
@sp_assists = response["sp_assists"] || response['sp_ast']
|
22
|
+
@sp_forced_fumbles = response["sp_forced_fumbles"] || response['sp_force_fum']
|
23
|
+
@sp_fumble_recoveries = response["sp_fumble_recoveries"] || response['sp_fum_rec']
|
24
24
|
@sp_blocks = response["sp_blocks"]
|
25
|
-
@misc_tackles = response["misc_tackles"]
|
26
|
-
@misc_assists = response["misc_assists"]
|
27
|
-
@misc_forced_fumbles = response["misc_forced_fumbles"]
|
28
|
-
@misc_fumble_recoveries = response["misc_fumble_recoveries"]
|
25
|
+
@misc_tackles = response["misc_tackles"] || response['misc_tackle']
|
26
|
+
@misc_assists = response["misc_assists"] || response['misc_ast']
|
27
|
+
@misc_forced_fumbles = response["misc_forced_fumbles"] || response['misc_force_fum']
|
28
|
+
@misc_fumble_recoveries = response["misc_fumble_recoveries"] || response['misc_fum_rec']
|
29
29
|
@missed_tackles = response["missed_tackles"]
|
30
30
|
end
|
31
31
|
end
|
@@ -1,13 +1,14 @@
|
|
1
1
|
module Sportradar
|
2
2
|
module Api
|
3
3
|
class Football::StatPack::ExtraPoints < Football::StatPack
|
4
|
-
attr_accessor :attempts, :made, :blocked, :pass_attempts, :pass_successes, :rush_attempts, :rush_successes, :defense_attempts, :defense_successes, :turnover_successes
|
4
|
+
attr_accessor :attempts, :pct, :made, :blocked, :pass_attempts, :pass_successes, :rush_attempts, :rush_successes, :defense_attempts, :defense_successes, :turnover_successes
|
5
5
|
|
6
6
|
def set_stats
|
7
|
-
kick_data = response['kicks'] || response
|
8
|
-
@attempts = kick_data["attempts"]
|
7
|
+
kick_data = response['kicks'] || response['totals'] || response
|
8
|
+
@attempts = kick_data["attempts"] || kick_data["att"]
|
9
9
|
@made = kick_data["made"]
|
10
|
-
@blocked = kick_data["blocked"]
|
10
|
+
@blocked = kick_data["blocked"] || kick_data["blk"]
|
11
|
+
@pct = kick_data["pct"] || (@made.to_f / @attempts.to_i)
|
11
12
|
if response['conversions']
|
12
13
|
@pass_attempts = response["pass_attempts"]
|
13
14
|
@pass_successes = response["pass_successes"]
|
@@ -1,15 +1,16 @@
|
|
1
1
|
module Sportradar
|
2
2
|
module Api
|
3
3
|
class Football::StatPack::FieldGoals < Football::StatPack
|
4
|
-
attr_accessor :attempts, :made, :blocked, :yards, :avg_yards, :longest
|
4
|
+
attr_accessor :attempts, :pct, :made, :blocked, :yards, :avg_yards, :longest
|
5
5
|
|
6
6
|
def set_stats
|
7
|
-
@attempts = response["attempts"]
|
7
|
+
@attempts = response["attempts"] || response["att"]
|
8
8
|
@made = response["made"]
|
9
|
-
@blocked = response["blocked"]
|
10
|
-
@yards = response["yards"]
|
9
|
+
@blocked = response["blocked"] || response['blk']
|
10
|
+
@yards = response["yards"] || response['yds']
|
11
11
|
@avg_yards = response["avg_yards"]
|
12
|
-
@longest = response["longest"]
|
12
|
+
@longest = response["longest"] || response['lg']
|
13
|
+
@pct = response["pct"] || (@made.to_f / @attempts.to_i)
|
13
14
|
end
|
14
15
|
end
|
15
16
|
|
@@ -5,19 +5,21 @@ module Sportradar
|
|
5
5
|
|
6
6
|
def set_stats
|
7
7
|
@response = response[1] if response.is_a? Array
|
8
|
-
@fumbles = response["fumbles"]
|
9
|
-
@lost_fumbles = response["lost_fumbles"]
|
8
|
+
@fumbles = response["fumbles"] || response['fum']
|
9
|
+
@lost_fumbles = response["lost_fumbles"] || response['lost']
|
10
10
|
@own_rec = response["own_rec"]
|
11
|
-
@own_rec_yards = response["own_rec_yards"]
|
11
|
+
@own_rec_yards = response["own_rec_yards"] || response["own_rec_yds"]
|
12
12
|
@opp_rec = response["opp_rec"]
|
13
|
-
@opp_rec_yards = response["opp_rec_yards"]
|
14
|
-
@out_of_bounds = response["out_of_bounds"]
|
15
|
-
@forced_fumbles = response["forced_fumbles"]
|
16
|
-
@own_rec_tds = response["own_rec_tds"]
|
17
|
-
@opp_rec_tds = response["opp_rec_tds"]
|
18
|
-
@ez_rec_tds = response["ez_rec_tds"]
|
13
|
+
@opp_rec_yards = response["opp_rec_yards"] || response["opp_rec_yds"]
|
14
|
+
@out_of_bounds = response["out_of_bounds"] || response['oob']
|
15
|
+
@forced_fumbles = response["forced_fumbles"] || response['force_fum']
|
16
|
+
@own_rec_tds = response["own_rec_tds"] || response["own_rec_td"]
|
17
|
+
@opp_rec_tds = response["opp_rec_tds"] || response["opp_rec_td"]
|
18
|
+
@ez_rec_tds = response["ez_rec_tds"] # unknown ncaafb
|
19
19
|
end
|
20
20
|
end
|
21
21
|
|
22
22
|
end
|
23
23
|
end
|
24
|
+
|
25
|
+
# ncaafb = {"fum"=>0, "lost"=>0, "oob"=>0, "own_rec"=>0, "own_rec_yds"=>0, "own_rec_td"=>0, "force_fum"=>3, "opp_rec"=>2, "opp_rec_yds"=>0, "opp_rec_td"=>0}
|
@@ -4,15 +4,16 @@ module Sportradar
|
|
4
4
|
attr_accessor :returns, :yards, :avg_yards, :touchdowns, :longest, :faircatches, :longest_touchdown
|
5
5
|
|
6
6
|
def set_stats
|
7
|
-
@returns = response["returns"]
|
8
|
-
@yards = response["yards"]
|
9
|
-
@avg_yards = response["avg_yards"]
|
10
|
-
@touchdowns = response["touchdowns"]
|
11
|
-
@longest = response["longest"]
|
12
|
-
@faircatches = response["faircatches"]
|
13
|
-
@longest_touchdown = response["longest_touchdown"]
|
7
|
+
@returns = response["returns"] || response['number']
|
8
|
+
@yards = response["yards"] || response['yds']
|
9
|
+
@avg_yards = response["avg_yards"] || response['avg']
|
10
|
+
@touchdowns = response["touchdowns"] || response['td']
|
11
|
+
@longest = response["longest"] || response['lg']
|
12
|
+
@faircatches = response["faircatches"] || response['fc']
|
13
|
+
@longest_touchdown = response["longest_touchdown"] # unknown ncaafb
|
14
14
|
end
|
15
15
|
end
|
16
16
|
|
17
17
|
end
|
18
18
|
end
|
19
|
+
# ncaafb = {"returns"=>4, "yds"=>125, "fc"=>0, "lg"=>47, "td"=>0, "avg"=>31.25, "yds_10_pls"=>0, "yds_20_pls"=>1, "yds_30_pls"=>0, "yds_40_pls"=>2, "yds_50_pls"=>0}
|
@@ -1,18 +1,20 @@
|
|
1
1
|
module Sportradar
|
2
2
|
module Api
|
3
3
|
class Football::StatPack::Kickoffs < Football::StatPack
|
4
|
-
attr_accessor :kickoffs, :endzone, :inside_20, :return_yards, :touchbacks, :yards, :out_of_bounds
|
4
|
+
attr_accessor :kickoffs, :endzone, :inside_20, :return_yards, :touchbacks, :yards, :out_of_bounds, :average
|
5
5
|
|
6
6
|
def set_stats
|
7
|
-
@kickoffs = response["kickoffs"]
|
7
|
+
@kickoffs = response["kickoffs"] || response['kicks'] || response['number']
|
8
8
|
@endzone = response["endzone"]
|
9
|
-
@inside_20 = response["inside_20"]
|
10
|
-
@return_yards = response["return_yards"]
|
11
|
-
@touchbacks = response["touchbacks"]
|
12
|
-
@yards = response["yards"]
|
13
|
-
@
|
9
|
+
@inside_20 = response["inside_20"] || response['in20']
|
10
|
+
@return_yards = response["return_yards"] || response['ret_yds']
|
11
|
+
@touchbacks = response["touchbacks"] || response['tb']
|
12
|
+
@yards = response["yards"] || response['yds']
|
13
|
+
@average = response['avg'] || (@yards.to_f / @kickoffs.to_i)
|
14
|
+
@out_of_bounds = response["out_of_bounds"] # unknown ncaafb
|
14
15
|
end
|
15
16
|
end
|
16
17
|
|
17
18
|
end
|
18
19
|
end
|
20
|
+
# ncaafb = {"kicks"=>10, "yds"=>606, "net_yds"=>411, "lg"=>65, "endzone"=>3, "in20"=>3, "tb"=>2, "ret"=>7, "avg"=>60.6, "net_avg"=>41.1, "ret_yds"=>195, "avg_ret"=>27.857, "in20_pct"=>30.0, "tb_pct"=>20.0}
|
@@ -4,7 +4,7 @@ module Sportradar
|
|
4
4
|
attr_accessor :returns, :yards, :touchdowns, :blk_fg_touchdowns, :blk_punt_touchdowns, :fg_return_touchdowns, :ez_rec_touchdowns
|
5
5
|
|
6
6
|
def set_stats
|
7
|
-
@returns = response["returns"]
|
7
|
+
@returns = response["returns"] || response['number']
|
8
8
|
@yards = response["yards"]
|
9
9
|
@touchdowns = response["touchdowns"]
|
10
10
|
@blk_fg_touchdowns = response["blk_fg_touchdowns"]
|
@@ -4,21 +4,23 @@ module Sportradar
|
|
4
4
|
attr_accessor :attempts, :completions, :cmp_pct, :yards, :avg_yards, :sacks, :sack_yards, :touchdowns, :longest, :interceptions, :rating, :longest_touchdown, :air_yards, :net_yards, :redzone_attempts
|
5
5
|
|
6
6
|
def set_stats
|
7
|
-
@attempts = response["attempts"]
|
8
|
-
@completions = response["completions"]
|
7
|
+
@attempts = response["attempts"] || response['att']
|
8
|
+
@completions = response["completions"] || response['cmp']
|
9
9
|
@cmp_pct = response["cmp_pct"]
|
10
|
-
|
11
|
-
@
|
12
|
-
@
|
13
|
-
@
|
14
|
-
@
|
15
|
-
@
|
16
|
-
@
|
10
|
+
# 'yards' is air yards, which does not include sack yardage. air_yards is for college, net_yards for NFL
|
11
|
+
@yards = response["yards"] || response['yds']
|
12
|
+
@avg_yards = response["avg_yards"] || response['avg']
|
13
|
+
@sacks = response["sacks"] || response['sk']
|
14
|
+
@sack_yards = response["sack_yards"] || response['sk_yds']
|
15
|
+
@touchdowns = response["touchdowns"] || response['td']
|
16
|
+
@longest = response["longest"] || response['lg']
|
17
|
+
@interceptions = response["interceptions"] || response['int']
|
17
18
|
@rating = response["rating"]
|
18
19
|
@longest_touchdown = response["longest_touchdown"]
|
19
20
|
@air_yards = response["air_yards"]
|
20
|
-
|
21
|
-
@
|
21
|
+
# passing net_yards is the correct measure for team stats, as it includes sack yardage
|
22
|
+
@net_yards = response["net_yards"]
|
23
|
+
@redzone_attempts = response["redzone_attempts"] || response['rz_att']
|
22
24
|
end
|
23
25
|
end
|
24
26
|
|
@@ -7,8 +7,8 @@ module Sportradar
|
|
7
7
|
|
8
8
|
def set_stats
|
9
9
|
@response = (response.dig(1) || {}) if response.is_a? Array
|
10
|
-
@penalties = response.dig('penalties')
|
11
|
-
@yards = response.dig('yards')
|
10
|
+
@penalties = response.dig('penalties') || response['num']
|
11
|
+
@yards = response.dig('yards') || response['yds']
|
12
12
|
end
|
13
13
|
|
14
14
|
def formatted
|
@@ -5,14 +5,15 @@ module Sportradar
|
|
5
5
|
|
6
6
|
def set_stats
|
7
7
|
@returns = response["returns"]
|
8
|
-
@yards = response["yards"]
|
9
|
-
@avg_yards = response["avg_yards"]
|
10
|
-
@touchdowns = response["touchdowns"]
|
11
|
-
@longest = response["longest"]
|
12
|
-
@faircatches = response["faircatches"]
|
13
|
-
@longest_touchdown = response["longest_touchdown"]
|
8
|
+
@yards = response["yards"] || response['yds']
|
9
|
+
@avg_yards = response["avg_yards"] || response['avg']
|
10
|
+
@touchdowns = response["touchdowns"] || response['td']
|
11
|
+
@longest = response["longest"] || response['lg']
|
12
|
+
@faircatches = response["faircatches"] || response['fc']
|
13
|
+
@longest_touchdown = response["longest_touchdown"] # unknown ncaafb
|
14
14
|
end
|
15
15
|
end
|
16
16
|
|
17
17
|
end
|
18
18
|
end
|
19
|
+
# ncaafb = {"returns"=>2, "yds"=>1, "fc"=>1, "lg"=>1, "td"=>0, "avg"=>0.5, "yds_10_pls"=>0, "yds_20_pls"=>0, "yds_30_pls"=>0, "yds_40_pls"=>0, "yds_50_pls"=>0}
|
@@ -4,18 +4,20 @@ module Sportradar
|
|
4
4
|
attr_accessor :avg_yards, :yards, :attempts, :blocked, :longest, :touchbacks, :inside_20, :avg_net_yards, :return_yards, :net_yards
|
5
5
|
|
6
6
|
def set_stats
|
7
|
-
@avg_yards = response["avg_yards"]
|
8
|
-
@yards = response["yards"]
|
9
|
-
@attempts = response["attempts"]
|
10
|
-
@blocked = response["blocked"]
|
11
|
-
@longest = response["longest"]
|
12
|
-
@touchbacks = response["touchbacks"]
|
13
|
-
@inside_20 = response["inside_20"]
|
14
|
-
@avg_net_yards = response["avg_net_yards"]
|
15
|
-
@return_yards = response["return_yards"]
|
16
|
-
@net_yards = response["net_yards"]
|
7
|
+
@avg_yards = response["avg_yards"] || response['avg']
|
8
|
+
@yards = response["yards"] || response['yds']
|
9
|
+
@attempts = response["attempts"] || response['punts']
|
10
|
+
@blocked = response["blocked"] || response['blk']
|
11
|
+
@longest = response["longest"] || response['lg']
|
12
|
+
@touchbacks = response["touchbacks"] || response['tb']
|
13
|
+
@inside_20 = response["inside_20"] || response['in20']
|
14
|
+
@avg_net_yards = response["avg_net_yards"] || response['net_avg']
|
15
|
+
@return_yards = response["return_yards"] || response['return_yards']
|
16
|
+
@net_yards = response["net_yards"] # unknown ncaafb
|
17
17
|
end
|
18
18
|
end
|
19
19
|
|
20
20
|
end
|
21
21
|
end
|
22
|
+
|
23
|
+
# ncaafb = {"punts"=>3, "yds"=>94, "net_yds"=>94, "lg"=>39, "blk"=>0, "in20"=>2, "tb"=>0, "ret"=>0, "sfty"=>0, "avg"=>31.333, "net_avg"=>31.333, "ret_yds"=>0, "avg_ret"=>0.0, "in20_pct"=>66.667, "tb_pct"=>0.0}
|
@@ -4,18 +4,19 @@ module Sportradar
|
|
4
4
|
attr_accessor :avg_yards, :yards, :touchdowns, :longest, :longest_touchdown, :targets, :receptions, :yards_after_catch, :redzone_targets, :air_yards
|
5
5
|
|
6
6
|
def set_stats
|
7
|
-
@
|
8
|
-
@
|
9
|
-
@
|
10
|
-
@longest = response["longest"]
|
7
|
+
@yards = response["yards"] || response['yds']
|
8
|
+
@touchdowns = response["touchdowns"] || response['td']
|
9
|
+
@longest = response["longest"] || response['lg']
|
11
10
|
@longest_touchdown = response["longest_touchdown"]
|
12
|
-
@targets = response["targets"]
|
13
|
-
@receptions = response["receptions"]
|
14
|
-
@yards_after_catch = response["yards_after_catch"]
|
15
|
-
@redzone_targets = response["redzone_targets"]
|
16
|
-
@air_yards = response["air_yards"]
|
11
|
+
@targets = response["targets"] || response['tar']
|
12
|
+
@receptions = response["receptions"] || response['rec']
|
13
|
+
@yards_after_catch = response["yards_after_catch"] || response['yac']
|
14
|
+
@redzone_targets = response["redzone_targets"] || response['rz_tar']
|
15
|
+
@air_yards = response["air_yards"] # unknown ncaafb
|
16
|
+
@avg_yards = response["avg_yards"] || (@yards.to_f / @receptions.to_i)
|
17
17
|
end
|
18
18
|
end
|
19
19
|
|
20
20
|
end
|
21
21
|
end
|
22
|
+
# ncaafb = {"tar"=>54, "rec"=>38, "yds"=>441, "yac"=>441, "fd"=>19, "avg"=>11.605, "td"=>4, "lg"=>34, "rz_tar"=>8, "fum"=>0, "yds_10_pls"=>9, "yds_20_pls"=>3, "yds_30_pls"=>3, "yds_40_pls"=>0, "yds_50_pls"=>0}
|