sportradar-api 0.13.24 → 0.19.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (51) hide show
  1. checksums.yaml +5 -5
  2. data/Gemfile.lock +18 -44
  3. data/lib/sportradar/api/baseball/game.rb +9 -0
  4. data/lib/sportradar/api/baseball/lineup.rb +8 -0
  5. data/lib/sportradar/api/baseball/mlb/api.rb +5 -5
  6. data/lib/sportradar/api/baseball/team.rb +1 -1
  7. data/lib/sportradar/api/basketball/game.rb +2 -1
  8. data/lib/sportradar/api/basketball/nba/api.rb +5 -5
  9. data/lib/sportradar/api/basketball/nba/player.rb +3 -1
  10. data/lib/sportradar/api/basketball/nba.rb +1 -0
  11. data/lib/sportradar/api/basketball/team.rb +1 -1
  12. data/lib/sportradar/api/football/game.rb +5 -1
  13. data/lib/sportradar/api/football/game_stats.rb +4 -0
  14. data/lib/sportradar/api/football/nfl/api.rb +5 -5
  15. data/lib/sportradar/api/football/nfl/team.rb +0 -4
  16. data/lib/sportradar/api/football/nfl.rb +14 -4
  17. data/lib/sportradar/api/football/player.rb +2 -2
  18. data/lib/sportradar/api/football/stat_pack.rb +4 -0
  19. data/lib/sportradar/api/football/stats_shim.rb +24 -0
  20. data/lib/sportradar/api/football/team.rb +3 -3
  21. data/lib/sportradar/api/football.rb +1 -0
  22. data/lib/sportradar/api/images.rb +14 -9
  23. data/lib/sportradar/api/odds/README.md +49 -0
  24. data/lib/sportradar/api/odds/api.rb +60 -0
  25. data/lib/sportradar/api/odds/base.rb +93 -0
  26. data/lib/sportradar/api/odds/book.rb +23 -0
  27. data/lib/sportradar/api/odds/book_market.rb +38 -0
  28. data/lib/sportradar/api/odds/competition.rb +64 -0
  29. data/lib/sportradar/api/odds/market.rb +34 -0
  30. data/lib/sportradar/api/odds/outcome.rb +35 -0
  31. data/lib/sportradar/api/odds/player.rb +29 -0
  32. data/lib/sportradar/api/odds/player_odds.rb +13 -0
  33. data/lib/sportradar/api/odds/player_prop.rb +29 -0
  34. data/lib/sportradar/api/odds/prematch_odds.rb +9 -0
  35. data/lib/sportradar/api/odds/probabilities.rb +9 -0
  36. data/lib/sportradar/api/odds/regular_odds.rb +18 -0
  37. data/lib/sportradar/api/odds/sport.rb +47 -0
  38. data/lib/sportradar/api/odds/sport_event.rb +38 -0
  39. data/lib/sportradar/api/odds.rb +19 -28
  40. data/lib/sportradar/api/request.rb +2 -2
  41. data/lib/sportradar/api/soccer/api.rb +9 -9
  42. data/lib/sportradar/api/soccer/competition.rb +322 -0
  43. data/lib/sportradar/api/soccer/match.rb +22 -8
  44. data/lib/sportradar/api/soccer/player.rb +20 -4
  45. data/lib/sportradar/api/soccer/season.rb +75 -14
  46. data/lib/sportradar/api/soccer/team.rb +15 -6
  47. data/lib/sportradar/api/soccer.rb +36 -0
  48. data/lib/sportradar/api/version.rb +1 -1
  49. data/lib/sportradar/api.rb +13 -7
  50. data/sportradar-api.gemspec +0 -2
  51. metadata +24 -35
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: efcf47e5a6970b82c0795211958c277f99dcf61d
4
- data.tar.gz: 7b786d9ae02be5189fdecad0306621c701bdd3d5
2
+ SHA256:
3
+ metadata.gz: 63ccb22baef51d07aa56fe5a22d11d07cd389038882795f073fa435993d65ca8
4
+ data.tar.gz: f147f71634d36ae1d3ed9b012bec020a8189d16a1f8a42b191fe61e29e58d9f4
5
5
  SHA512:
6
- metadata.gz: 4b810969dc532fc4d48ed7e508a8751d6e808bdc0bbafed3030c521cd2c61faa4ca71ec990201bdc28a02beddc7a37a9509bb77c1fd2e21f6d48e515f138492b
7
- data.tar.gz: 39e1ed6c33019876d4bd1b9ad58e0c6fc93149e3f927d049e74ca3ce41d6033615c0c9620414bec1710a3eaa2e5624350e64256e1244cc87e5fe6c898db4be3e
6
+ metadata.gz: 302321bce6eb8fbe408247b8ad4a24492843f0fa1572883977c61636cfb5f6b19e573ffc67f654b01d54e136bb1284502156ea61068b1cdbeda5dc6379ee80f8
7
+ data.tar.gz: 4a6a2b5867e7e5e68e396d3632d1e00e71f641d785d8d2b1a2375de63c49face44d255ed60f0313c3018bf44e4fe34962915286093ecebe1c59d75b47bbdb700
data/Gemfile.lock CHANGED
@@ -1,24 +1,25 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- sportradar-api (0.13.24)
4
+ sportradar-api (0.19.6)
5
5
  activesupport
6
6
  httparty (>= 0.14.0)
7
7
 
8
8
  GEM
9
9
  remote: https://rubygems.org/
10
10
  specs:
11
- activesupport (5.1.4)
11
+ activesupport (6.1.6)
12
12
  concurrent-ruby (~> 1.0, >= 1.0.2)
13
- i18n (~> 0.7)
14
- minitest (~> 5.1)
15
- tzinfo (~> 1.1)
13
+ i18n (>= 1.6, < 2)
14
+ minitest (>= 5.1)
15
+ tzinfo (~> 2.0)
16
+ zeitwerk (~> 2.3)
16
17
  addressable (2.5.1)
17
18
  public_suffix (~> 2.0, >= 2.0.2)
18
19
  codeclimate-test-reporter (1.0.8)
19
20
  simplecov (<= 0.13)
20
21
  coderay (1.1.1)
21
- concurrent-ruby (1.0.5)
22
+ concurrent-ruby (1.1.10)
22
23
  coveralls (0.8.19)
23
24
  json (>= 1.8, < 3)
24
25
  simplecov (~> 0.12.0)
@@ -28,54 +29,29 @@ GEM
28
29
  crack (0.4.3)
29
30
  safe_yaml (~> 1.0.0)
30
31
  docile (1.1.5)
31
- dotenv (2.2.1)
32
- ffi (1.9.18)
33
- formatador (0.2.5)
34
- guard (2.14.1)
35
- formatador (>= 0.2.4)
36
- listen (>= 2.7, < 4.0)
37
- lumberjack (~> 1.0)
38
- nenv (~> 0.1)
39
- notiffany (~> 0.0)
40
- pry (>= 0.9.12)
41
- shellany (~> 0.0)
42
- thor (>= 0.18.1)
43
- guard-compat (1.2.1)
44
- guard-minitest (2.4.6)
45
- guard-compat (~> 1.2)
46
- minitest (>= 3.0)
32
+ dotenv (2.7.6)
47
33
  hashdiff (0.3.4)
48
- httparty (0.15.6)
34
+ httparty (0.20.0)
35
+ mime-types (~> 3.0)
49
36
  multi_xml (>= 0.5.2)
50
- i18n (0.9.5)
37
+ i18n (1.10.0)
51
38
  concurrent-ruby (~> 1.0)
52
39
  json (2.1.0)
53
- listen (3.1.5)
54
- rb-fsevent (~> 0.9, >= 0.9.4)
55
- rb-inotify (~> 0.9, >= 0.9.7)
56
- ruby_dep (~> 1.2)
57
- lumberjack (1.0.12)
58
40
  method_source (0.8.2)
41
+ mime-types (3.4.1)
42
+ mime-types-data (~> 3.2015)
43
+ mime-types-data (3.2022.0105)
59
44
  minitest (5.10.2)
60
45
  minitest-focus (1.1.2)
61
46
  minitest (>= 4, < 6)
62
47
  multi_xml (0.6.0)
63
- nenv (0.3.0)
64
- notiffany (0.1.1)
65
- nenv (~> 0.1)
66
- shellany (~> 0.0)
67
48
  pry (0.10.4)
68
49
  coderay (~> 1.1.0)
69
50
  method_source (~> 0.8.1)
70
51
  slop (~> 3.4)
71
52
  public_suffix (2.0.5)
72
53
  rake (10.5.0)
73
- rb-fsevent (0.9.8)
74
- rb-inotify (0.9.10)
75
- ffi (>= 0.5.0, < 2)
76
- ruby_dep (1.5.0)
77
54
  safe_yaml (1.0.4)
78
- shellany (0.0.1)
79
55
  simplecov (0.12.0)
80
56
  docile (~> 1.1.0)
81
57
  json (>= 1.8, < 3)
@@ -85,15 +61,15 @@ GEM
85
61
  term-ansicolor (1.6.0)
86
62
  tins (~> 1.0)
87
63
  thor (0.19.4)
88
- thread_safe (0.3.6)
89
64
  tins (1.14.0)
90
- tzinfo (1.2.5)
91
- thread_safe (~> 0.1)
65
+ tzinfo (2.0.4)
66
+ concurrent-ruby (~> 1.0)
92
67
  vcr (3.0.3)
93
68
  webmock (3.0.1)
94
69
  addressable (>= 2.3.6)
95
70
  crack (>= 0.3.2)
96
71
  hashdiff
72
+ zeitwerk (2.5.4)
97
73
 
98
74
  PLATFORMS
99
75
  ruby
@@ -103,8 +79,6 @@ DEPENDENCIES
103
79
  codeclimate-test-reporter
104
80
  coveralls
105
81
  dotenv
106
- guard
107
- guard-minitest
108
82
  minitest (~> 5.0)
109
83
  minitest-focus
110
84
  pry
@@ -115,4 +89,4 @@ DEPENDENCIES
115
89
  webmock
116
90
 
117
91
  BUNDLED WITH
118
- 1.15.3
92
+ 1.17.2
@@ -43,6 +43,10 @@ module Sportradar
43
43
  {}
44
44
  end
45
45
 
46
+ def period
47
+ @innings
48
+ end
49
+
46
50
  def tied?
47
51
  @score[away_id].to_i == @score[home_id].to_i
48
52
  end
@@ -103,6 +107,7 @@ module Sportradar
103
107
  end
104
108
 
105
109
  def update(data, source: nil, **opts)
110
+ @response.merge!(data)
106
111
  # via pbp
107
112
  @status = data['status'] if data['status']
108
113
  @coverage = data['coverage'] if data['coverage']
@@ -350,6 +355,10 @@ module Sportradar
350
355
  }.freeze[self.count['inning_half']]
351
356
  end
352
357
 
358
+ def clock
359
+ half_short
360
+ end
361
+
353
362
  def postponed?
354
363
  'postponed' == status
355
364
  end
@@ -28,6 +28,14 @@ module Sportradar
28
28
  end
29
29
  end
30
30
 
31
+ def full_home
32
+ @home_team_lineup
33
+ end
34
+
35
+ def full_away
36
+ @away_team_lineup
37
+ end
38
+
31
39
  def update_from_lineup_event(data)
32
40
  if data.dig('team_id') == game.home_id
33
41
  update_home(data, data.dig('order'))
@@ -27,9 +27,9 @@ module Sportradar
27
27
  end
28
28
  def default_access_level
29
29
  if (ENV['SPORTRADAR_ENV_MLB'] || ENV['SPORTRADAR_ENV'] || ENV['RACK_ENV'] || ENV['RAILS_ENV']) == 'production'
30
- 'p'
30
+ 'production'
31
31
  else
32
- 't'
32
+ 'trial'
33
33
  end
34
34
  end
35
35
 
@@ -40,11 +40,11 @@ module Sportradar
40
40
  private
41
41
 
42
42
  def request_url(path)
43
- "/mlb-#{access_level}#{version}/#{path}"
43
+ "/mlb/#{access_level}/v#{version}/en/#{path}"
44
44
  end
45
45
 
46
46
  def api_key
47
- if !['t', 'sim'].include?(access_level)
47
+ if !['trial', 'sim'].include?(access_level)
48
48
  Sportradar::Api.api_key_params('mlb', 'production')
49
49
  elsif 'sim' == access_level
50
50
  Sportradar::Api.api_key_params('mlb', 'simulation')
@@ -58,7 +58,7 @@ module Sportradar
58
58
  end
59
59
 
60
60
  def allowed_access_levels
61
- %w[p t sim]
61
+ %w[production trial sim]
62
62
  end
63
63
 
64
64
  def allowed_seasons
@@ -128,7 +128,7 @@ module Sportradar
128
128
  "teams/#{ id }"
129
129
  end
130
130
  def path_base_stats(season_year = api.default_year, default_season = api.default_season)
131
- "seasontd/#{season_year}/#{default_season}/teams/#{id}"
131
+ "seasons/#{season_year}/#{default_season}/teams/#{id}"
132
132
  end
133
133
  def path_roster
134
134
  "#{ path_base }/profile"
@@ -2,7 +2,7 @@ module Sportradar
2
2
  module Api
3
3
  module Basketball
4
4
  class Game < Data
5
- attr_accessor :response, :id, :title, :home_id, :away_id, :score, :status, :coverage, :scheduled, :venue, :broadcast, :clock, :duration, :attendance, :team_stats, :player_stats, :changes, :media_timeouts
5
+ attr_accessor :response, :id, :title, :home_id, :away_id, :score, :status, :coverage, :time_zone, :scheduled, :venue, :broadcast, :clock, :duration, :attendance, :team_stats, :player_stats, :changes, :media_timeouts
6
6
 
7
7
  attr_accessor :period
8
8
  @all_hash = {}
@@ -94,6 +94,7 @@ module Sportradar
94
94
  @away = team_class.new(data['away'], api: api, game: self) if data['away']
95
95
  @title = data['title'] || @title || (home && away && "#{home.full_name} vs #{away.full_name}")
96
96
 
97
+ @time_zone = data.dig("time_zones", "venue") if data.dig("time_zones", "venue")
97
98
  @duration = data['duration'] if data['duration']
98
99
  @clock = data['clock'] if data['clock']
99
100
  @attendance = data['attendance'] if data['attendance']
@@ -22,9 +22,9 @@ module Sportradar
22
22
  end
23
23
  def default_access_level
24
24
  if (ENV['SPORTRADAR_ENV'] || ENV['RACK_ENV'] || ENV['RAILS_ENV']) == 'production'
25
- 'p'
25
+ 'production'
26
26
  else
27
- 't'
27
+ 'trial'
28
28
  end
29
29
  end
30
30
 
@@ -35,11 +35,11 @@ module Sportradar
35
35
  private
36
36
 
37
37
  def request_url(path)
38
- "/nba-#{access_level}#{version}/#{path}"
38
+ "/nba/#{access_level}/v#{version}/en/#{path}"
39
39
  end
40
40
 
41
41
  def api_key
42
- if !['t', 'sim'].include?(access_level) || (access_level == 'sim' && default_access_level == 'p')
42
+ if !['trial', 'sim'].include?(access_level) || (access_level == 'sim' && default_access_level == 'production')
43
43
  Sportradar::Api.api_key_params('nba', 'production')
44
44
  else
45
45
  Sportradar::Api.api_key_params('nba')
@@ -51,7 +51,7 @@ module Sportradar
51
51
  end
52
52
 
53
53
  def allowed_access_levels
54
- %w[p t sim]
54
+ %w[production trial sim]
55
55
  end
56
56
 
57
57
  def allowed_seasons
@@ -3,7 +3,7 @@ module Sportradar
3
3
  module Basketball
4
4
  class Nba
5
5
  class Player < Data
6
- attr_accessor :response, :id, :number, :full_name, :first_name, :last_name, :position, :birth_place, :college, :height, :weight, :averages, :totals, :draft, :stats
6
+ attr_accessor :response, :id, :number, :full_name, :first_name, :last_name, :position, :birth_place, :college, :height, :weight, :averages, :totals, :draft, :stats, :team, :not_playing_reason, :not_playing_description
7
7
  # @all_hash = {}
8
8
  # def self.new(data, **opts)
9
9
  # existing = @all_hash[data['id']]
@@ -57,6 +57,8 @@ module Sportradar
57
57
  @experience = data['experience'] if data['experience'] # "3",
58
58
  @birth_place = data['birth_place'].gsub(',,', ', ') if data['birth_place'] # "Benin City,, NGA",
59
59
  @updated = data['updated'] if data['updated'] # "2016-07-08T12:11:59+00:00",
60
+ @not_playing_reason = data['not_playing_reason'] if data['not_playing_reason'] # "Inactive - Injury/Illness"
61
+ @not_playing_description = data['not_playing_description'] if data['not_playing_description'] # "Left Ankle; Sprain"
60
62
 
61
63
  # NBA specific below
62
64
 
@@ -194,6 +194,7 @@ end
194
194
  __END__
195
195
 
196
196
  st = sr.standings;
197
+ sc = sr.schedule;
197
198
  sr = Sportradar::Api::Basketball::Nba.new
198
199
  lh = sr.hierarchy;
199
200
  t = lh.teams.first;
@@ -132,7 +132,7 @@ module Sportradar
132
132
  "teams/#{ id }"
133
133
  end
134
134
  def path_base_stats(season_year = api.default_year, default_season = api.default_season)
135
- "seasontd/#{season_year}/#{default_season}/teams/#{id}"
135
+ "seasons/#{season_year}/#{default_season}/teams/#{id}"
136
136
  end
137
137
  def path_roster
138
138
  "#{ path_base }/profile"
@@ -20,7 +20,7 @@ module Sportradar
20
20
 
21
21
  @teams_hash = {}
22
22
  @team_stats = {}
23
- @player_stats = {}
23
+ @player_stats = StatsShim.new(self)
24
24
 
25
25
  @quarters_hash = {}
26
26
  @drives_hash = {}
@@ -394,6 +394,10 @@ module Sportradar
394
394
  ingest_statistics(data)
395
395
  end
396
396
 
397
+ def get_summary
398
+ get_statistics
399
+ end
400
+
397
401
  def queue_statistics
398
402
  url, headers, options, timeout = api.get_request_info(path_statistics)
399
403
  {url: url, headers: headers, params: options, timeout: timeout, callback: method(:ingest_statistics)}
@@ -29,6 +29,10 @@ module Sportradar
29
29
  @return_yards = data.dig('summary', "return_yards")
30
30
  end
31
31
 
32
+ def dig(*args)
33
+ args.inject(self) { |memo, arg| memo.public_send(arg) }
34
+ end
35
+
32
36
  def turnovers
33
37
  @turnovers || passing.interceptions + fumbles&.lost_fumbles.to_i
34
38
  end
@@ -22,9 +22,9 @@ module Sportradar
22
22
  end
23
23
  def default_access_level
24
24
  if (ENV['SPORTRADAR_ENV'] || ENV['SPORTRADAR_ENV_NFL'] || ENV['RACK_ENV'] || ENV['RAILS_ENV']) == 'production'
25
- 'o'
25
+ 'production'
26
26
  else
27
- 'ot'
27
+ 'trial'
28
28
  end
29
29
  end
30
30
 
@@ -35,11 +35,11 @@ module Sportradar
35
35
  end
36
36
 
37
37
  def request_url(path)
38
- "/nfl-#{access_level}#{version}/#{path}"
38
+ "/nfl/official/#{access_level}/v#{version}/en/#{path}"
39
39
  end
40
40
 
41
41
  def api_key
42
- if !['ot', 'sim'].include?(access_level) || (access_level == 'sim' && default_access_level == 'o')
42
+ if !['trial', 'sim'].include?(access_level) || (access_level == 'sim' && default_access_level == 'production')
43
43
  ::Sportradar::Api.api_key_params('nfl', 'production')
44
44
  else
45
45
  ::Sportradar::Api.api_key_params('nfl')
@@ -51,7 +51,7 @@ module Sportradar
51
51
  end
52
52
 
53
53
  def allowed_access_levels
54
- %w[rt o p s b t ot sim]
54
+ %w[production trial sim]
55
55
  end
56
56
 
57
57
  def allowed_seasons
@@ -14,10 +14,6 @@ module Sportradar
14
14
  Player
15
15
  end
16
16
 
17
- def path_season_stats(year = season_year, season = nfl_season)
18
- "seasontd/#{year}/#{nfl_season}/teams/#{ id }/statistics"
19
- end
20
-
21
17
  def api
22
18
  @api || Sportradar::Api::Football::Nfl::Api.new
23
19
  end
@@ -159,13 +159,13 @@ module Sportradar
159
159
  "games/#{season_year}/#{nfl_season}/#{nfl_season_week}/schedule"
160
160
  end
161
161
  def path_weekly_depth_charts(nfl_season_week)
162
- "seasontd/#{season_year}/#{nfl_season}/#{nfl_season_week}/depth_charts"
162
+ "seasons/#{season_year}/#{nfl_season}/#{nfl_season_week}/depth_charts"
163
163
  end
164
164
  def path_weekly_depth_injuries(nfl_season_week)
165
- "seasontd/#{season_year}/#{nfl_season}/#{nfl_season_week}/injuries"
165
+ "seasons/#{season_year}/#{nfl_season}/#{nfl_season_week}/injuries"
166
166
  end
167
167
  def path_standings
168
- "seasontd/#{season_year}/standings"
168
+ "seasons/#{season_year}/standings"
169
169
  end
170
170
 
171
171
  # data retrieval
@@ -320,4 +320,14 @@ File.binwrite('nfl.bin', Marshal.dump(nfl))
320
320
  nfl = Sportradar::Api::Football::Nfl.new
321
321
  nfl.season = 2016
322
322
  res = nfl.get_weekly_depth_charts
323
- dc = nfl.instance_variable_get(:@depth_charts_hash)
323
+ dc = nfl.instance_variable_get(:@depth_charts_hash)
324
+
325
+
326
+ nfl = Sportradar::Api::Football::Nfl.new
327
+ nfl.season = 2021
328
+ nfl.get_schedule
329
+ g = nfl.games.sample
330
+ data = g.get_statistics
331
+ g.team_stats
332
+ g.team_stats.values.first.dig('rushing', 'yards')
333
+
@@ -2,7 +2,7 @@ module Sportradar
2
2
  module Api
3
3
  module Football
4
4
  class Player < Data
5
- attr_accessor :response, :id, :preferred_name, :number, :name_full, :name_first, :name_last, :position, :birth_place, :college, :height, :weight, :averages, :totals, :draft, :depth, :api, :stats
5
+ attr_accessor :response, :id, :preferred_name, :number, :name_full, :name_first, :name_last, :position, :birth_place, :college, :height, :weight, :averages, :totals, :draft, :depth, :api, :stats, :team
6
6
 
7
7
  def initialize(data, **opts)
8
8
  @response = data
@@ -124,4 +124,4 @@ t = ncaafb.teams.sample
124
124
  data = t.get_season_stats(2016);
125
125
  t.get_roster;
126
126
  t.players.sample
127
- t.players.sample.totals
127
+ t.players.sample.totals
@@ -15,6 +15,10 @@ module Sportradar
15
15
  set_stats
16
16
  end
17
17
 
18
+ def for_player(id)
19
+ @players && @players.detect { |stat| stat.player.id == id }
20
+ end
21
+
18
22
  private
19
23
 
20
24
  def set_stats
@@ -0,0 +1,24 @@
1
+ module Sportradar
2
+ module Api
3
+ module Football
4
+ class StatsShim
5
+ attr_reader :game
6
+
7
+ def initialize(game)
8
+ @game = game
9
+ end
10
+
11
+ def dig(player_id, category, stat)
12
+ game.team_stats.each_value do |stats|
13
+ player = stats.public_send(category).for_player(player_id)
14
+ if player
15
+ return player.send(stat)
16
+ end
17
+ end
18
+ nil
19
+ end
20
+
21
+ end
22
+ end
23
+ end
24
+ end
@@ -139,13 +139,13 @@ module Sportradar
139
139
  "teams/#{ id }"
140
140
  end
141
141
  def path_base_stats(year = season_year, season = default_season)
142
- "seasontd/#{year}/#{season}/teams/#{id}"
142
+ "seasons/#{year}/#{season}/teams/#{id}"
143
143
  end
144
144
  def path_roster
145
145
  "#{ path_base }/profile" # nfl is profile, ncaa is roster
146
146
  end
147
- def path_season_stats
148
- "#{ path_base_stats }/statistics"
147
+ def path_season_stats(year = season_year, season = default_season)
148
+ "#{ path_base_stats(year, season) }/statistics"
149
149
  end
150
150
 
151
151
 
@@ -1,3 +1,4 @@
1
+ require "sportradar/api/football/stats_shim"
1
2
  require "sportradar/api/football/stat_pack"
2
3
  require "sportradar/api/football/stat_pack/defense"
3
4
  require "sportradar/api/football/stat_pack/extra_points"
@@ -3,7 +3,7 @@ module Sportradar
3
3
  module Api
4
4
  class Images < Request
5
5
  attr_accessor :sport, :league, :access_level, :nfl_premium, :usat_premium, :event_id, :date, :live_image_request
6
- def initialize( sport, access_level: 't', league: nil, nfl_premium: false, usat_premium: false, event_id: nil, date: nil )
6
+ def initialize( sport, access_level: 't', league: nil, nfl_premium: false, usat_premium: false, event_id: nil, date: nil, year: nil )
7
7
  raise Sportradar::Api::Error::InvalidSport unless allowed_sports.include? sport
8
8
  @sport = sport
9
9
  raise Sportradar::Api::Error::InvalidLeague unless soccer_leagues.include?(league) || league.nil?
@@ -12,6 +12,7 @@ module Sportradar
12
12
  @usat_premium = usat_premium
13
13
  @event_id = event_id
14
14
  @date = date.strftime("%Y/%m/%d") if date
15
+ @year = year
15
16
  raise Sportradar::Api::Error::InvalidAccessLevel unless allowed_access_levels.include? access_level
16
17
  @access_level = access_level
17
18
  end
@@ -23,8 +24,9 @@ module Sportradar
23
24
  else
24
25
  response = get request_url("#{league}/#{image_type}/players/manifest")
25
26
  end
26
- elsif nfl_premium || usat_premium || sport == 'ncaafb'
27
- response = get request_url("#{image_type}/players/#{year}/manifest")
27
+ elsif nfl_premium || usat_premium || sport == 'ncaafb' || sport == 'nba'
28
+ request_year = @year || (Date.today.month < 8 ? Date.today.year - 1 : Date.today.year)
29
+ response = get request_url("#{image_type}/players/#{request_year}/manifest")
28
30
  else
29
31
  response = get request_url("players/#{image_type}/manifests/all_assets")
30
32
  end
@@ -136,6 +138,8 @@ module Sportradar
136
138
  'ap_premium'
137
139
  elsif usat_premium
138
140
  'usat_premium'
141
+ elsif ['nba', 'nhl'].include?(sport)
142
+ 'getty_premium'
139
143
  else
140
144
  'usat'
141
145
  # REUTERS IS JUST FOR SOCCER sport == 'mlb' ? 'usat' : 'reuters'
@@ -143,11 +147,12 @@ module Sportradar
143
147
  end
144
148
 
145
149
  def version
146
- if uses_v3_api? || nfl_premium || usat_premium
147
- 3
148
- elsif uses_v2_api?
149
- Sportradar::Api.version('images')
150
- end
150
+ # if uses_v3_api? || nfl_premium || usat_premium || sport == 'nba'
151
+ # 3
152
+ # elsif uses_v2_api?
153
+ # Sportradar::Api.version('images')
154
+ # end
155
+ 3
151
156
  end
152
157
 
153
158
  def image_type
@@ -175,7 +180,7 @@ module Sportradar
175
180
  end
176
181
 
177
182
  def v3_api_sports
178
- ['mlb', 'soccer', 'cricket', 'f1', 'rugby', 'tennis', 'ncaafb', ]
183
+ ['mlb', 'soccer', 'cricket', 'f1', 'rugby', 'tennis', 'ncaafb', 'nba' ]
179
184
  end
180
185
 
181
186
  def soccer_leagues
@@ -0,0 +1,49 @@
1
+ # Some snippets
2
+
3
+ ```ruby
4
+
5
+ odds = Sportradar::Api::Odds::PlayerOdds.new
6
+ data = odds.get_books
7
+ data = odds.get_sports
8
+ data = odds.get_event_mappings
9
+
10
+
11
+ sport = odds.sports.first
12
+ sport.get_competitions
13
+ comp = sport.competitions.first
14
+
15
+ api = Sportradar::Api::Odds::PlayerOdds.api
16
+ comp = Sportradar::Api::Odds::Competition.new({'id' => 'sr:competition:109'}, api: api)
17
+ data = comp.get_player_props
18
+ comp.sport_events
19
+ event = comp.sport_events.first
20
+
21
+ odds = Sportradar::Api::Odds::PlayerOdds.new
22
+ data = odds.get_sports
23
+ sport = odds.sports.first
24
+ sport.get_competitions
25
+ comp = sport.competitions.first
26
+
27
+ event = comp.sport_events.first
28
+ event.player_props
29
+ event.response
30
+ prop = event.player_props.first
31
+ prop.markets.count
32
+ market = prop.markets.first
33
+ market.response
34
+ market.name
35
+ bm = market.book_markets.first
36
+ outcome = bm.outcomes.first
37
+
38
+
39
+ # {"id"=>"sr:competition:8", "name"=>"LaLiga", "gender"=>"men", "markets"=>true, "futures"=>false, "player_props"=>true, "category"=>{"id"=>"sr:category:32", "name"=>"Spain", "country_code"=>"ESP"}},
40
+
41
+
42
+ ```
43
+
44
+ # Some links
45
+
46
+ https://api.sportradar.com/oddscomparison-player-props/trial/v2/en/books.xml?api_key=
47
+ https://api.sportradar.com/oddscomparison-player-props/trial/v2/en/sports/sr:sport:1/competitions.xml?api_key=
48
+ https://api.sportradar.com/oddscomparison-player-props/trial/v2/en/competitions/sr:competition:234/players_props.json?api_key=
49
+ https://api.sportradar.com/oddscomparison-player-props/trial/v2/en/sports.xml?api_key=