sportradar-api 0.1.0 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 1375039806670a04b628f8bacb62b2022cb83584
4
- data.tar.gz: 806f1fac9a3328443eb81b917a9e338b07a98718
3
+ metadata.gz: d345b49b575483e102bdd67848aa7ed27303b171
4
+ data.tar.gz: d3f77c8f2ffa19e0c79250d5c8a95b4d15d8f6b1
5
5
  SHA512:
6
- metadata.gz: ff799d3f643fc2bbde17e2971e9299089dad60648d019c8d6b90ddb94f779b40f88f34db33d742bc7c8c1063d3d3e420f4299ef91f63db5ad735912c817ae8fb
7
- data.tar.gz: 91dbb9c76739a8d233034a0777c2d943540a9b72924bc903b60f31fd0f29a0a2ff4f8273b5010d69175a1e53e0feb1e6149b06b4c84987a76cc5b79ecfa8b0d9
6
+ metadata.gz: cbc84253254da9add4d9af9b6df1b43f7c33057d06fc2a4ead5efee3f46c33b318c14c9eaac91de4917b3cba2fe31c3dce2c1f3479249159b1e0a996ca9d41e5
7
+ data.tar.gz: 0defe4bef73aa06f60a5de722f91b604be5d7e375c0e690407e1348ccff01a41eb5db847b8ec0ede725def6b3cf4bc5f489084d8783ebbe31b368c48444dfe20
@@ -26,8 +26,6 @@ SPORTRADAR_IMAGES_MLS: your-images_mls-api-key
26
26
  SPORTRADAR_LIVE_IMAGES_NFL: your-live_images_nfl-api-key
27
27
  SPORTRADAR_LIVE_IMAGES_NBA: your-live_images_nba-api-key
28
28
  SPORTRADAR_LIVE_IMAGES_MLS: your-live_images_mls-api-key
29
- SPORTRADAR_CONTENT_NBA_V2: your-content_nba_v2-api-key
30
- SPORTRADAR_CONTENT_NFL_V2: your-content_nfl_v2-api-key
31
29
  SPORTRADAR_CONTENT_NBA: your-content_nba-api-key
32
30
  SPORTRADAR_CONTENT_NFL: your-content_nfl-api-key
33
31
  SPORTRADAR_ODDS: your-odds-api-key
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- sportradar-api (0.1.0)
4
+ sportradar-api (0.1.1)
5
5
  httparty (>= 0.13.3)
6
6
 
7
7
  GEM
data/README.md CHANGED
@@ -1,3 +1,9 @@
1
+ [![Gem Version](https://badge.fury.io/rb/sportradar-api.svg)](https://badge.fury.io/rb/sportradar-api)
2
+ [![Build Status](https://travis-ci.org/beneggett/sportradar-api.svg?branch=master)](https://travis-ci.org/beneggett/sportradar-api)
3
+ [![Code Climate](https://codeclimate.com/github/beneggett/sportradar-api/badges/gpa.svg)](https://codeclimate.com/github/beneggett/sportradar-api)
4
+ [![Coverage Status](https://coveralls.io/repos/github/beneggett/sportradar-api/badge.svg?branch=master)](https://coveralls.io/github/beneggett/sportradar-api?branch=master)
5
+
6
+
1
7
  # Sportradar API
2
8
 
3
9
  The SportRadar API extensively covers league & sports data. This gem wraps it up, marshals the data into Ruby Objects we know and love.
@@ -10,6 +10,8 @@ require "sportradar/api/request"
10
10
 
11
11
  require "sportradar/api/soccer"
12
12
  require "sportradar/api/nfl"
13
+ require "sportradar/api/images"
14
+ require "sportradar/api/live_images"
13
15
 
14
16
  module Sportradar
15
17
  module Api
@@ -48,7 +50,7 @@ module Sportradar
48
50
  end
49
51
 
50
52
  def self.api_key(api)
51
- ENV.fetch("SPORTRADAR_#{api.to_s.upcase}", "api_key missing for #{api}")
53
+ ENV.fetch("SPORTRADAR_#{api.to_s.upcase.gsub('-', '_')}", "api_key missing for #{api}")
52
54
  end
53
55
 
54
56
  def self.version(api)
@@ -5,6 +5,8 @@ module Sportradar
5
5
  class NoApiKey < AuthenticationError; end
6
6
  class InvalidResponseFormat < TypeError; end
7
7
  class InvalidLeague < StandardError; end
8
+ class InvalidSeason < StandardError; end
9
+ class InvalidSport < StandardError; end
8
10
  class InvalidAccessLevel < StandardError; end
9
11
  class InvalidSeason < StandardError; end
10
12
  class Timeout < Timeout::Error ; end
@@ -0,0 +1,118 @@
1
+ module Sportradar
2
+ module Api
3
+ class Images < Request
4
+ attr_accessor :sport, :league, :access_level
5
+ def initialize( sport, league = nil, access_level = 't')
6
+ raise Sportradar::Api::Error::InvalidSport unless allowed_sports.include? sport
7
+ @sport = sport
8
+ raise Sportradar::Api::Error::InvalidLeague unless soccer_leagues.include?(league) || league.nil?
9
+ @league = league
10
+
11
+ raise Sportradar::Api::Error::InvalidAccessLevel unless allowed_access_levels.include? access_level
12
+ @access_level = access_level
13
+ end
14
+
15
+ def player_manifests(year = Date.today.year)
16
+ if league
17
+ get request_url("#{league}/#{image_type}/players/#{year}/manifest")
18
+ else
19
+ get request_url("players/#{image_type}/manifests/all_assets")
20
+ end
21
+ end
22
+ alias_method :all_players, :player_manifests
23
+ # Coach Manifests
24
+
25
+ def coach_manifests
26
+ raise Sportradar::Api::Error::InvalidLeague unless league.nil?
27
+ get request_url("coaches/#{image_type}/manifests/all_assets")
28
+ end
29
+ alias_method :all_coaches, :coach_manifests
30
+
31
+ def venue_manifests
32
+ raise Sportradar::Api::Error::InvalidLeague unless league.nil?
33
+ get request_url("venues/manifests/all_assets")
34
+ end
35
+ alias_method :all_venues, :venue_manifests
36
+
37
+ # The Player Images, Coach Images, Venue Images APIs aren't really meant to be used directly, the manifests return an href path of an image we can pass it into the image_url method to get the entire image url
38
+ def image_url(href)
39
+ href.slice!(0) # remove initial '/'
40
+ set_base request_url(href) + api_key_query_string
41
+ end
42
+ alias_method :player_images, :image_url
43
+ alias_method :coach_images, :image_url
44
+ alias_method :venue_images, :image_url
45
+
46
+ private
47
+
48
+ def request_url(path)
49
+ "/#{sport}-images-#{access_level}#{version}/#{provider}/#{path}"
50
+ end
51
+
52
+ def api_key
53
+ if league
54
+ Sportradar::Api.api_key_params("images_#{league}")
55
+ else
56
+ Sportradar::Api.api_key_params("images_#{sport}")
57
+ end
58
+ end
59
+
60
+ def api_key_query_string
61
+ "?#{api_key.keys.first}=#{api_key.values.first}"
62
+ end
63
+
64
+ def provider
65
+ if uses_v2_api?
66
+ 'usat'
67
+ elsif uses_v3_api?
68
+ 'reuters'
69
+ end
70
+ end
71
+
72
+ def version
73
+ if uses_v2_api?
74
+ Sportradar::Api.version('images')
75
+ elsif uses_v3_api?
76
+ 3
77
+ end
78
+ end
79
+
80
+ def image_type
81
+ 'headshots'
82
+ end
83
+
84
+ def uses_v2_api?
85
+ v2_api_sports.include?(sport)
86
+ end
87
+
88
+ def uses_v3_api?
89
+ v3_api_sports.include?(sport)
90
+ end
91
+
92
+ def allowed_access_levels
93
+ ['p', 't']
94
+ end
95
+
96
+ def allowed_sports
97
+ v2_api_sports + v3_api_sports
98
+ end
99
+
100
+ def v2_api_sports
101
+ ['golf', 'mlb', 'nascar', 'nba', 'nfl', 'nhl', 'ncaafb', 'ncaamb', 'mls']
102
+ end
103
+
104
+ def v3_api_sports
105
+ ['soccer', 'cricket', 'f1', 'rugby', 'tennis']
106
+ end
107
+
108
+ def soccer_leagues
109
+ ['bundesliga', 'epl', 'serie-a', 'la-liga', 'ligue-1']
110
+ end
111
+
112
+ def additional_content_sports
113
+ ['mlb', 'nba', 'nfl', 'nhl']
114
+ end
115
+
116
+ end
117
+ end
118
+ end
@@ -0,0 +1,60 @@
1
+ module Sportradar
2
+ module Api
3
+ class LiveImages < Request
4
+ attr_accessor :sport, :league, :access_level
5
+
6
+ def initialize( sport, league = nil, access_level = 't')
7
+ raise Sportradar::Api::Error::InvalidSport unless allowed_sports.include? sport
8
+ @sport = sport
9
+ raise Sportradar::Api::Error::InvalidAccessLevel unless allowed_access_levels.include? access_level
10
+ @access_level = access_level
11
+ end
12
+
13
+ def daily_manifest(date = Date.today )
14
+ get request_url("#{image_type }/#{date.to_s}/manifests/all_assets")
15
+ end
16
+ alias_method :all_images, :daily_manifest
17
+
18
+ # The Event images APIs aren't really meant to be used directly, the manifests return an href path of an image we can pass it into the image_url method to get the entire image url
19
+ def image_url(href)
20
+ href.slice!(0) # remove initial '/'
21
+ set_base request_url(href) + api_key_query_string
22
+ end
23
+
24
+ private
25
+
26
+ def request_url(path)
27
+ "/#{sport}-liveimages-#{access_level}#{version}/#{provider}/#{path}"
28
+ end
29
+
30
+ def api_key
31
+ Sportradar::Api.api_key_params("live_images_#{sport}")
32
+ end
33
+
34
+ def api_key_query_string
35
+ "?#{api_key.keys.first}=#{api_key.values.first}"
36
+ end
37
+
38
+ def provider
39
+ 'usat'
40
+ end
41
+
42
+ def version
43
+ Sportradar::Api.version('live_images')
44
+ end
45
+
46
+ def image_type
47
+ 'news'
48
+ end
49
+
50
+ def allowed_access_levels
51
+ ['p', 't']
52
+ end
53
+
54
+ def allowed_sports
55
+ ['golf', 'mlb', 'nascar', 'nba', 'nfl', 'nhl', 'ncaafb', 'ncaamb', 'mls']
56
+ end
57
+
58
+ end
59
+ end
60
+ end
@@ -1,7 +1,8 @@
1
1
  module Sportradar
2
2
  module Api
3
- class Nfl
3
+ class Nfl < Request
4
4
  attr_accessor :league, :access_level
5
+
5
6
  def initialize( access_level = 'ot')
6
7
  @league = 'nfl'
7
8
  raise Sportradar::Api::Error::InvalidAccessLevel unless allowed_access_levels.include? access_level
@@ -9,65 +10,65 @@ module Sportradar
9
10
  end
10
11
 
11
12
  def league_hierarchy
12
- results = Sportradar::Api::Request.new.get(request_url("league/hierarchy"), api_key )
13
+ get request_url("league/hierarchy")
13
14
  end
14
15
 
15
16
  def schedule(year = Date.today.year, season = 'reg')
16
- raise Sportradar::Api::Error::InvalidLeague unless allowed_seasons.include? season
17
- results = Sportradar::Api::Request.new.get(request_url("games/#{ year }/#{ season }/schedule"), api_key )
17
+ raise Sportradar::Api::Error::InvalidSeason unless allowed_seasons.include? season
18
+ get request_url("games/#{ year }/#{ season }/schedule")
18
19
  end
19
20
 
20
21
  def weekly_schedule(year = Date.today.year, season = 'reg', week = 1)
21
- results = Sportradar::Api::Request.new.get(request_url("games/#{ year }/#{ season }/#{ week }/schedule"), api_key )
22
+ get request_url("games/#{ week_path(year, season, week) }/schedule")
22
23
  end
23
24
 
24
25
  def standings(year = Date.today.year)
25
- results = Sportradar::Api::Request.new.get(request_url("seasontd/#{ year }/standings"), api_key )
26
+ get request_url("seasontd/#{ year }/standings")
26
27
  end
27
28
 
28
29
  def weekly_depth_charts(year = Date.today.year, season = 'reg', week = 1)
29
- results = Sportradar::Api::Request.new.get(request_url("seasontd/#{ year }/#{ season }/#{ week }/depth_charts"), api_key )
30
+ get request_url("seasontd/#{ week_path(year, season, week) }/depth_charts")
30
31
  end
31
32
 
32
33
  def weekly_injuries(year = Date.today.year, season = 'reg', week = 1)
33
- results = Sportradar::Api::Request.new.get(request_url("seasontd/#{ year }/#{ season }/#{ week }/injuries"), api_key )
34
+ get request_url("seasontd/#{ week_path(year, season, week) }/injuries")
34
35
  end
35
36
 
36
37
  def daily_change_log(date = Date.today)
37
- results = Sportradar::Api::Request.new.get(request_url("league/#{ date.year }/#{ date.month }/#{ date.day }/changes"), api_key )
38
+ get request_url("league/#{date_path(date)}/changes")
38
39
  end
39
40
 
40
41
  # past_game_id = "0141a0a5-13e5-4b28-b19f-0c3923aaef6e"
41
42
  # future_game_id = "28290722-4ceb-4a4c-a4e5-1f9bec7283b3"
42
43
  def game_boxscore(game_id)
43
- results = Sportradar::Api::Request.new.get(request_url("games/#{ game_id }/boxscore"), api_key )
44
+ get request_url("games/#{ game_id }/boxscore")
44
45
  end
45
46
 
46
47
  def game_roster(game_id)
47
- results = Sportradar::Api::Request.new.get(request_url("games/#{ game_id }/roster"), api_key )
48
+ get request_url("games/#{ game_id }/roster")
48
49
  end
49
50
 
50
51
  def game_statistics(game_id)
51
- results = Sportradar::Api::Request.new.get(request_url("games/#{ game_id }/statistics"), api_key )
52
+ get request_url("games/#{ game_id }/statistics")
52
53
  end
53
54
 
54
55
  def play_by_play(game_id)
55
- results = Sportradar::Api::Request.new.get(request_url("games/#{ game_id }/pbp"), api_key )
56
+ get request_url("games/#{ game_id }/pbp")
56
57
  end
57
58
 
58
59
  # player_id = "ede260be-5ae6-4a06-887b-e4a130932705"
59
60
  def player_profile(player_id)
60
- results = Sportradar::Api::Request.new.get(request_url("players/#{ player_id }/profile"), api_key )
61
+ get request_url("players/#{ player_id }/profile")
61
62
  end
62
63
 
63
64
  # team_id = "97354895-8c77-4fd4-a860-32e62ea7382a"
64
65
  def seasonal_statistics(team_id, year = Date.today.year, season = 'reg')
65
66
  raise Sportradar::Api::Error::InvalidLeague unless allowed_seasons.include? season
66
- results = Sportradar::Api::Request.new.get(request_url("seasontd/#{ year }/#{ season }/teams/#{ team_id }/statistics"), api_key )
67
+ get request_url("seasontd/#{ year }/#{ season }/teams/#{ team_id }/statistics")
67
68
  end
68
69
 
69
70
  def team_profile(team_id)
70
- results = Sportradar::Api::Request.new.get(request_url("teams/#{ team_id }/profile"), api_key )
71
+ get request_url("teams/#{ team_id }/profile")
71
72
  end
72
73
 
73
74
  private
@@ -7,7 +7,7 @@ module Sportradar
7
7
  attr_reader :url, :headers, :timeout, :api_key
8
8
 
9
9
  def base_setup(path, options={})
10
- @url = set_base(path)
10
+ @url = set_base(path) + format
11
11
  @headers = set_headers
12
12
  @api_key = options[:api_key]
13
13
  @timeout = options.delete(:api_timeout) || Sportradar::Api.config.api_timeout
@@ -15,7 +15,8 @@ module Sportradar
15
15
 
16
16
  def get(path, options={})
17
17
  base_setup(path, options)
18
- results = self.class.get(url, headers: headers, query: options, timeout: timeout)
18
+ puts url
19
+ results = self.class.get(url, headers: headers, query: options.merge(api_key), timeout: timeout)
19
20
  rescue Net::ReadTimeout, Net::OpenTimeout
20
21
  raise Sportradar::Api::Error::Timeout
21
22
  rescue EOFError
@@ -28,13 +29,28 @@ module Sportradar
28
29
  protocol = !!Sportradar::Api.config.use_ssl ? "https://" : "http://"
29
30
  url = "#{protocol}api.sportradar.us"
30
31
  url += path
31
- url += ".#{Sportradar::Api.config.format}"
32
+ end
33
+
34
+ def date_path(date = Date.today)
35
+ "#{date.year}/#{date.month}/#{date.day}"
36
+ end
37
+
38
+ def week_path(year, season, week)
39
+ "#{ year }/#{ season }/#{ week }"
40
+ end
41
+
42
+
43
+ def format
44
+ ".#{Sportradar::Api.config.format}"
32
45
  end
33
46
 
34
47
  def set_headers
35
48
  {'Content-Type' => "application/#{Sportradar::Api.config.format}", 'Accept' => "application/#{Sportradar::Api.config.format}"}
36
49
  end
37
50
 
51
+ def api_key
52
+ raise Sportradar::Api::Error::NoApiKey
53
+ end
38
54
  end
39
55
  end
40
56
  end
@@ -1,6 +1,6 @@
1
1
  module Sportradar
2
2
  module Api
3
- class Soccer
3
+ class Soccer < Request
4
4
  attr_accessor :league, :access_level
5
5
  def initialize(league = 'na', access_level = 't')
6
6
  raise Sportradar::Api::Error::InvalidAccessLevel unless allowed_access_levels.include? access_level
@@ -10,51 +10,51 @@ module Sportradar
10
10
  end
11
11
 
12
12
  def schedule
13
- results = Sportradar::Api::Request.new.get(request_url("matches/schedule"), api_key )
13
+ get request_url("matches/schedule")
14
14
  end
15
15
 
16
16
  def daily_schedule(date = Date.today)
17
- results = Sportradar::Api::Request.new.get(request_url("matches/#{date.year}/#{date.month}/#{date.day}/schedule"), api_key )
17
+ get request_url("matches/#{date_path(date)}/schedule")
18
18
  end
19
19
 
20
20
  def daily_summary(date = Date.today)
21
- results = Sportradar::Api::Request.new.get(request_url("matches/#{date.year}/#{date.month}/#{date.day}/summary"), api_key )
21
+ get request_url("matches/#{date_path(date)}/summary")
22
22
  end
23
23
 
24
24
  def daily_boxscore(date = Date.today)
25
- results = Sportradar::Api::Request.new.get(request_url("matches/#{date.year}/#{date.month}/#{date.day}/boxscore"), api_key )
25
+ get request_url("matches/#{date_path(date)}/boxscore")
26
26
  end
27
27
 
28
28
  # match_id = "357607e9-87cd-4848-b53e-0485d9c1a3bc"
29
29
  def match_summary(match_id)
30
- results = Sportradar::Api::Request.new.get(request_url("matches/#{match_id}/summary"), api_key )
30
+ get request_url("matches/#{match_id}/summary")
31
31
  end
32
32
 
33
33
  # match_id = "357607e9-87cd-4848-b53e-0485d9c1a3bc"
34
34
  def match_boxscore(match_id)
35
- results = Sportradar::Api::Request.new.get(request_url("matches/#{match_id}/boxscore"), api_key )
35
+ get request_url("matches/#{match_id}/boxscore")
36
36
  end
37
37
 
38
38
  def team_hierarchy
39
- results = Sportradar::Api::Request.new.get(request_url("teams/hierarchy"), api_key )
39
+ get request_url("teams/hierarchy")
40
40
  end
41
41
 
42
42
  # team_id = "b78b9f61-0697-4347-a1b6-b7685a130eb1"
43
43
  def team_profile(team_id)
44
- results = Sportradar::Api::Request.new.get(request_url("teams/#{team_id}/profile"), api_key )
44
+ get request_url("teams/#{team_id}/profile")
45
45
  end
46
46
 
47
47
  def team_standings
48
- results = Sportradar::Api::Request.new.get(request_url("teams/standing"), api_key )
48
+ get request_url("teams/standing")
49
49
  end
50
50
 
51
51
  # player_id = "2aeacd39-3f9c-42af-957e-9df8573973c4"
52
52
  def player_profile(player_id)
53
- results = Sportradar::Api::Request.new.get(request_url("players/#{player_id}/profile"), api_key )
53
+ get request_url("players/#{player_id}/profile")
54
54
  end
55
55
 
56
56
  def player_rankings
57
- results = Sportradar::Api::Request.new.get(request_url("players/leader"), api_key )
57
+ get request_url("players/leader")
58
58
  end
59
59
 
60
60
  private
@@ -1,5 +1,5 @@
1
1
  module Sportradar
2
2
  module Api
3
- VERSION = "0.1.0"
3
+ VERSION = "0.1.1"
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.1.0
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ben Eggett
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2016-07-14 00:00:00.000000000 Z
11
+ date: 2016-07-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -213,6 +213,8 @@ files:
213
213
  - lib/sportradar/api.rb
214
214
  - lib/sportradar/api/config.rb
215
215
  - lib/sportradar/api/error.rb
216
+ - lib/sportradar/api/images.rb
217
+ - lib/sportradar/api/live_images.rb
216
218
  - lib/sportradar/api/nfl.rb
217
219
  - lib/sportradar/api/request.rb
218
220
  - lib/sportradar/api/soccer.rb