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,16 @@
1
+ module Sportradar
2
+ module Api
3
+ module Football
4
+ class Ncaafb
5
+ class Drive < Sportradar::Api::Football::Drive
6
+
7
+ def handle_plays_and_events(data, **opts)
8
+ create_data(@plays_hash, data['actions'], klass: Play, api: api, game: self) if data['actions']
9
+ create_data(@events_hash, data['events'], klass: Event, api: api, game: self) if data['events']
10
+ end
11
+
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,110 @@
1
+ module Sportradar
2
+ module Api
3
+ module Football
4
+ class Ncaafb
5
+ class Game < Sportradar::Api::Football::Game
6
+
7
+ def initialize(data, **opts)
8
+ if data['uri']
9
+ @year, @type, @week_number, @away_alias, @home_alias = data['uri'].split('/')
10
+ end
11
+ super
12
+ end
13
+
14
+ def path_base
15
+ "#{ year }/#{ type }/#{ week_number.to_s }/#{ away_alias }/#{ home_alias }"
16
+ end
17
+
18
+ def generate_title
19
+ if home && away
20
+ "#{home.full_name} vs #{away.full_name}"
21
+ elsif home_alias && away_alias
22
+ "#{home_alias} vs #{away_alias}"
23
+ end
24
+ end
25
+
26
+ def type # Bowl games don't seem to work when they use the bowl type instead of REG
27
+ 'REG'
28
+ end
29
+
30
+
31
+ def get_extended_box
32
+ data = api.get_data(path_extended_box).to_h
33
+ ingest_extended_box(data)
34
+ end
35
+
36
+ def ingest_extended_box(data)
37
+ data = data
38
+ update(data, source: :extended_box)
39
+ check_newness(:extended_box, @clock)
40
+ data
41
+ end
42
+
43
+ def get_summary
44
+ data = api.get_data(path_summary).to_h
45
+ ingest_summary(data)
46
+ end
47
+
48
+ def queue_summary
49
+ url, headers, options, timeout = api.get_request_info(path_summary)
50
+ {url: url, headers: headers, params: options, timeout: timeout, callback: method(:ingest_summary)}
51
+ end
52
+
53
+ def ingest_summary(data)
54
+ data = data
55
+ update(data, source: :summary)
56
+ @quarter = data.delete('quarter').to_i
57
+ check_newness(:box, @clock)
58
+ check_newness(:score, @score)
59
+ data
60
+ end
61
+
62
+ def team_class
63
+ Team
64
+ end
65
+ def period_class
66
+ Quarter
67
+ end
68
+
69
+ def period_name
70
+ 'quarter'
71
+ end
72
+
73
+ def quarter_class
74
+ Sportradar::Api::Football::Ncaafb::Quarter
75
+ end
76
+
77
+
78
+ def api
79
+ @api || Sportradar::Api::Football::Ncaafb::Api.new
80
+ end
81
+
82
+ end
83
+ end
84
+ end
85
+ end
86
+ end
87
+
88
+ __END__
89
+
90
+ File.binwrite('ncaafb.bin', Marshal.dump(ncaafb))
91
+
92
+ ncaafb = Sportradar::Api::Football::Ncaafb.new(year: 2016)
93
+ ncaafb = Sportradar::Api::Football::Ncaafb.new
94
+ gg = ncaafb.games;
95
+ ncaafb = Marshal.load(File.binread('ncaafb.bin'));
96
+ g2 = ncaafb.games.sample
97
+ g = gg.first;
98
+ g = gg.sample;
99
+ g.week_number
100
+ g.year
101
+ g.type
102
+ g.path_pbp
103
+ res = g.get_pbp;
104
+
105
+ ncaafb = Marshal.load(File.binread('ncaafb.bin'));
106
+ g = ncaafb.games.first;
107
+ res = g.get_pbp;
108
+ g.quarters.first.drives[1]
109
+
110
+ g = gg.detect{|g| g.id == "b8001149-bb55-4014-a3e8-6ac0a261dfe1" } # overtime game
@@ -0,0 +1,20 @@
1
+ module Sportradar
2
+ module Api
3
+ module Football
4
+ class Ncaaf
5
+ class Play < Sportradar::Api::Football::Play
6
+
7
+ # def parse_player
8
+ # # 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.
9
+ # play_stats = @statistics.penalty || @statistics.rush || @statistics.return || @statistics.receive
10
+ # if play_stats.is_a?(Array)
11
+ # play_stats = play_stats.first
12
+ # end
13
+ # @player_id = play_stats&.player&.id
14
+ # end
15
+
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,31 @@
1
+ module Sportradar
2
+ module Api
3
+ module Football
4
+ class Ncaafb
5
+ class Player < Sportradar::Api::Football::Player
6
+
7
+ def api
8
+ @api || Sportradar::Api::Football::Ncaafb::Api.new
9
+ end
10
+
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
16
+
17
+ __END__
18
+
19
+ ncaafb = Marshal.load(File.binread('ncaafb.bin'));
20
+
21
+ t = ncaafb.teams.first;
22
+ t.get_roster;
23
+ t.players.first
24
+ t.players.first.totals
25
+
26
+ ncaafb = Marshal.load(File.binread('ncaafb.bin'));
27
+ t = ncaafb.teams.sample
28
+ data = t.get_season_stats(2016);
29
+ t.get_roster;
30
+ t.players.sample
31
+ t.players.sample.totals
@@ -0,0 +1,15 @@
1
+ module Sportradar
2
+ module Api
3
+ module Football
4
+ class Ncaafb
5
+ class Quarter < Sportradar::Api::Football::Quarter
6
+
7
+ def drive_class
8
+ Drive
9
+ end
10
+
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,43 @@
1
+ module Sportradar
2
+ module Api
3
+ module Football
4
+ class Ncaafb
5
+ class Subdivision < Data
6
+ attr_accessor :response, :id, :name, :alias
7
+
8
+ def initialize(data, **opts)
9
+ @response = data
10
+ @api = opts[:api]
11
+
12
+ @id = data["id"]
13
+ @name = data["name"]
14
+
15
+ @teams_hash = {}
16
+ @assigned_teams = nil
17
+ # binding.pry
18
+
19
+ create_data(@teams_hash, data["teams"], klass: Team, conference: self, api: @api) if data["teams"]
20
+ end
21
+
22
+ def teams
23
+ @assigned_teams || @teams_hash.values
24
+ end
25
+ def teams=(array)
26
+ @assigned_teams = array
27
+ end
28
+ def team(code_name)
29
+ teams_by_name[code_name]
30
+ end
31
+ private def teams_by_name
32
+ @teams_by_name ||= teams.map { |t| [t.alias, t] }.to_h
33
+ end
34
+ def conferences
35
+ teams.flat_map(&:conferences)
36
+ end
37
+
38
+ end
39
+ end
40
+ end
41
+ end
42
+ end
43
+
@@ -0,0 +1,45 @@
1
+ module Sportradar
2
+ module Api
3
+ module Football
4
+ class Ncaafb
5
+ class Team < Sportradar::Api::Football::Team
6
+
7
+ def players
8
+ get_roster if @players_hash.empty?
9
+ @players_hash.values
10
+ end
11
+ alias :roster :players
12
+
13
+ def player_class
14
+ Player
15
+ end
16
+
17
+ def path_roster
18
+ "#{ path_base }/roster"
19
+ end
20
+ def path_season_stats(year = season_year, season = ncaafb_season)
21
+ "#{path_base}/#{year}/#{ncaafb_season}/statistics"
22
+ end
23
+
24
+ def api
25
+ @api || Sportradar::Api::Football::Ncaafb::Api.new
26
+ end
27
+ def ncaafb_season
28
+ @type || default_season
29
+ end
30
+
31
+ end
32
+
33
+ end
34
+ end
35
+ end
36
+ end
37
+
38
+ __END__
39
+
40
+ ncaafb = Marshal.load(File.binread('ncaafb.bin'));
41
+
42
+ t = ncaafb.teams.first
43
+ data = t.get_season_stats
44
+ data = t.get_season_stats(2016)
45
+ t.players.count
@@ -0,0 +1,24 @@
1
+ module Sportradar
2
+ module Api
3
+ module Football
4
+ class Ncaafb
5
+ class Week < Sportradar::Api::Football::Week
6
+
7
+ def game_class
8
+ Game
9
+ end
10
+
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
16
+
17
+ __END__
18
+
19
+
20
+
21
+ ncaafb = Sportradar::Api::Football::Ncaafb.new
22
+ ncaafb = Sportradar::Api::Football::Ncaafb.new
23
+ res1 = ncaafb.get_schedule;
24
+ res2 = ncaafb.get_weekly_schedule;
@@ -0,0 +1,273 @@
1
+ module Sportradar
2
+ module Api
3
+ module Football
4
+ class Ncaafb < Data
5
+ attr_accessor :response, :id, :name, :alias, :type
6
+ def all_attributes
7
+ [:name, :alias, :leagues, :divisions, :teams]
8
+ end
9
+
10
+ def initialize(data = {}, **opts)
11
+ # @response = data
12
+ @api = opts[:api]
13
+ @id = data['id']
14
+ @season = opts[:year]
15
+ @type = opts[:type]
16
+
17
+ @divisions_hash = {}
18
+ @weeks_hash = {}
19
+ @games_hash = {}
20
+ @teams_hash = {}
21
+
22
+ end
23
+
24
+ def update(data, source: nil, **opts)
25
+ # update stuff
26
+ @id = data['id'] if data['id']
27
+ @season = data['season'] if data['season']
28
+ @type = data['type'] if data['type']
29
+ # @name = data.dig('league', 'name') if data.dig('league', 'name')
30
+ # @alias = data.dig('league', 'alias') if data.dig('league', 'alias')
31
+
32
+ # @year = data.dig('season', 'year') if data.dig('season', 'year')
33
+ # @type = data.dig('season', 'type') if data.dig('season', 'type')
34
+
35
+ create_data(@divisions_hash, data['divisions'], klass: Division, hierarchy: self, api: api) if data['divisions']
36
+ create_data(@teams_hash, data['teams'], klass: Team, hierarchy: self, api: api) if data['teams']
37
+
38
+ if data['weeks']
39
+ create_data(@weeks_hash, data['weeks'], klass: Week, hierarchy: self, api: @api)
40
+ end
41
+
42
+ if data['games']
43
+ if data['games'].first.keys == ['game']
44
+ data['games'].map! { |hash| hash['game'] }
45
+ end
46
+ @games_hash = create_data(@games_hash, data['games'], klass: Game, hierarchy: self, api: api)
47
+ end
48
+ end
49
+ def weeks
50
+ @weeks_hash.values
51
+ end
52
+ def divisions
53
+ @divisions_hash.values
54
+ end
55
+ def division(code_name)
56
+ divisions_by_name[code_name]
57
+ end
58
+ private def divisions_by_name
59
+ @divisions_by_name ||= divisions.map { |d| [d.alias, d] }.to_h
60
+ end
61
+ def conferences
62
+ divisions.flat_map(&:conferences)
63
+ end
64
+
65
+ def schedule
66
+ get_schedule if games.empty?
67
+ self
68
+ end
69
+
70
+ def standings
71
+ get_standings if divisions.empty? || teams.first&.record.nil?
72
+ self
73
+ end
74
+
75
+ def hierarchy
76
+ get_hierarchy if divisions.empty?
77
+ self
78
+ end
79
+
80
+ def games
81
+ get_schedule if @weeks_hash.empty?
82
+ weeks.flat_map(&:games)
83
+ end
84
+ def teams
85
+ teams = conferences.flat_map(&:teams)
86
+ if teams.empty?
87
+ if @teams_hash.empty?
88
+ get_hierarchy
89
+ conferences.flat_map(&:teams)
90
+ else
91
+ @teams_hash.values
92
+ end
93
+ else
94
+ teams
95
+ end
96
+ end
97
+ def team(team_id)
98
+ teams.detect { |team| team.id == team_id }
99
+ end
100
+
101
+ # api stuff
102
+ def api
103
+ @api || Sportradar::Api::Football::Ncaafb::Api.new
104
+ end
105
+
106
+ def default_year
107
+ (Date.today - 60).year
108
+ end
109
+ def default_date
110
+ Date.today
111
+ end
112
+ def default_season
113
+ 'reg'
114
+ end
115
+ def season_year
116
+ @season || default_year
117
+ end
118
+ alias :year :season_year
119
+ def ncaafb_season
120
+ @type || default_season
121
+ end
122
+ alias :season :ncaafb_season
123
+
124
+
125
+ # url paths
126
+ def path_base
127
+ "league"
128
+ end
129
+ def path_hierarchy(division = 'FBS')
130
+ "teams/#{division}/hierarchy"
131
+ end
132
+ def path_schedule
133
+ "#{season_year}/#{ncaafb_season}/schedule"
134
+ end
135
+ def path_weekly_schedule(ncaafb_season_week)
136
+ "#{season_year}/#{ncaafb_season}/#{ncaafb_season_week}/schedule"
137
+ end
138
+ def path_rankings(ncaafb_season_week, poll_name = 'AP25')
139
+ "polls/#{poll_name}/#{season_year}/#{ncaafb_season_week}/rankings"
140
+ end
141
+ def path_standings(division = 'FBS')
142
+ "teams/#{division}/#{season_year}/#{ncaafb_season}/standings"
143
+ end
144
+
145
+ # data retrieval
146
+
147
+ ## schedule
148
+ def get_schedule
149
+ data = api.get_data(path_schedule).to_h
150
+ ingest_schedule(data)
151
+ end
152
+
153
+ def ingest_schedule(data)
154
+ update(data, source: :weeks)
155
+ data
156
+ end
157
+
158
+ def queue_schedule
159
+ url, headers, options, timeout = api.get_request_info(path_schedule)
160
+ {url: url, headers: headers, params: options, timeout: timeout, callback: method(:ingest_schedule)}
161
+ end
162
+
163
+ ## weekly schedule
164
+ def get_weekly_schedule(ncaafb_season_week = 1)
165
+ data = api.get_data(path_weekly_schedule(ncaafb_season_week)).to_h
166
+ ingest_weekly_schedule(data)
167
+ end
168
+
169
+ def ingest_weekly_schedule(data)
170
+ # update(data, source: :weeks)
171
+ create_data(@weeks_hash, data, klass: Week, hierarchy: self, api: api)
172
+ data
173
+ end
174
+
175
+ def queue_weekly_schedule(ncaafb_season_week = 1)
176
+ url, headers, options, timeout = api.get_request_info(path_weekly_schedule(ncaafb_season_week))
177
+ {url: url, headers: headers, params: options, timeout: timeout, callback: method(:ingest_weekly_schedule)}
178
+ end
179
+
180
+ ## hierarchy
181
+ def get_hierarchy
182
+ data = api.get_data(path_hierarchy).to_h
183
+ ingest_hierarchy(data)
184
+ end
185
+
186
+ def ingest_hierarchy(data)
187
+ create_data(@divisions_hash, data, klass: Division, hierarchy: self, api: api)
188
+ data
189
+ end
190
+
191
+ def queue_hierarchy
192
+ url, headers, options, timeout = api.get_request_info(path_hierarchy)
193
+ {url: url, headers: headers, params: options, timeout: timeout, callback: method(:ingest_hierarchy)}
194
+ end
195
+
196
+ ## depth_charts
197
+ def get_depth_charts
198
+ data = api.get_data(path_depth_charts).to_h
199
+ ingest_depth_charts(data)
200
+ end
201
+
202
+ def ingest_depth_charts(data)
203
+ update(data, source: :teams)
204
+ data
205
+ end
206
+
207
+ def queue_depth_charts
208
+ url, headers, options, timeout = api.get_request_info(path_depth_charts)
209
+ {url: url, headers: headers, params: options, timeout: timeout, callback: method(:ingest_depth_charts)}
210
+ end
211
+
212
+ ## standings
213
+ def get_standings
214
+ data = api.get_data(path_standings).to_h
215
+ ingest_standings(data)
216
+ end
217
+
218
+ def ingest_standings(data)
219
+ update(data.dig('league','season'), source: :teams)
220
+ data
221
+ end
222
+
223
+ def queue_standings
224
+ url, headers, options, timeout = api.get_request_info(path_standings)
225
+ {url: url, headers: headers, params: options, timeout: timeout, callback: method(:ingest_standings)}
226
+ end
227
+
228
+ ## statistics
229
+
230
+ ## venues
231
+ # def get_venues
232
+ # data = api.get_data(path_venues).to_h
233
+ # ingest_venues(data)
234
+ # end
235
+
236
+ # def ingest_venues(data)
237
+ # update(data, source: :teams)
238
+ # data
239
+ # end
240
+
241
+ # def queue_venues
242
+ # url, headers, options, timeout = api.get_request_info(path_venues)
243
+ # {url: url, headers: headers, params: options, timeout: timeout, callback: method(:ingest_venues)}
244
+ # end
245
+
246
+ def self.sim_api
247
+ Sportradar::Api::Football::Ncaafb::Api.new('sim-t')
248
+ end
249
+ def self.simulation
250
+ new({}, api: sim_api, year: 2015, type: 'reg')
251
+ end
252
+ def self.simulations
253
+ api = sim_api
254
+ ['2015/REG/1/WKY/MSH', '2015/REG/1/KEN/FLA', '2015/REG/1/WOU/PRST'].map do |game_uri|
255
+ Game.new({'uri' => game_uri}, api: api)
256
+ end
257
+ end
258
+
259
+ end
260
+ end
261
+ end
262
+ end
263
+
264
+ __END__
265
+
266
+
267
+
268
+ ncaafb = Sportradar::Api::Football::Ncaafb.new
269
+ ncaafb = Sportradar::Api::Football::Ncaafb.new(year: 2016)
270
+ gg = ncaafb.games;
271
+ tt = ncaafb.teams;
272
+ File.binwrite('ncaafb.bin', Marshal.dump(ncaafb))
273
+ ncaafb = Marshal.load(File.binread('ncaafb.bin'));
@@ -0,0 +1,76 @@
1
+ module Sportradar
2
+ module Api
3
+ module Football
4
+ class Nfl
5
+ class Api < Request
6
+ attr_accessor :league, :access_level, :error
7
+
8
+ def initialize(access_level = 'ot')
9
+ @league = 'nfl'
10
+ raise ::Sportradar::Api::Error::InvalidAccessLevel unless allowed_access_levels.include? access_level
11
+ @access_level = access_level
12
+ end
13
+
14
+ def default_year
15
+ default_date.year
16
+ end
17
+ def default_date
18
+ Date.today - 90
19
+ end
20
+ def default_season
21
+ 'reg'
22
+ end
23
+ def default_access_level
24
+ if (ENV['SPORTRADAR_ENV'] || ENV['SPORTRADAR_ENV_MLB'] || ENV['RACK_ENV'] || ENV['RAILS_ENV']) == 'production'
25
+ 'p'
26
+ else
27
+ 'ot'
28
+ end
29
+ end
30
+
31
+ private
32
+
33
+ def content_format
34
+ 'json'
35
+ end
36
+
37
+ def request_url(path)
38
+ "/nfl-#{access_level}#{version}/#{path}"
39
+ end
40
+
41
+ def api_key
42
+ if access_level != 'ot'
43
+ ::Sportradar::Api.api_key_params('nfl', 'production')
44
+ else
45
+ ::Sportradar::Api.api_key_params('nfl')
46
+ end
47
+ end
48
+
49
+ def version
50
+ ::Sportradar::Api.version('nfl')
51
+ end
52
+
53
+ def allowed_access_levels
54
+ %w[rt p s b t ot sim]
55
+ end
56
+
57
+ def allowed_seasons
58
+ ["pre", "reg", "pst"]
59
+ end
60
+ end
61
+
62
+ end
63
+ end
64
+ end
65
+ end
66
+
67
+ __END__
68
+
69
+ nfl = Sportradar::Api::Football.Nfl.new
70
+ sw = nfl.weekly_schedule;
71
+ ss = nfl.schedule;
72
+
73
+ ss.games.count
74
+ ss.weeks.count
75
+ ss.weeks.first.response['game'].count
76
+
@@ -0,0 +1,35 @@
1
+ module Sportradar
2
+ module Api
3
+ module Football
4
+ class Nfl
5
+ class Conference < Data
6
+ attr_accessor :response, :id, :name, :alias
7
+
8
+ def initialize(data, **opts)
9
+ @response = data
10
+ @api = opts[:api]
11
+
12
+ @id = data["id"]
13
+ @divisions_hash = {}
14
+
15
+ update(data, **opts)
16
+ end
17
+
18
+ def update(data, **opts)
19
+ @name = data["name"] if data["name"]
20
+ @alias = data["alias"] if data["alias"]
21
+ create_data(@divisions_hash, data["divisions"], klass: Division, conference: self, api: @api)
22
+
23
+ self
24
+ end
25
+
26
+ def divisions
27
+ @divisions_hash.values
28
+ end
29
+
30
+ end
31
+ end
32
+ end
33
+ end
34
+ end
35
+