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.
Files changed (110) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile.lock +28 -26
  3. data/README.md +7 -6
  4. data/lib/sportradar/api/baseball/{REAME.md → README.md} +0 -0
  5. data/lib/sportradar/api/baseball/game.rb +29 -2
  6. data/lib/sportradar/api/baseball/mlb/hierarchy.rb +1 -0
  7. data/lib/sportradar/api/baseball/record.rb +0 -4
  8. data/lib/sportradar/api/baseball/venue.rb +2 -1
  9. data/lib/sportradar/api/basketball/game.rb +2 -2
  10. data/lib/sportradar/api/basketball/record.rb +0 -4
  11. data/lib/sportradar/api/basketball/venue.rb +2 -1
  12. data/lib/sportradar/api/data.rb +3 -3
  13. data/lib/sportradar/api/football/README.md +62 -0
  14. data/lib/sportradar/api/football/drive.rb +105 -0
  15. data/lib/sportradar/api/football/event.rb +33 -0
  16. data/lib/sportradar/api/football/game.rb +389 -0
  17. data/lib/sportradar/api/football/game_stats.rb +135 -0
  18. data/lib/sportradar/api/football/ncaafb/api.rb +76 -0
  19. data/lib/sportradar/api/football/ncaafb/conference.rb +53 -0
  20. data/lib/sportradar/api/football/ncaafb/division.rb +42 -0
  21. data/lib/sportradar/api/football/ncaafb/drive.rb +16 -0
  22. data/lib/sportradar/api/football/ncaafb/game.rb +110 -0
  23. data/lib/sportradar/api/football/ncaafb/play.rb +20 -0
  24. data/lib/sportradar/api/football/ncaafb/player.rb +31 -0
  25. data/lib/sportradar/api/football/ncaafb/quarter.rb +15 -0
  26. data/lib/sportradar/api/football/ncaafb/subdivision.rb +43 -0
  27. data/lib/sportradar/api/football/ncaafb/team.rb +45 -0
  28. data/lib/sportradar/api/football/ncaafb/week.rb +24 -0
  29. data/lib/sportradar/api/football/ncaafb.rb +273 -0
  30. data/lib/sportradar/api/football/nfl/api.rb +76 -0
  31. data/lib/sportradar/api/football/nfl/conference.rb +35 -0
  32. data/lib/sportradar/api/football/nfl/division.rb +37 -0
  33. data/lib/sportradar/api/football/nfl/drive.rb +19 -0
  34. data/lib/sportradar/api/football/nfl/event.rb +19 -0
  35. data/lib/sportradar/api/football/nfl/game.rb +77 -0
  36. data/lib/sportradar/api/football/nfl/play.rb +20 -0
  37. data/lib/sportradar/api/football/nfl/player.rb +31 -0
  38. data/lib/sportradar/api/football/nfl/quarter.rb +15 -0
  39. data/lib/sportradar/api/football/nfl/team.rb +42 -0
  40. data/lib/sportradar/api/football/nfl/week.rb +24 -0
  41. data/lib/sportradar/api/football/nfl.rb +293 -0
  42. data/lib/sportradar/api/football/play.rb +93 -0
  43. data/lib/sportradar/api/football/player.rb +111 -0
  44. data/lib/sportradar/api/football/quarter.rb +42 -0
  45. data/lib/sportradar/api/football/record.rb +48 -0
  46. data/lib/sportradar/api/football/scoring.rb +92 -0
  47. data/lib/sportradar/api/football/situation.rb +20 -0
  48. data/lib/sportradar/api/football/stat_pack/defense.rb +20 -20
  49. data/lib/sportradar/api/football/stat_pack/extra_points.rb +5 -4
  50. data/lib/sportradar/api/football/stat_pack/field_goals.rb +6 -5
  51. data/lib/sportradar/api/football/stat_pack/fumbles.rb +11 -9
  52. data/lib/sportradar/api/football/stat_pack/kick_returns.rb +8 -7
  53. data/lib/sportradar/api/football/stat_pack/kickoffs.rb +9 -7
  54. data/lib/sportradar/api/football/stat_pack/misc_returns.rb +1 -1
  55. data/lib/sportradar/api/football/stat_pack/passing.rb +13 -11
  56. data/lib/sportradar/api/football/stat_pack/penalties.rb +2 -2
  57. data/lib/sportradar/api/football/stat_pack/punt_returns.rb +7 -6
  58. data/lib/sportradar/api/football/stat_pack/punts.rb +12 -10
  59. data/lib/sportradar/api/football/stat_pack/receiving.rb +10 -9
  60. data/lib/sportradar/api/football/stat_pack/rushing.rb +11 -9
  61. data/lib/sportradar/api/football/stat_pack.rb +7 -3
  62. data/lib/sportradar/api/football/team.rb +160 -0
  63. data/lib/sportradar/api/football/venue.rb +25 -0
  64. data/lib/sportradar/api/football/week.rb +57 -0
  65. data/lib/sportradar/api/football.rb +43 -0
  66. data/lib/sportradar/api/mma/venue.rb +1 -1
  67. data/lib/sportradar/api/request.rb +19 -2
  68. data/lib/sportradar/api/version.rb +1 -1
  69. data/lib/sportradar/api.rb +0 -41
  70. metadata +41 -43
  71. data/lib/sportradar/api/ncaafb/drive.rb +0 -89
  72. data/lib/sportradar/api/ncaafb/game.rb +0 -161
  73. data/lib/sportradar/api/ncaafb/play.rb +0 -39
  74. data/lib/sportradar/api/ncaafb/player.rb +0 -61
  75. data/lib/sportradar/api/ncaafb/quarter.rb +0 -37
  76. data/lib/sportradar/api/ncaafb/season.rb +0 -71
  77. data/lib/sportradar/api/ncaafb/team.rb +0 -69
  78. data/lib/sportradar/api/ncaafb/week.rb +0 -33
  79. data/lib/sportradar/api/ncaafb.rb +0 -185
  80. data/lib/sportradar/api/nfl/.play_statistics.rb.swo +0 -0
  81. data/lib/sportradar/api/nfl/broadcast.rb +0 -13
  82. data/lib/sportradar/api/nfl/changelog.rb +0 -17
  83. data/lib/sportradar/api/nfl/coach.rb +0 -17
  84. data/lib/sportradar/api/nfl/conference.rb +0 -17
  85. data/lib/sportradar/api/nfl/depth_chart.rb +0 -47
  86. data/lib/sportradar/api/nfl/division.rb +0 -16
  87. data/lib/sportradar/api/nfl/draft.rb +0 -16
  88. data/lib/sportradar/api/nfl/drive.rb +0 -73
  89. data/lib/sportradar/api/nfl/event.rb +0 -19
  90. data/lib/sportradar/api/nfl/franchise.rb +0 -14
  91. data/lib/sportradar/api/nfl/game.rb +0 -123
  92. data/lib/sportradar/api/nfl/game_statistic.rb +0 -133
  93. data/lib/sportradar/api/nfl/hierarchy.rb +0 -19
  94. data/lib/sportradar/api/nfl/injury.rb +0 -16
  95. data/lib/sportradar/api/nfl/league_depth_chart.rb +0 -26
  96. data/lib/sportradar/api/nfl/play.rb +0 -39
  97. data/lib/sportradar/api/nfl/play_statistics.rb +0 -249
  98. data/lib/sportradar/api/nfl/player.rb +0 -56
  99. data/lib/sportradar/api/nfl/position.rb +0 -14
  100. data/lib/sportradar/api/nfl/quarter.rb +0 -29
  101. data/lib/sportradar/api/nfl/scoring.rb +0 -25
  102. data/lib/sportradar/api/nfl/season.rb +0 -23
  103. data/lib/sportradar/api/nfl/situation.rb +0 -18
  104. data/lib/sportradar/api/nfl/statistic.rb +0 -28
  105. data/lib/sportradar/api/nfl/summary.rb +0 -17
  106. data/lib/sportradar/api/nfl/team.rb +0 -56
  107. data/lib/sportradar/api/nfl/team_depth_chart.rb +0 -44
  108. data/lib/sportradar/api/nfl/venue.rb +0 -22
  109. data/lib/sportradar/api/nfl/week.rb +0 -16
  110. 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
- @out_of_bounds = response["out_of_bounds"]
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
- @yards = response["yards"] # 'yards' is air yards, which does not include sack yardage. air_yards is for college, net_yards for NFL
11
- @avg_yards = response["avg_yards"]
12
- @sacks = response["sacks"]
13
- @sack_yards = response["sack_yards"]
14
- @touchdowns = response["touchdowns"]
15
- @longest = response["longest"]
16
- @interceptions = response["interceptions"]
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
- @net_yards = response["net_yards"] # passing net_yards is the correct measure for team stats, as it includes sack yardage
21
- @redzone_attempts = response["redzone_attempts"]
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
- @avg_yards = response["avg_yards"]
8
- @yards = response["yards"]
9
- @touchdowns = response["touchdowns"]
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}