lib/sportradar/api/mma.rb in sportradar-api-0.19.6 vs lib/sportradar/api/mma.rb in sportradar-api-0.20.0.pre
- old
+ new
@@ -1,195 +1,80 @@
+require_relative "mma/api"
+require_relative "mma/competition"
+require_relative "mma/season"
+require_relative "mma/schedule"
+require_relative "mma/roster"
+require_relative "mma/fighter"
+require_relative "mma/event"
+require_relative "mma/fight"
+require_relative "mma/judge"
+require_relative "mma/referee"
+require_relative "mma/result"
+require_relative "mma/score"
+require_relative "mma/venue"
+require_relative "mma/league"
+
module Sportradar
module Api
- class Mma < Request
- attr_accessor :league, :access_level, :simulation, :error
+ module Mma
- def initialize(access_level = 't')
- @league = 'mma'
- raise Sportradar::Api::Error::InvalidAccessLevel unless allowed_access_levels.include? access_level
- @access_level = access_level
+ def self.parse_results(arr)
+ arr.map { |hash| hash["sport_event"].merge(hash["sport_event_status"]) }
end
- def schedule
- response = get request_url("schedule")
- if response.success? && response['schedule']
- Sportradar::Api::Mma::Schedule.new(response['schedule'], api: self)
- else
- @error = response
- end
+ def self.get_competitions
+ data = api.get_data(path_competitions).to_h
+ parse_competitions(data)
end
- def participants
- response = get request_url("profiles")
- if response.success? && response['profile']
- Sportradar::Api::Mma::Roster.new(response['profile'], api: self)
- else
- @error = response
- end
- end
-
- def statistics(event_id = "8f85ecc5-0d4d-470b-b357-075cc7e7bedd")
- event_hash = {"id" => event_id } # => UFC 205 - McGregor/Alvarez
- event = Event.new({ 'id' => event_id })
- event.get_stats
- end
- def generate_simulation_event(event_id = "8f85ecc5-0d4d-470b-b357-075cc7e7bedd")
- event = Event.new({ 'id' => event_id })
- i = 0
- base_path = "simulations/mma/#{event_id}"
- FileUtils.mkdir_p(base_path)
- loop do
- t = Time.now
- print "#{t}: Data pull #{i+=1}\r"
- res = event.get_stats.body
- File.write("#{base_path}/#{t.to_i}.xml", res)
- wait = (t.to_i + 60 - Time.now.to_i)
- wait.times do |j|
- print "#{t}: Data pull #{i} complete, #{wait - j} seconds until next.\r"
- sleep 1
+ def self.parse_competitions(data)
+ if data['competitions']
+ data['competitions'].map do |hash|
+ Competition.new(hash, api: api)
end
- puts
end
end
- # def roster(team_id, year = Date.today.year, season = "reg")
- # Team.new(team_id).tap { |team| team.roster }
- # end
-
-
- # def weekly_depth_charts(week = 1, year = Date.today.year, season = "reg" )
- # response = get request_url("seasontd/#{ week_path(year, season, week) }/depth_charts")
- # Sportradar::Api::Nfl::LeagueDepthChart.new response
- # end
-
- # def weekly_injuries(week = 1, year = Date.today.year, season = "reg")
- # response = get request_url("seasontd/#{ week_path(year, season, week) }/injuries")
- # Sportradar::Api::Nfl::Season.new response["season"] if response.success? && response["season"]
- # end
-
- # # gid = '8494fbf9-fe96-4d6d-81b2-5ed32347676f'
- # # past_game_id = "0141a0a5-13e5-4b28-b19f-0c3923aaef6e"
- # # future_game_id = "28290722-4ceb-4a4c-a4e5-1f9bec7283b3"
- # def game_boxscore(game_id)
- # check_simulation(game_id)
- # response = get request_url("games/#{ game_id }/boxscore")
- # Sportradar::Api::Nfl::Game.new response["game"] if response.success? && response["game"] # mostly done, just missing play statistics
- # end
-
- # def game_roster(game_id)
- # check_simulation(game_id)
- # response = get request_url("games/#{ game_id }/roster")
- # Sportradar::Api::Nfl::Game.new response["game"] if response.success? && response["game"]
- # end
-
- # def game_statistics(game_data)
- # # check_simulation(game_id)
- # base = "#{ year }/#{ mma_season }/#{ mma_season_week }/#{ away_team}/#{ home_team }/statistics"
- # response = get_data(base)
- # Sportradar::Api::Nfl::Game.new response["game"] if response.success? && response["game"]
- # ## Need to properly implement statistics
- # end
-
- # def play_by_play(game_id)
- # check_simulation(game_id)
- # response = get request_url("games/#{ game_id }/pbp")
- # Sportradar::Api::Nfl::Game.new response["game"] if response.success? && response["game"]
- # # need to get into quarters, drives, plays, stats more still
- # end
-
- # # player_id = "ede260be-5ae6-4a06-887b-e4a130932705"
- # def player_profile(player_id)
- # response = get request_url("players/#{ player_id }/profile")
- # Sportradar::Api::Nfl::Player.new response["player"] if response.success? && response["player"]
- # end
-
- # # team_id = "97354895-8c77-4fd4-a860-32e62ea7382a"
- # def seasonal_statistics(team_id, year = Date.today.year, season = "reg")
- # raise Sportradar::Api::Error::InvalidLeague unless allowed_seasons.include? season
- # response = get request_url("seasontd/#{ year }/#{ season }/teams/#{ team_id }/statistics")
- # Sportradar::Api::Nfl::Season.new response["season"] if response.success? && response["season"]
- # # TODO: Object map team & player records - statistics
- # end
-
- # def team_profile(team_id)
- # response = get request_url("teams/#{ team_id }/profile")
- # Sportradar::Api::Nfl::Team.new response["team"] if response.success? && response["team"]
- # end
-
- # def league_hierarchy
- # response = get request_url("league/hierarchy")
- # Sportradar::Api::Nfl::Hierarchy.new response["league"] if response.success? && response["league"]
- # end
-
- # def standings(year = Date.today.year)
- # response = get request_url("seasontd/#{ year }/standings")
- # Sportradar::Api::Nfl::Season.new response["season"] if response.success? && response["season"]
- # # TODO Needs implement rankings/records/stats on team
- # end
-
- # def daily_change_log(date = Date.today)
- # response = get request_url("league/#{date_path(date)}/changes")
- # Sportradar::Api::Nfl::Changelog.new response["league"]["changelog"] if response.success? && response["league"] && response["league"]["changelog"]
- # end
-
- # def simulation_games
- # [
- # # "f45b4a31-b009-4039-8394-42efbc6d5532",
- # # "5a7042cb-fe7a-4838-b93f-6b8c167ec384",
- # # "7f761bb5-7963-43ea-a01b-baf4f5d50fe3"
- # ]
- # end
-
- # def active_simulation
- # game = simulation_games.lazy.map {|game_id| game_boxscore game_id }.find{ |game| game.status == 'inprogress'}
- # if game
- # puts "Live Game: #{game.summary.home.full_name} vs #{game.summary.away.full_name}. Q#{game.quarter} #{game.clock}. game_id='#{game.id}'"
- # game
- # else
- # puts "No active simulation"
- # end
- # end
-
- def get_data(url)
- get request_url(url)
+ # url path helpers
+ def self.path_competitions
+ "competitions"
end
- private
-
- # def check_simulation(game_id)
- # @simulation = true if simulation_games.include?(game_id)
- # end
-
- def request_url(path)
- "/mma-#{access_level}#{version}/#{path}"
+ def self.get_seasons
+ data = api.get_data(path_seasons).to_h
+ parse_seasons(data)
end
- def api_key
- if access_level != 't'
- Sportradar::Api.api_key_params('mma', 'production')
- else
- Sportradar::Api.api_key_params('mma')
+ def self.parse_seasons(data)
+ if data['seasons']
+ data['seasons'].map do |hash|
+ Season.new(hash, api: api)
+ end
end
end
- def version
- Sportradar::Api.version('mma')
+ # url path helpers
+ def self.path_seasons
+ "seasons"
end
- def allowed_access_levels
- %w[p t]
+ def self.api
+ @api ||= Sportradar::Api::Mma::Api.new
end
end
end
end
__END__
-sr = Sportradar::Api::Mma.new
-ss = sr.schedule;
-sp = sr.participants;
+comps = Sportradar::Api::Mma.get_competitions;
+comp = comps.first
+comp.get_seasons
+sea = comp.seasons.first
-ss.games.count
-ss.weeks.count
-ss.weeks.first.response['game'].count
-
+seasons = Sportradar::Api::Mma.get_seasons
+sea = seasons.detect { |s| s.id == "sr:season:94429" }
+sea.get_competitors
+sea.get_summary
+fight = sea.fights.detect { |f| f.id == "sr:sport_event:34102625" }
+fight.title