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