class Mysportsfeeds::Api::API_v1_0

API class for dealing with v1.0 of the API

Public Class Methods

new(verbose, store_type=nil, store_location=nil) click to toggle source

Constructor

# File lib/mysportsfeeds/api/API_v1_0.rb, line 15
def initialize(verbose, store_type=nil, store_location=nil)
    @base_uri = URI("https://www.mysportsfeeds.com/api/feed/pull")
    @headers = {
        "Accept-Encoding" => "gzip",
        "User-Agent" => "MySportsFeeds Ruby/#{Mysportsfeeds::Ruby::VERSION} (#{RUBY_PLATFORM})"
    }

    @verbose = verbose
    @store_type = store_type
    @store_location = store_location

    @valid_feeds = [
        'current_season',
        'cumulative_player_stats',
        'full_game_schedule',
        'daily_game_schedule',
        'daily_player_stats',
        'game_playbyplay',
        'game_boxscore',
        'scoreboard',
        'player_gamelogs',
        'team_gamelogs',
        'roster_players',
        'game_startinglineup',
        'active_players',
        'player_injuries',
        'latest_updates',
        'daily_dfs',
        'overall_team_standings',
        'conference_team_standings',
        'division_team_standings',
        'playoff_team_standings'
    ]
end

Public Instance Methods

__league_and_season_url(league, season, feed, output_format, params) click to toggle source

Feed URL (with league + season specified)

# File lib/mysportsfeeds/api/API_v1_0.rb, line 89
def __league_and_season_url(league, season, feed, output_format, params)
    url = "#{@base_uri.to_s}/#{league}/#{season}/#{feed}.#{output_format}"

    delim = "?"
    params.each do |key, value|
        url << delim << key << "=" << value
        delim = "&"
    end

    return url
end
__league_only_url(league, feed, output_format, params) click to toggle source

Feed URL (with only a league specified)

# File lib/mysportsfeeds/api/API_v1_0.rb, line 76
def __league_only_url(league, feed, output_format, params)
    url "#{@base_uri.to_s}/#{league}/#{feed}.#{output_format}"

    delim = "?"
    params.each do |key, value|
        url << delim << key << "=" << value
        delim = "&"
    end

    return url
end
__make_output_filename(league, season, feed, output_format, params) click to toggle source

Generate the appropriate filename for a feed request

# File lib/mysportsfeeds/api/API_v1_0.rb, line 102
def __make_output_filename(league, season, feed, output_format, params)
    filename = "#{feed}-#{league.downcase}-#{season}"

    if params.key?("gameid")
        filename << "-" << params["gameid"]
    end

    if params.key?("fordate")
        filename << "-" << params["fordate"]
    end

    filename << "." << output_format

    return filename
end
__save_feed(response, league, season, feed, output_format, params) click to toggle source

Save a feed response based on the store_type

# File lib/mysportsfeeds/api/API_v1_0.rb, line 119
def __save_feed(response, league, season, feed, output_format, params)
    # Save to memory regardless of selected method
    if output_format == "json"
        store_output = JSON.parse(response)
    elsif output_format == "xml"
        store_output = response
    elsif output_format == "csv"
        store_output = response
    end

    if @store_type == "file"
        if !File.exist?(@store_location)
            FileUtils::mkdir_p(@store_location)
        end

        filename = __make_output_filename(league, season, feed, output_format, params)

        outfile = File.open(@store_location + filename, "w")
        if output_format == "json"  # This is JSON
            json_out = response.to_json.gsub('\\', '').strip
            outfile.write(json_out[1..json_out.size-2])

        elsif output_format == "xml"  # This is xml
            outfile.write(store_output)

        elsif output_format == "csv"  # This is csv
            outfile.write(store_output)

        else
            raise Exception.new("Could not interpret feed output format")
        end
    end
end
__verify_feed_name(feed) click to toggle source

Verify a feed

# File lib/mysportsfeeds/api/API_v1_0.rb, line 51
def __verify_feed_name(feed)
    is_valid = false

    for value in @valid_feeds
        if value == feed
            is_valid = true
            break
        end
    end

    return is_valid
end
__verify_format(format) click to toggle source

Verify output format

# File lib/mysportsfeeds/api/API_v1_0.rb, line 65
def __verify_format(format)
    is_valid = true

    if format != 'json' and format != 'xml' and format != 'csv'
        is_valid = false
    end

    return is_valid
end
get_data(league, season, feed, output_format, kwargs) click to toggle source

Request data (and store it if applicable)

# File lib/mysportsfeeds/api/API_v1_0.rb, line 164
def get_data(league, season, feed, output_format, kwargs)
    if !@auth
        raise Exception.new("You must authenticate() before making requests.")
    end

    # establish defaults for all variables
    params = {}

    # add force=false parameter (helps prevent unnecessary bandwidth use)
    kwargs.each do |kwarg|
        kwarg.each do |key, value|
            params[key] = value
        end
    end

    if !params.key?("force")
        params['force'] = 'false'
    end

    if __verify_feed_name(feed) == false
        raise Exception.new("Unknown feed '" + feed + "'.")
    end

    if __verify_format(output_format) == false
        raise Exception.new("Unsupported format '" + output_format + "'.")
    end

    if feed == 'current_season'
        url = __league_only_url(league, feed, output_format, params)
    else
        url = __league_and_season_url(league, season, feed, output_format, params)
    end

    if @verbose
        puts "Making API request to '#{url}'."
        puts "  with headers:"
        puts @headers
    end

    http = Net::HTTP.new(@base_uri.host, @base_uri.port)
    http.use_ssl = true
    http.verify_mode = OpenSSL::SSL::VERIFY_NONE
    request = Net::HTTP::Get.new(url)
    request.basic_auth(@auth["username"], @auth["password"])

    r = http.request(request)
    if @verbose
        puts "response = #{r}"
    end

    if r.code == "200"
        if @store_type != nil
            __save_feed(r.body, league, season, feed, output_format, params)
        end

        if output_format == "json"
            data = JSON.parse(r.body)
        elsif output_format == "xml"
            data = r.body
        else
            data = r.body
        end

    elsif r.code == "304"
        if @verbose
            puts "Data hasn't changed since last call"
        end

        filename = __make_output_filename(league, season, feed, output_format, params)

        f = File.read(@store_location + filename)
        if output_format == "json"
            data = JSON.parse(f)
        elsif output_format == "xml"
            data = f
        else
            data = f
        end

    else
        puts "API call failed with error: #{r.code}"
    end

    return data
end
set_auth_credentials(username, password) click to toggle source

Establish BASIC auth credentials

# File lib/mysportsfeeds/api/API_v1_0.rb, line 159
def set_auth_credentials(username, password)
    @auth = {"username" => username, "password" => password}
end
supports_basic_auth() click to toggle source

Indicate this version does support BASIC auth

# File lib/mysportsfeeds/api/API_v1_0.rb, line 154
def supports_basic_auth()
    return true
end