sportradar-api 0.19.6 → 0.20.0.pre

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 63ccb22baef51d07aa56fe5a22d11d07cd389038882795f073fa435993d65ca8
4
- data.tar.gz: f147f71634d36ae1d3ed9b012bec020a8189d16a1f8a42b191fe61e29e58d9f4
3
+ metadata.gz: 59b7c64c57502e09e0710bab7364fa547678c09db700de7d9a9995a118c077e3
4
+ data.tar.gz: 7304057033316bda190fc8a9531686b745b6c63ca496d755c60080b61082579d
5
5
  SHA512:
6
- metadata.gz: 302321bce6eb8fbe408247b8ad4a24492843f0fa1572883977c61636cfb5f6b19e573ffc67f654b01d54e136bb1284502156ea61068b1cdbeda5dc6379ee80f8
7
- data.tar.gz: 4a6a2b5867e7e5e68e396d3632d1e00e71f641d785d8d2b1a2375de63c49face44d255ed60f0313c3018bf44e4fe34962915286093ecebe1c59d75b47bbdb700
6
+ metadata.gz: fd54b0aa75e0f0c7679b41012357455ef6788192946b7725061782e728c1faa77f935ddbb2791eea741476898082b24996225a1bfe781c0f9c79b3319340aa40
7
+ data.tar.gz: cc3d800dc061431e86eafd74c6fcdc4111c23199cdc3f0a196d7c618d900f988ad1abd78752587d5ea761499fef94079925fc59292c1a07c141f06ac6021d958
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- sportradar-api (0.19.6)
4
+ sportradar-api (0.20.0.pre)
5
5
  activesupport
6
6
  httparty (>= 0.14.0)
7
7
 
@@ -0,0 +1,59 @@
1
+ module Sportradar
2
+ module Api
3
+ module Mma
4
+ class Api < Request
5
+ attr_accessor :league_group, :access_level, :language_code, :error
6
+
7
+ def initialize(access_level: default_access_level, language_code: 'en', **args)
8
+ @league_group = league_group
9
+ @language_code = language_code
10
+ @access_level = access_level
11
+ # raise Sportradar::Api::Error::InvalidLeague unless allowed_leagues.include? @league_group
12
+ raise Sportradar::Api::Error::InvalidAccessLevel unless allowed_access_levels.include? @access_level
13
+ end
14
+
15
+ def default_year
16
+ Date.today.year
17
+ end
18
+ # def default_season
19
+ # 'reg'
20
+ # end
21
+ def default_access_level
22
+ if (ENV['SPORTRADAR_ENV_MMA'] || ENV['SPORTRADAR_ENV'] || ENV['RACK_ENV'] || ENV['RAILS_ENV']) == 'production'
23
+ 'production'
24
+ else
25
+ 'trial'
26
+ end
27
+ end
28
+
29
+ def content_format
30
+ 'json'
31
+ end
32
+
33
+ private
34
+
35
+ def request_url(path)
36
+ "/mma/#{access_level}/v#{version}/#{language_code}/#{path}"
37
+ end
38
+
39
+ def api_key
40
+ if !['trial', 'sim'].include?(access_level) || (access_level == 'sim' && default_access_level == 'production')
41
+ Sportradar::Api.api_key_params("mma", 'production')
42
+ else
43
+ Sportradar::Api.api_key_params("mma")
44
+ end
45
+ end
46
+
47
+ def version
48
+ Sportradar::Api.version('mma')
49
+ end
50
+
51
+ def allowed_access_levels
52
+ %w[production trial]
53
+ end
54
+
55
+ end
56
+
57
+ end
58
+ end
59
+ end
@@ -0,0 +1,62 @@
1
+ module Sportradar
2
+ module Api
3
+ module Mma
4
+ class Competition < Data
5
+ attr_reader :id, :name, :parent_id, :category
6
+
7
+ def initialize(data = {}, league_group: nil, **opts)
8
+ @response = data
9
+ @id = data["id"]
10
+ @api = opts[:api]
11
+
12
+ @name = data['name'] if data['name']
13
+ @parent_id = data['parent_id'] if data['parent_id']
14
+ @category = data['category'] if data['category']
15
+
16
+ @seasons_hash = {}
17
+
18
+ update(data, **opts)
19
+ end
20
+
21
+ def update(data, **opts)
22
+ parse_season(data)
23
+ end
24
+
25
+ def parse_season(data)
26
+ if data['seasons']
27
+ create_data(@seasons_hash, data['seasons'], klass: Season, api: api, competition: self)
28
+ end
29
+ end
30
+
31
+ def seasons
32
+ @seasons_hash.values
33
+ end
34
+
35
+ def api
36
+ @api ||= Sportradar::Api::Mma::Api.new
37
+ end
38
+
39
+ # url path helpers
40
+ def path_base
41
+ "competitions/#{ id }"
42
+ end
43
+
44
+ def path_seasons
45
+ "#{ path_base }/seasons"
46
+ end
47
+ def get_seasons
48
+ data = api.get_data(path_seasons).to_h
49
+ ingest_seasons(data)
50
+ end
51
+ def ingest_seasons(data)
52
+ update(data)
53
+ # TODO parse the rest of the data. keys: ["tournament", "seasons"]
54
+ data
55
+ end
56
+
57
+ end
58
+ end
59
+ end
60
+ end
61
+
62
+ __END__
@@ -1,6 +1,6 @@
1
1
  module Sportradar
2
2
  module Api
3
- class Mma
3
+ module Mma
4
4
  class Event < Data
5
5
  attr_accessor :response, :id, :name, :scheduled, :venue, :league
6
6
 
@@ -1,80 +1,101 @@
1
1
  module Sportradar
2
2
  module Api
3
- class Mma
3
+ module Mma
4
4
  class Fight < Data
5
- attr_accessor :response, :id, :event, :accolade, :scheduled_rounds, :weight_class, :result
6
- @all_hash = {}
7
- def self.new(data, **opts)
8
- existing = @all_hash[data['id']]
9
- if existing
10
- existing.update(data)
11
- # existing.add_event(opts[:event])
12
- # existing
13
- else
14
- @all_hash[data['id']] = super
15
- end
16
- end
17
- def self.all
18
- @all_hash.values
19
- end
5
+ attr_accessor :response, :id, :season, :start_time, :start_time_confirmed, :sport_event_context, :coverage, :venue, :status, :match_status, :winner_id, :final_round, :final_round_length, :end_method, :winner, :scheduled_length, :weight_class, :title_fight
20
6
 
21
7
  def initialize(data, **opts)
22
8
  @response = data
23
9
  @api = opts[:api]
24
- @event = opts[:event]
10
+ @season = opts[:season]
25
11
  @fighters_hash = {}
26
12
 
27
13
  @id = data['id']
14
+ @statistics = {}
28
15
 
29
16
  update(data)
30
17
  end
31
18
 
32
19
  def fighters
33
- @fighters_hash ||= update_fighters(response)
34
20
  @fighters_hash.values
35
21
  end
36
22
 
37
- def score
38
- result.scores
39
- end
40
-
41
23
  def update(data, **opts)
42
- @accolade = data['accolade'] if data['accolade']
43
- @scheduled_rounds = data['scheduled_rounds'] if data['scheduled_rounds'] # "3",
44
- @weight_class = data['weight_class'] if data['weight_class'] # {"id"=>"LW", "weight"=>"146-155", "description"=>"Lightweight"},
24
+ if data["sport_event"]
25
+ update(data["sport_event"])
26
+ end
27
+ if data["sport_event_status"]
28
+ update(data["sport_event_status"])
29
+ end
30
+
31
+ @id = data['id'] if data['id'] && !@id
32
+ @start_time = Time.parse(data['start_time']) if data['start_time']
33
+ @start_time_confirmed = data['start_time_confirmed'] if data['start_time_confirmed']
34
+ @sport_event_context = data['sport_event_context'] if data['sport_event_context']
35
+ @coverage = data['coverage'] if data['coverage']
36
+ @venue = data['venue'] if data['venue']
45
37
 
46
- @referee = Referee.new(data['referee'], fight: self, api: api) if data['referee']
47
- @result = Result.new(data['result'], fight: self, api: api) if data['result']
38
+ @status = data['status'] if data['status']
39
+ @match_status = data['match_status'] if data['match_status']
40
+ @winner_id = data['winner_id'] if data['winner_id']
41
+ @final_round = data['final_round'] if data['final_round']
42
+ @final_round_length = data['final_round_length'] if data['final_round_length']
43
+ @end_method = data['method'] if data['method']
44
+ @winner = data['winner'] if data['winner']
45
+ @scheduled_length = data['scheduled_length'] if data['scheduled_length']
46
+ @weight_class = data['weight_class'] if data['weight_class']
47
+ @title_fight = data['title_fight'] if data['title_fight']
48
48
 
49
- update_fighters(data) if data['fighters']
49
+
50
+ update_fighters(data) if data['competitors']
50
51
 
51
52
  self
52
53
  end
53
54
 
55
+ def season_id
56
+ @season&.id || @sport_event_context&.dig('season', 'id')
57
+ end
58
+
59
+ def starts_at
60
+ @start_time
61
+ end
62
+
63
+ def coverage_level
64
+ 'live' if @coverage&.dig('live')
65
+ end
66
+
67
+ def title
68
+ fighters.map(&:display_name).join(' vs ')
69
+ end
70
+
71
+ def scheduled
72
+ @start_time
73
+ end
74
+
54
75
  def update_fighters(data)
55
- create_data(@fighters_hash, response.dig('fighters', 'fighter'), klass: Fighter, api: api, fight: self)
76
+ if data['competitors']
77
+ create_data(@fighters_hash, data['competitors'], klass: Fighter, api: api, fight: self)
78
+ end
56
79
  end
57
80
  def api
58
81
  @api ||= Sportradar::Api::Mma.new
59
82
  end
60
83
 
61
84
 
62
- # def path_base
63
- # "games/#{ id }"
64
- # end
65
- # def path_box
66
- # "#{ path_base }/boxscore"
67
- # end
68
- # def path_pbp
69
- # "#{ path_base }/pbp"
70
- # end
85
+ def path_base
86
+ "sport_events/#{ id }"
87
+ end
71
88
 
72
- # def get_box
73
- # data = api.get_data(path_box)['game']
74
- # update(data)
75
- # @quarter = data.delete('quarter')
76
- # data
77
- # end
89
+ def path_summary
90
+ "#{ path_base }/summary"
91
+ end
92
+
93
+ def get_summary
94
+ data = api.get_data(path_summary)
95
+ update(data)
96
+
97
+ data
98
+ end
78
99
 
79
100
  # def get_pbp
80
101
  # data = api.get_data(path_pbp)['game']
@@ -1,22 +1,8 @@
1
1
  module Sportradar
2
2
  module Api
3
- class Mma
3
+ module Mma
4
4
  class Fighter < Data
5
- attr_accessor :response, :id, :height, :weight, :reach, :stance, :first_name, :nick_name, :last_name, :record, :born, :out_of
6
- @all_hash = {}
7
- def self.new(data, **opts)
8
- existing = @all_hash[data['id']]
9
- if existing
10
- existing.update(data, **opts)
11
- existing.add_fight(opts[:fight])
12
- existing
13
- else
14
- @all_hash[data['id']] = super
15
- end
16
- end
17
- def self.all
18
- @all_hash.values
19
- end
5
+ attr_accessor :response, :id, :height, :weight, :reach, :stance, :name, :first_name, :nick_name, :last_name, :record, :born, :out_of, :qualifier, :abbreviation
20
6
 
21
7
  def initialize(data, **opts)
22
8
  @response = data
@@ -36,8 +22,21 @@ module Sportradar
36
22
  @fights_hash[fight.id] = fight if fight
37
23
  end
38
24
 
25
+ def display_name
26
+ if first_name && last_name
27
+ "#{first_name} #{last_name}"
28
+ else
29
+ @name || @short_name
30
+ end
31
+ end
39
32
 
40
33
  def update(data, **opts)
34
+ @name = data['name'] if data['name']
35
+ @abbreviation = data['abbreviation'] if data['abbreviation']
36
+ @short_name = data['short_name'] if data['short_name']
37
+
38
+ @qualifier = data['qualifier'] if data['qualifier'] # "72",
39
+ @abbreviation = data['abbreviation'] if data['abbreviation'] # "72",
41
40
  @height = data['height'] if data['height'] # "72",
42
41
  @weight = data['weight'] if data['weight'] # "170",
43
42
  @reach = data['reach'] if data['reach'] # "",
@@ -45,6 +44,7 @@ module Sportradar
45
44
  @first_name = data['first_name'] if data['first_name'] # "Sai",
46
45
  @nick_name = data['nick_name'] if data['nick_name'] # "The Boss",
47
46
  @last_name = data['last_name'] if data['last_name'] # "Wang",
47
+ @name = data['name'] if data['name'] # "Wang, Sai",
48
48
  @record = data['record'] if data['record'] # {"wins"=>"6", "losses"=>"4", "draws"=>"1", "no_contests"=>"0"},
49
49
  @born = data['born'] if data['born'] # {"date"=>"1988-01-16", "country_code"=>"UNK", "country"=>"Unknown", "state"=>"", "city"=>""},
50
50
  @out_of = data['out_of'] if data['out_of'] # {"country_code"=>"UNK", "country"=>"Unknown", "state"=>"", "city"=>""}}
@@ -92,4 +92,4 @@ e = sc.events.sample;
92
92
  e.fights.first.fighters.first.born
93
93
 
94
94
  fighter_hash = {'id' => "259117dc-c443-4086-8c1d-abd082e3d4b9" } # => Conor McGregor
95
- f = Sportradar::Api::Mma::Fighter.new(fighter_hash)
95
+ f = Sportradar::Api::Mma::Fighter.new(fighter_hash)
@@ -1,6 +1,6 @@
1
1
  module Sportradar
2
2
  module Api
3
- class Mma
3
+ module Mma
4
4
  class Judge < Data
5
5
  attr_accessor :response, :id, :first_name, :last_name
6
6
  @all_hash = {}
@@ -67,4 +67,4 @@ e = sc.events.sample;
67
67
  e.fights.first.fighters.first.born
68
68
 
69
69
  fighter_hash = {'id' => "259117dc-c443-4086-8c1d-abd082e3d4b9" } # => Conor McGregor
70
- f = Sportradar::Api::Mma::Fighter.new(fighter_hash)
70
+ f = Sportradar::Api::Mma::Fighter.new(fighter_hash)
@@ -1,6 +1,6 @@
1
1
  module Sportradar
2
2
  module Api
3
- class Mma
3
+ module Mma
4
4
  class League < Data
5
5
  attr_accessor :response, :id, :event, :name, :alias
6
6
  @all_hash = {}
@@ -1,6 +1,6 @@
1
1
  module Sportradar
2
2
  module Api
3
- class Mma
3
+ module Mma
4
4
  class Referee < Data
5
5
  attr_accessor :response, :id, :first_name, :last_name
6
6
  @all_hash = {}
@@ -67,4 +67,4 @@ e = sc.events.sample;
67
67
  e.fights.first.fighters.first.born
68
68
 
69
69
  fighter_hash = {'id' => "259117dc-c443-4086-8c1d-abd082e3d4b9" } # => Conor McGregor
70
- f = Sportradar::Api::Mma::Fighter.new(fighter_hash)
70
+ f = Sportradar::Api::Mma::Fighter.new(fighter_hash)
@@ -1,6 +1,6 @@
1
1
  module Sportradar
2
2
  module Api
3
- class Mma
3
+ module Mma
4
4
  class Result < Data
5
5
  attr_accessor :response, :id, :round, :time, :outcome, :submission, :endstrike, :endtarget, :endposition, :winner, :draw
6
6
 
@@ -65,4 +65,4 @@ e = sc.events.sample;
65
65
  e.fights.first.fighters.first.born
66
66
 
67
67
  fighter_hash = {'id' => "259117dc-c443-4086-8c1d-abd082e3d4b9" } # => Conor McGregor
68
- f = Sportradar::Api::Mma::Fighter.new(fighter_hash)
68
+ f = Sportradar::Api::Mma::Fighter.new(fighter_hash)
@@ -1,6 +1,6 @@
1
1
  module Sportradar
2
2
  module Api
3
- class Mma
3
+ module Mma
4
4
  class Roster < Data
5
5
  attr_accessor :response, :id, :name, :scheduled, :venue
6
6
 
@@ -1,6 +1,6 @@
1
1
  module Sportradar
2
2
  module Api
3
- class Mma
3
+ module Mma
4
4
  class Schedule < Data
5
5
  attr_accessor :response, :id, :name, :scheduled, :venue
6
6
 
@@ -1,6 +1,6 @@
1
1
  module Sportradar
2
2
  module Api
3
- class Mma
3
+ module Mma
4
4
  class Score < Data
5
5
  attr_accessor :response, :id, :first_name, :last_name, :winner_score, :loser_score
6
6
  # @all_hash = {}
@@ -80,4 +80,4 @@ e = sc.events.sample;
80
80
  e.fights.first.fighters.first.born
81
81
 
82
82
  fighter_hash = {'id' => "259117dc-c443-4086-8c1d-abd082e3d4b9" } # => Conor McGregor
83
- f = Sportradar::Api::Mma::Fighter.new(fighter_hash)
83
+ f = Sportradar::Api::Mma::Fighter.new(fighter_hash)
@@ -0,0 +1,102 @@
1
+ module Sportradar
2
+ module Api
3
+ module Mma
4
+ class Season < Data
5
+ attr_reader :id, :name, :start_date, :end_date, :year, :competition_id
6
+
7
+ def initialize(data = {}, league_group: nil, **opts)
8
+ @response = data
9
+ @id = data["id"]
10
+ @api = opts[:api]
11
+
12
+ @fights_hash = {}
13
+ @fighters_hash = {}
14
+
15
+ update(data, **opts)
16
+ end
17
+
18
+ def update(data, **opts)
19
+ @name = data['name'] if data['name']
20
+ @start_date = Time.parse(data['start_date']) if data['start_date']
21
+ @end_date = Time.parse(data['end_date']) if data['end_date']
22
+ @year = data['year'] if data['year']
23
+ @competition_id = data['competition_id'] if data['competition_id']
24
+
25
+ parse_summary(data)
26
+ parse_competitors(data)
27
+ end
28
+
29
+ def fights
30
+ @fights_hash.values
31
+ end
32
+
33
+ def fighters
34
+ @fighters_hash.values
35
+ end
36
+
37
+ def future?
38
+ self.end_date > Time.now
39
+ end
40
+
41
+ def parse_summary(data)
42
+ if data['summaries']
43
+ create_data(@fights_hash, data['summaries'], klass: Fight, api: api, season: self)
44
+ end
45
+ end
46
+
47
+ def parse_competitors(data)
48
+ if data['season_competitors']
49
+ create_data(@fighters_hash, data['season_competitors'], klass: Fighter, api: api, season: self)
50
+ end
51
+ end
52
+
53
+ def api
54
+ @api ||= Sportradar::Api::Mma::Api.new
55
+ end
56
+
57
+ # url path helpers
58
+ def path_base
59
+ "seasons/#{ id }"
60
+ end
61
+
62
+ def path_summary
63
+ "#{ path_base }/summaries"
64
+ end
65
+ def get_summary
66
+ data = api.get_data(path_summary).to_h
67
+ ingest_summary(data)
68
+ end
69
+ def ingest_summary(data)
70
+ update(data)
71
+ # TODO parse the rest of the data. keys: ["tournament", "seasons"]
72
+ data
73
+ end
74
+
75
+ def path_competitors
76
+ "#{ path_base }/competitors"
77
+ end
78
+ def get_competitors
79
+ data = api.get_data(path_competitors).to_h
80
+ ingest_competitors(data)
81
+ end
82
+ def ingest_competitors(data)
83
+ update(data)
84
+ # TODO parse the rest of the data. keys: ["tournament", "seasons"]
85
+ data
86
+ end
87
+
88
+ end
89
+ end
90
+ end
91
+ end
92
+
93
+ __END__
94
+
95
+ {
96
+ "id"=>"sr:season:54879",
97
+ "name"=>"UFC Contender Series, Las Vegas, Week 26 2018",
98
+ "start_date"=>"2018-06-26",
99
+ "end_date"=>"2018-06-28",
100
+ "year"=>"2018",
101
+ "competition_id"=>"sr:competition:25357"
102
+ }
@@ -1,6 +1,6 @@
1
1
  module Sportradar
2
2
  module Api
3
- class Mma
3
+ module Mma
4
4
  class Venue < Data
5
5
  attr_accessor :response, :id, :name, :address, :city, :state, :country, :zip, :capacity, :timezone
6
6
  @all_hash = {}
@@ -1,182 +1,64 @@
1
+ require_relative "mma/api"
2
+ require_relative "mma/competition"
3
+ require_relative "mma/season"
4
+ require_relative "mma/schedule"
5
+ require_relative "mma/roster"
6
+ require_relative "mma/fighter"
7
+ require_relative "mma/event"
8
+ require_relative "mma/fight"
9
+ require_relative "mma/judge"
10
+ require_relative "mma/referee"
11
+ require_relative "mma/result"
12
+ require_relative "mma/score"
13
+ require_relative "mma/venue"
14
+ require_relative "mma/league"
15
+
1
16
  module Sportradar
2
17
  module Api
3
- class Mma < Request
4
- attr_accessor :league, :access_level, :simulation, :error
18
+ module Mma
5
19
 
6
- def initialize(access_level = 't')
7
- @league = 'mma'
8
- raise Sportradar::Api::Error::InvalidAccessLevel unless allowed_access_levels.include? access_level
9
- @access_level = access_level
20
+ def self.parse_results(arr)
21
+ arr.map { |hash| hash["sport_event"].merge(hash["sport_event_status"]) }
10
22
  end
11
23
 
12
- def schedule
13
- response = get request_url("schedule")
14
- if response.success? && response['schedule']
15
- Sportradar::Api::Mma::Schedule.new(response['schedule'], api: self)
16
- else
17
- @error = response
18
- end
24
+ def self.get_competitions
25
+ data = api.get_data(path_competitions).to_h
26
+ parse_competitions(data)
19
27
  end
20
28
 
21
- def participants
22
- response = get request_url("profiles")
23
- if response.success? && response['profile']
24
- Sportradar::Api::Mma::Roster.new(response['profile'], api: self)
25
- else
26
- @error = response
27
- end
28
- end
29
-
30
- def statistics(event_id = "8f85ecc5-0d4d-470b-b357-075cc7e7bedd")
31
- event_hash = {"id" => event_id } # => UFC 205 - McGregor/Alvarez
32
- event = Event.new({ 'id' => event_id })
33
- event.get_stats
34
- end
35
- def generate_simulation_event(event_id = "8f85ecc5-0d4d-470b-b357-075cc7e7bedd")
36
- event = Event.new({ 'id' => event_id })
37
- i = 0
38
- base_path = "simulations/mma/#{event_id}"
39
- FileUtils.mkdir_p(base_path)
40
- loop do
41
- t = Time.now
42
- print "#{t}: Data pull #{i+=1}\r"
43
- res = event.get_stats.body
44
- File.write("#{base_path}/#{t.to_i}.xml", res)
45
- wait = (t.to_i + 60 - Time.now.to_i)
46
- wait.times do |j|
47
- print "#{t}: Data pull #{i} complete, #{wait - j} seconds until next.\r"
48
- sleep 1
29
+ def self.parse_competitions(data)
30
+ if data['competitions']
31
+ data['competitions'].map do |hash|
32
+ Competition.new(hash, api: api)
49
33
  end
50
- puts
51
34
  end
52
35
  end
53
36
 
54
- # def roster(team_id, year = Date.today.year, season = "reg")
55
- # Team.new(team_id).tap { |team| team.roster }
56
- # end
57
-
58
-
59
- # def weekly_depth_charts(week = 1, year = Date.today.year, season = "reg" )
60
- # response = get request_url("seasontd/#{ week_path(year, season, week) }/depth_charts")
61
- # Sportradar::Api::Nfl::LeagueDepthChart.new response
62
- # end
63
-
64
- # def weekly_injuries(week = 1, year = Date.today.year, season = "reg")
65
- # response = get request_url("seasontd/#{ week_path(year, season, week) }/injuries")
66
- # Sportradar::Api::Nfl::Season.new response["season"] if response.success? && response["season"]
67
- # end
68
-
69
- # # gid = '8494fbf9-fe96-4d6d-81b2-5ed32347676f'
70
- # # past_game_id = "0141a0a5-13e5-4b28-b19f-0c3923aaef6e"
71
- # # future_game_id = "28290722-4ceb-4a4c-a4e5-1f9bec7283b3"
72
- # def game_boxscore(game_id)
73
- # check_simulation(game_id)
74
- # response = get request_url("games/#{ game_id }/boxscore")
75
- # Sportradar::Api::Nfl::Game.new response["game"] if response.success? && response["game"] # mostly done, just missing play statistics
76
- # end
77
-
78
- # def game_roster(game_id)
79
- # check_simulation(game_id)
80
- # response = get request_url("games/#{ game_id }/roster")
81
- # Sportradar::Api::Nfl::Game.new response["game"] if response.success? && response["game"]
82
- # end
83
-
84
- # def game_statistics(game_data)
85
- # # check_simulation(game_id)
86
- # base = "#{ year }/#{ mma_season }/#{ mma_season_week }/#{ away_team}/#{ home_team }/statistics"
87
- # response = get_data(base)
88
- # Sportradar::Api::Nfl::Game.new response["game"] if response.success? && response["game"]
89
- # ## Need to properly implement statistics
90
- # end
91
-
92
- # def play_by_play(game_id)
93
- # check_simulation(game_id)
94
- # response = get request_url("games/#{ game_id }/pbp")
95
- # Sportradar::Api::Nfl::Game.new response["game"] if response.success? && response["game"]
96
- # # need to get into quarters, drives, plays, stats more still
97
- # end
98
-
99
- # # player_id = "ede260be-5ae6-4a06-887b-e4a130932705"
100
- # def player_profile(player_id)
101
- # response = get request_url("players/#{ player_id }/profile")
102
- # Sportradar::Api::Nfl::Player.new response["player"] if response.success? && response["player"]
103
- # end
104
-
105
- # # team_id = "97354895-8c77-4fd4-a860-32e62ea7382a"
106
- # def seasonal_statistics(team_id, year = Date.today.year, season = "reg")
107
- # raise Sportradar::Api::Error::InvalidLeague unless allowed_seasons.include? season
108
- # response = get request_url("seasontd/#{ year }/#{ season }/teams/#{ team_id }/statistics")
109
- # Sportradar::Api::Nfl::Season.new response["season"] if response.success? && response["season"]
110
- # # TODO: Object map team & player records - statistics
111
- # end
112
-
113
- # def team_profile(team_id)
114
- # response = get request_url("teams/#{ team_id }/profile")
115
- # Sportradar::Api::Nfl::Team.new response["team"] if response.success? && response["team"]
116
- # end
117
-
118
- # def league_hierarchy
119
- # response = get request_url("league/hierarchy")
120
- # Sportradar::Api::Nfl::Hierarchy.new response["league"] if response.success? && response["league"]
121
- # end
122
-
123
- # def standings(year = Date.today.year)
124
- # response = get request_url("seasontd/#{ year }/standings")
125
- # Sportradar::Api::Nfl::Season.new response["season"] if response.success? && response["season"]
126
- # # TODO Needs implement rankings/records/stats on team
127
- # end
128
-
129
- # def daily_change_log(date = Date.today)
130
- # response = get request_url("league/#{date_path(date)}/changes")
131
- # Sportradar::Api::Nfl::Changelog.new response["league"]["changelog"] if response.success? && response["league"] && response["league"]["changelog"]
132
- # end
133
-
134
- # def simulation_games
135
- # [
136
- # # "f45b4a31-b009-4039-8394-42efbc6d5532",
137
- # # "5a7042cb-fe7a-4838-b93f-6b8c167ec384",
138
- # # "7f761bb5-7963-43ea-a01b-baf4f5d50fe3"
139
- # ]
140
- # end
141
-
142
- # def active_simulation
143
- # game = simulation_games.lazy.map {|game_id| game_boxscore game_id }.find{ |game| game.status == 'inprogress'}
144
- # if game
145
- # puts "Live Game: #{game.summary.home.full_name} vs #{game.summary.away.full_name}. Q#{game.quarter} #{game.clock}. game_id='#{game.id}'"
146
- # game
147
- # else
148
- # puts "No active simulation"
149
- # end
150
- # end
151
-
152
- def get_data(url)
153
- get request_url(url)
37
+ # url path helpers
38
+ def self.path_competitions
39
+ "competitions"
154
40
  end
155
41
 
156
- private
157
-
158
- # def check_simulation(game_id)
159
- # @simulation = true if simulation_games.include?(game_id)
160
- # end
161
-
162
- def request_url(path)
163
- "/mma-#{access_level}#{version}/#{path}"
42
+ def self.get_seasons
43
+ data = api.get_data(path_seasons).to_h
44
+ parse_seasons(data)
164
45
  end
165
46
 
166
- def api_key
167
- if access_level != 't'
168
- Sportradar::Api.api_key_params('mma', 'production')
169
- else
170
- Sportradar::Api.api_key_params('mma')
47
+ def self.parse_seasons(data)
48
+ if data['seasons']
49
+ data['seasons'].map do |hash|
50
+ Season.new(hash, api: api)
51
+ end
171
52
  end
172
53
  end
173
54
 
174
- def version
175
- Sportradar::Api.version('mma')
55
+ # url path helpers
56
+ def self.path_seasons
57
+ "seasons"
176
58
  end
177
59
 
178
- def allowed_access_levels
179
- %w[p t]
60
+ def self.api
61
+ @api ||= Sportradar::Api::Mma::Api.new
180
62
  end
181
63
 
182
64
  end
@@ -185,11 +67,14 @@ end
185
67
 
186
68
  __END__
187
69
 
188
- sr = Sportradar::Api::Mma.new
189
- ss = sr.schedule;
190
- sp = sr.participants;
191
-
192
- ss.games.count
193
- ss.weeks.count
194
- ss.weeks.first.response['game'].count
195
-
70
+ comps = Sportradar::Api::Mma.get_competitions;
71
+ comp = comps.first
72
+ comp.get_seasons
73
+ sea = comp.seasons.first
74
+
75
+ seasons = Sportradar::Api::Mma.get_seasons
76
+ sea = seasons.detect { |s| s.id == "sr:season:94429" }
77
+ sea.get_competitors
78
+ sea.get_summary
79
+ fight = sea.fights.detect { |f| f.id == "sr:sport_event:34102625" }
80
+ fight.title
@@ -56,6 +56,7 @@ module Sportradar
56
56
  puts response.inspect
57
57
  Sportradar::Api::Error.new(response.code, response.message, response)
58
58
  else
59
+ File.write("response.json", JSON.pretty_generate(response.to_h)) if ENV['SPORTRADAR_LOG']
59
60
  response
60
61
  end
61
62
  end
@@ -1,5 +1,5 @@
1
1
  module Sportradar
2
2
  module Api
3
- VERSION = "0.19.6"
3
+ VERSION = "0.20.0.pre"
4
4
  end
5
5
  end
@@ -27,17 +27,6 @@ require "sportradar/api/images/ref"
27
27
  require "sportradar/api/images/tag"
28
28
 
29
29
  require "sportradar/api/mma"
30
- require "sportradar/api/mma/schedule"
31
- require "sportradar/api/mma/roster"
32
- require "sportradar/api/mma/fighter"
33
- require "sportradar/api/mma/event"
34
- require "sportradar/api/mma/fight"
35
- require "sportradar/api/mma/judge"
36
- require "sportradar/api/mma/referee"
37
- require "sportradar/api/mma/result"
38
- require "sportradar/api/mma/score"
39
- require "sportradar/api/mma/venue"
40
- require "sportradar/api/mma/league"
41
30
 
42
31
 
43
32
  require "sportradar/api/content"
@@ -65,7 +54,7 @@ module Sportradar
65
54
  {api: :olympics, version: 2},
66
55
  {api: :soccer, version: 4},
67
56
  {api: :ncaawb, version: 3},
68
- {api: :mma, version: 1},
57
+ {api: :mma, version: 2},
69
58
  {api: :cricket, version: 1},
70
59
  {api: :wnba, version: 3},
71
60
  {api: :ncaamh, version: 3},
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.19.6
4
+ version: 0.20.0.pre
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ben Eggett
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-08-17 00:00:00.000000000 Z
11
+ date: 2022-09-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -392,6 +392,8 @@ files:
392
392
  - lib/sportradar/api/images/tag.rb
393
393
  - lib/sportradar/api/live_images.rb
394
394
  - lib/sportradar/api/mma.rb
395
+ - lib/sportradar/api/mma/api.rb
396
+ - lib/sportradar/api/mma/competition.rb
395
397
  - lib/sportradar/api/mma/event.rb
396
398
  - lib/sportradar/api/mma/fight.rb
397
399
  - lib/sportradar/api/mma/fighter.rb
@@ -402,6 +404,7 @@ files:
402
404
  - lib/sportradar/api/mma/roster.rb
403
405
  - lib/sportradar/api/mma/schedule.rb
404
406
  - lib/sportradar/api/mma/score.rb
407
+ - lib/sportradar/api/mma/season.rb
405
408
  - lib/sportradar/api/mma/venue.rb
406
409
  - lib/sportradar/api/odds.rb
407
410
  - lib/sportradar/api/odds/README.md
@@ -456,9 +459,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
456
459
  version: '0'
457
460
  required_rubygems_version: !ruby/object:Gem::Requirement
458
461
  requirements:
459
- - - ">="
462
+ - - ">"
460
463
  - !ruby/object:Gem::Version
461
- version: '0'
464
+ version: 1.3.1
462
465
  requirements: []
463
466
  rubygems_version: 3.0.3.1
464
467
  signing_key: