sportradar-api 0.9.59 → 0.10.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (53) hide show
  1. checksums.yaml +4 -4
  2. data/.env.sample +5 -1
  3. data/Gemfile.lock +4 -4
  4. data/README.md +1 -1
  5. data/lib/sportradar/api.rb +1 -0
  6. data/lib/sportradar/api/basketball.rb +15 -6
  7. data/lib/sportradar/api/basketball/game.rb +285 -0
  8. data/lib/sportradar/api/basketball/injury.rb +6 -6
  9. data/lib/sportradar/api/basketball/nba.rb +22 -25
  10. data/lib/sportradar/api/basketball/nba/conference.rb +1 -1
  11. data/lib/sportradar/api/basketball/nba/division.rb +2 -1
  12. data/lib/sportradar/api/basketball/nba/game.rb +12 -249
  13. data/lib/sportradar/api/basketball/nba/hierarchy.rb +5 -4
  14. data/lib/sportradar/api/basketball/nba/player.rb +8 -8
  15. data/lib/sportradar/api/basketball/nba/quarter.rb +1 -1
  16. data/lib/sportradar/api/basketball/nba/schedule.rb +17 -6
  17. data/lib/sportradar/api/basketball/nba/scoring.rb +15 -95
  18. data/lib/sportradar/api/basketball/nba/season.rb +6 -5
  19. data/lib/sportradar/api/basketball/nba/team.rb +5 -122
  20. data/lib/sportradar/api/basketball/ncaamb.rb +133 -0
  21. data/lib/sportradar/api/basketball/ncaamb/conference.rb +41 -0
  22. data/lib/sportradar/api/basketball/ncaamb/division.rb +42 -0
  23. data/lib/sportradar/api/basketball/ncaamb/game.rb +60 -0
  24. data/lib/sportradar/api/basketball/ncaamb/half.rb +49 -0
  25. data/lib/sportradar/api/basketball/ncaamb/hierarchy.rb +65 -0
  26. data/lib/sportradar/api/basketball/ncaamb/player.rb +162 -0
  27. data/lib/sportradar/api/basketball/ncaamb/schedule.rb +41 -0
  28. data/lib/sportradar/api/basketball/ncaamb/season.rb +42 -0
  29. data/lib/sportradar/api/basketball/ncaamb/team.rb +40 -0
  30. data/lib/sportradar/api/basketball/play.rb +15 -5
  31. data/lib/sportradar/api/basketball/plays.rb +1 -0
  32. data/lib/sportradar/api/basketball/plays/base.rb +30 -6
  33. data/lib/sportradar/api/basketball/plays/deadball.rb +11 -0
  34. data/lib/sportradar/api/basketball/plays/end_period.rb +2 -2
  35. data/lib/sportradar/api/basketball/plays/free_throw_miss.rb +3 -1
  36. data/lib/sportradar/api/basketball/plays/rebound.rb +5 -1
  37. data/lib/sportradar/api/basketball/plays/shot_made.rb +4 -3
  38. data/lib/sportradar/api/basketball/plays/shot_miss.rb +4 -3
  39. data/lib/sportradar/api/basketball/plays/timeout.rb +0 -3
  40. data/lib/sportradar/api/basketball/plays/turnover.rb +1 -1
  41. data/lib/sportradar/api/basketball/record.rb +32 -0
  42. data/lib/sportradar/api/basketball/scoring.rb +103 -0
  43. data/lib/sportradar/api/basketball/team.rb +148 -0
  44. data/lib/sportradar/api/data.rb +2 -0
  45. data/lib/sportradar/api/poll.rb +40 -0
  46. data/lib/sportradar/api/request.rb +15 -6
  47. data/lib/sportradar/api/version.rb +1 -1
  48. metadata +18 -7
  49. data/lib/sportradar/api/basketball/bio.rb +0 -33
  50. data/lib/sportradar/api/basketball/nba/overview.rb +0 -64
  51. data/lib/sportradar/api/basketball/nba/record.rb +0 -34
  52. data/lib/sportradar/api/basketball/overview.rb +0 -74
  53. data/lib/sportradar/api/basketball/profile.rb +0 -48
@@ -51,6 +51,8 @@ module Sportradar
51
51
  def create_data(existing = {}, data, klass: nil, **opts)
52
52
  existing ||= {} # handles nil case, typically during object instantiation
53
53
  case data
54
+ when [], {}
55
+ existing
54
56
  when Array
55
57
  data.each do |hash|
56
58
  current = existing[hash['id']]
@@ -0,0 +1,40 @@
1
+ module Sportradar
2
+ module Api
3
+ class Rank
4
+ def initialize(data)
5
+ @id = data['id']
6
+ @name = data['name']
7
+ @market = data['market']
8
+ @rank = data['rank']
9
+ @wins = data['wins']
10
+ @losses = data['losses']
11
+ @prev_rank = data['prev_rank']
12
+ @points = data['points'] || data['votes']
13
+ @fp_votes = data['fp_votes'].to_i
14
+ if data['rpi']
15
+ @rpi = data
16
+ end
17
+ end
18
+ end
19
+ class Poll
20
+ def initialize(data)
21
+ @response = data
22
+
23
+ @id = data.dig('poll', 'id')
24
+ @name = data.dig('poll', 'name')
25
+ @alias = data.dig('poll', 'alias')
26
+ @week = data['week']
27
+ @year = data['year']
28
+ @time = data['effective_date']
29
+
30
+ update(data)
31
+ end
32
+ def update(data)
33
+ @ranked = data['rankings'].map { |h| Rank.new(h) }
34
+ if @alias == 'AP' || @alias == 'US'
35
+ @votes = data['candidates'].map.with_index(@ranked.size + 1) { |h, i| Rank.new(h.merge('rank' => i)) }
36
+ end
37
+ end
38
+ end
39
+ end
40
+ end
@@ -4,13 +4,13 @@ module Sportradar
4
4
 
5
5
  include HTTParty
6
6
 
7
- attr_reader :url, :headers, :timeout, :api_key
7
+ # attr_reader :url, :headers, :timeout, :api_key
8
8
 
9
9
  def get(path, options={})
10
- base_setup(path, options)
10
+ url, headers, options, timeout = base_setup(path, options)
11
11
  begin
12
12
  # puts url + "?api_key=#{api_key[:api_key]}" # uncomment for debugging
13
- response = self.class.get(url, headers: headers, query: options.merge(api_key), timeout: timeout)
13
+ response = self.class.get(url, headers: headers, query: options, timeout: timeout)
14
14
  rescue Net::ReadTimeout, Net::OpenTimeout
15
15
  raise Sportradar::Api::Error::Timeout
16
16
  rescue EOFError
@@ -20,6 +20,10 @@ module Sportradar
20
20
  response
21
21
  end
22
22
 
23
+ def get_request_info(url)
24
+ base_setup(request_url(url))
25
+ end
26
+
23
27
  private
24
28
 
25
29
  def base_setup(path, options={})
@@ -27,6 +31,7 @@ module Sportradar
27
31
  @url += format unless options[:format] == 'none'
28
32
  @headers = set_headers unless options[:format] == 'none'
29
33
  @timeout = options.delete(:api_timeout) || Sportradar::Api.config.api_timeout
34
+ [@url, @headers, options.merge(api_key), @timeout]
30
35
  end
31
36
 
32
37
  def set_base(path)
@@ -34,6 +39,7 @@ module Sportradar
34
39
  url = "#{protocol}api.sportradar.us"
35
40
  url += path
36
41
  end
42
+
37
43
 
38
44
  def date_path(date)
39
45
  "#{date.year}/#{date.month}/#{date.day}"
@@ -45,11 +51,15 @@ module Sportradar
45
51
 
46
52
 
47
53
  def format
48
- ".#{Sportradar::Api.config.format}" if Sportradar::Api.config.format
54
+ ".#{content_format}" if Sportradar::Api.config.format
49
55
  end
50
56
 
51
57
  def set_headers
52
- {'Content-Type' => "application/#{Sportradar::Api.config.format}", 'Accept' => "application/#{Sportradar::Api.config.format}"}
58
+ {'Content-Type' => "application/#{content_format}", 'Accept' => "application/#{content_format}"}
59
+ end
60
+
61
+ def content_format
62
+ Sportradar::Api.config.format
53
63
  end
54
64
 
55
65
  def api_key
@@ -58,4 +68,3 @@ module Sportradar
58
68
  end
59
69
  end
60
70
  end
61
-
@@ -1,5 +1,5 @@
1
1
  module Sportradar
2
2
  module Api
3
- VERSION = "0.9.59"
3
+ VERSION = "0.10.0"
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sportradar-api
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.59
4
+ version: 0.10.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ben Eggett
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2017-01-24 00:00:00.000000000 Z
11
+ date: 2017-02-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -241,29 +241,37 @@ files:
241
241
  - bin/setup
242
242
  - lib/sportradar/api.rb
243
243
  - lib/sportradar/api/basketball.rb
244
- - lib/sportradar/api/basketball/bio.rb
245
244
  - lib/sportradar/api/basketball/broadcast.rb
245
+ - lib/sportradar/api/basketball/game.rb
246
246
  - lib/sportradar/api/basketball/injury.rb
247
247
  - lib/sportradar/api/basketball/nba.rb
248
248
  - lib/sportradar/api/basketball/nba/conference.rb
249
249
  - lib/sportradar/api/basketball/nba/division.rb
250
250
  - lib/sportradar/api/basketball/nba/game.rb
251
251
  - lib/sportradar/api/basketball/nba/hierarchy.rb
252
- - lib/sportradar/api/basketball/nba/overview.rb
253
252
  - lib/sportradar/api/basketball/nba/player.rb
254
253
  - lib/sportradar/api/basketball/nba/quarter.rb
255
- - lib/sportradar/api/basketball/nba/record.rb
256
254
  - lib/sportradar/api/basketball/nba/schedule.rb
257
255
  - lib/sportradar/api/basketball/nba/scoring.rb
258
256
  - lib/sportradar/api/basketball/nba/season.rb
259
257
  - lib/sportradar/api/basketball/nba/team.rb
260
- - lib/sportradar/api/basketball/overview.rb
258
+ - lib/sportradar/api/basketball/ncaamb.rb
259
+ - lib/sportradar/api/basketball/ncaamb/conference.rb
260
+ - lib/sportradar/api/basketball/ncaamb/division.rb
261
+ - lib/sportradar/api/basketball/ncaamb/game.rb
262
+ - lib/sportradar/api/basketball/ncaamb/half.rb
263
+ - lib/sportradar/api/basketball/ncaamb/hierarchy.rb
264
+ - lib/sportradar/api/basketball/ncaamb/player.rb
265
+ - lib/sportradar/api/basketball/ncaamb/schedule.rb
266
+ - lib/sportradar/api/basketball/ncaamb/season.rb
267
+ - lib/sportradar/api/basketball/ncaamb/team.rb
261
268
  - lib/sportradar/api/basketball/play.rb
262
269
  - lib/sportradar/api/basketball/plays.rb
263
270
  - lib/sportradar/api/basketball/plays/assist.rb
264
271
  - lib/sportradar/api/basketball/plays/base.rb
265
272
  - lib/sportradar/api/basketball/plays/block.rb
266
273
  - lib/sportradar/api/basketball/plays/clear_path_foul.rb
274
+ - lib/sportradar/api/basketball/plays/deadball.rb
267
275
  - lib/sportradar/api/basketball/plays/defensive_three_seconds.rb
268
276
  - lib/sportradar/api/basketball/plays/delay.rb
269
277
  - lib/sportradar/api/basketball/plays/ejection.rb
@@ -296,8 +304,10 @@ files:
296
304
  - lib/sportradar/api/basketball/plays/tv_timeout.rb
297
305
  - lib/sportradar/api/basketball/plays/two_point_made.rb
298
306
  - lib/sportradar/api/basketball/plays/two_point_miss.rb
299
- - lib/sportradar/api/basketball/profile.rb
307
+ - lib/sportradar/api/basketball/record.rb
308
+ - lib/sportradar/api/basketball/scoring.rb
300
309
  - lib/sportradar/api/basketball/season.rb
310
+ - lib/sportradar/api/basketball/team.rb
301
311
  - lib/sportradar/api/basketball/venue.rb
302
312
  - lib/sportradar/api/config.rb
303
313
  - lib/sportradar/api/content.rb
@@ -381,6 +391,7 @@ files:
381
391
  - lib/sportradar/api/nfl/venue.rb
382
392
  - lib/sportradar/api/nfl/week.rb
383
393
  - lib/sportradar/api/odds.rb
394
+ - lib/sportradar/api/poll.rb
384
395
  - lib/sportradar/api/request.rb
385
396
  - lib/sportradar/api/soccer.rb
386
397
  - lib/sportradar/api/soccer/boxscore.rb
@@ -1,33 +0,0 @@
1
- module Sportradar
2
- module Api
3
- module Basketball
4
- class Bio < Data
5
- attr_accessor :player, :name
6
-
7
- def initialize(player)
8
- # @player = player
9
- @id = player.id
10
- @status = player.status
11
- @full_name = player.full_name
12
- @first_name = player.first_name
13
- @last_name = player.last_name
14
- @abbr_name = player.abbr_name
15
- @height = player.height
16
- @weight = player.weight
17
- @position = player.position
18
- @primary_position = player.primary_position
19
- @jersey_number = player.jersey_number
20
- @experience = player.experience
21
- @college = player.college
22
- @birth_place = player.birth_place
23
- @birthdate = player.birthdate
24
- end
25
-
26
- end
27
- end
28
- end
29
- end
30
-
31
- __END__
32
-
33
- sr = Sportradar::Api::Nba.new
@@ -1,64 +0,0 @@
1
- module Sportradar
2
- module Api
3
- module Basketball
4
- class Nba
5
- class Overview < Basketball::Overview
6
- attr_accessor :response, :api, :id, :game, :home, :away
7
-
8
- # def initialize(game: )
9
- # @game = game
10
- # end
11
-
12
- # def points(team_id)
13
- # team_id.is_a?(Symbol) ? @score[@team_ids[team_id]] : @score[team_id]
14
- # end
15
- # def set_score(score)
16
- # @score.merge!(score)
17
- # end
18
-
19
- # def update(data, **opts)
20
-
21
- # @score = { }
22
-
23
- # @status = data['status'] if data['status']
24
- # @coverage = data['coverage'] if data['coverage']
25
- # @home_team = data['home_team'] if data['home_team'] # GUID
26
- # @away_team = data['away_team'] if data['away_team'] # GUID
27
- # @team_ids = { home: @home_team, away: @away_team}
28
- # @scheduled = Time.parse(data["scheduled"]) if data["scheduled"]
29
- # @venue = data['venue'] if data['venue']
30
- # # @home = Team.new(data['home'], api: api, game: self) if data['home']
31
- # # @away = Team.new(data['away'], api: api, game: self) if data['away']
32
- # @broadcast = data['broadcast']
33
- # @duration = data['duration'] if data['duration']
34
- # @clock = data['clock'] if data['clock']
35
- # @attendance = data['attendance'] if data['attendance']
36
- # @lead_changes = data['lead_changes'] if data['lead_changes']
37
- # @times_tied = data['times_tied'] if data['times_tied']
38
- # @scoring = data['scoring'] if data['scoring']
39
-
40
- # end
41
-
42
- # def path_base
43
- # "games/#{ id }"
44
- # end
45
-
46
- end
47
- end
48
- end
49
- end
50
- end
51
-
52
- __END__
53
-
54
- ss = sr.schedule;
55
- sr = Sportradar::Api::Basketball::Nba.new
56
- sd = sr.daily_schedule;
57
- g = sd.games.last;
58
- box = g.get_box;
59
- pbp = g.get_pbp;
60
- g.quarters.size
61
- g.plays.size
62
-
63
- Sportradar::Api::Basketball::Nba::Team.all.size # => 32 - includes all star teams
64
-
@@ -1,34 +0,0 @@
1
- module Sportradar
2
- module Api
3
- module Basketball
4
- class Nba
5
- class Record < Data
6
- attr_accessor :id, :team, :wins, :losses, :win_pct, :points_for, :points_against, :point_diff, :games_behind, :streak
7
-
8
- def initialize(data, type: 'overall', **opts)
9
- @team = opts[:team]
10
- @type = type
11
-
12
- update(data, **opts)
13
- end
14
-
15
- def profile
16
- Profile.new(self)
17
- end
18
-
19
- def update(data, **opts)
20
- @wins = data['wins'].to_i
21
- @losses = data['losses'].to_i
22
- @win_pct = data['win_pct'].to_f
23
- @points_for = data['points_for']
24
- @points_against = data['points_against']
25
- @point_diff = data['point_diff']
26
- @games_behind = data['games_behind']
27
- @streak = data['streak']
28
- end
29
-
30
- end
31
- end
32
- end
33
- end
34
- end
@@ -1,74 +0,0 @@
1
- module Sportradar
2
- module Api
3
- module Basketball
4
- class Overview < Data
5
- attr_accessor :game, :home_id, :away_id, :clock, :quarter, :status, :home, :away, :scoring, :venue, :scheduled, :broadcast
6
-
7
- def initialize(game)
8
- # @game = game
9
- @id = game.id
10
- @score = game.score
11
- @home_id = game.home_id
12
- @away_id = game.away_id
13
- @home_full = game.home.full_name
14
- @away_full = game.away.full_name
15
- @team_ids = game.instance_variable_get(:@team_ids)
16
- @status = game.status
17
- @clock = game.clock
18
- @quarter = game.quarter.to_i
19
- @broadcast = game.broadcast
20
- @scheduled = game.scheduled
21
- @timeouts = game.timeouts
22
- @scoring = game.scoring
23
- @duration = game.duration
24
- @attendance = game.attendance
25
-
26
- @venue = OpenStruct.new(name: game.venue.name, city: game.venue.city, location: game.venue.location)
27
- @home = OpenStruct.new(id: game.home.id, alias: game.home.alias, name: game.home.name, full_name: game.home.full_name)
28
- @away = OpenStruct.new(id: game.away.id, alias: game.away.alias, name: game.away.name, full_name: game.away.full_name)
29
- rescue => e
30
- binding.pry
31
- end
32
-
33
- def points(team_id)
34
- team_id.is_a?(Symbol) ? @score[@team_ids[team_id]].to_i : @score[team_id].to_i
35
- end
36
-
37
- def scoring(quarter)
38
- @scoring
39
- end
40
-
41
- # status helpers
42
- def future?
43
- ['scheduled', 'delayed'].include? status
44
- end
45
- def started?
46
- ['inprogress', 'halftime', 'delayed'].include? status
47
- end
48
- def finished?
49
- ['completed', 'closed'].include? status
50
- end
51
- def closed?
52
- 'closed' == status
53
- end
54
-
55
-
56
- end
57
- end
58
- end
59
- end
60
-
61
- __END__
62
-
63
- ss = sr.schedule;
64
- sr = Sportradar::Api::Nba.new
65
- sd = sr.daily_schedule;
66
- g = sd.games.last;
67
- g.overview
68
- box = g.get_box;
69
- pbp = g.get_pbp;
70
- g.quarters.size
71
- g.plays.size
72
-
73
- Sportradar::Api::Nba::Team.all.size # => 32 - includes all star teams
74
-
@@ -1,48 +0,0 @@
1
- module Sportradar
2
- module Api
3
- module Basketball
4
- class Profile < Data
5
- attr_accessor :team, :name
6
-
7
- def initialize(team)
8
- # @team = team
9
- @id = team.id
10
- # @score = team.score
11
- # @home_id = team.home_id
12
- # @away_id = team.away_id
13
- # @home_full = team.home.full_name
14
- # @away_full = team.away.full_name
15
- # @team_ids = team.instance_variable_get(:@team_ids)
16
- # @status = team.status
17
- # @clock = team.clock
18
- # @quarter = team.quarter.to_i
19
- # @broadcast = team.broadcast
20
- # @scheduled = team.scheduled
21
- # @venue_name = team.venue.name
22
- # @venue_city = team.venue.city
23
- # @location = team.venue.location
24
- # @timeouts = team.timeouts
25
- # @scoring = team.scoring
26
- # @duration = team.duration
27
- # @attendance = team.attendance
28
- end
29
-
30
- end
31
- end
32
- end
33
- end
34
-
35
- __END__
36
-
37
- ss = sr.schedule;
38
- sr = Sportradar::Api::Nba.new
39
- sd = sr.daily_schedule;
40
- g = sd.games.last;
41
- g.overview
42
- box = g.get_box;
43
- pbp = g.get_pbp;
44
- g.quarters.size
45
- g.plays.size
46
-
47
- Sportradar::Api::Nba::Team.all.size # => 32 - includes all star teams
48
-