Module api
Expand source code
import requests
import pandas as pd
class TheOddsAPI(object):
"""
This module provides functions to get historical snapshots of sports odds
data back to 2020 as well as game scores and results for past and live games.
"""
HOST = "https://api.the-odds-api.com"
def _get(self, host, endpoint, params):
"""Helper function for GET requests to The Odds API server
Parameters
----------
host : str
The host used by all requests
endpoint : str
A valid endpoint to make a request to.
See https://the-odds-api.com/liveapi/guides/v4/ for a comprehensive
list.
params : dict
Valid parameters to pass as part of GET requests to various
endpoints. See https://app.swaggerhub.com/apis-docs/the-odds-api/odds-api/4
for a comprehensive list.
Returns
-------
dict or None
Returns response from server if successful; otherwise, returns None
"""
print(host+endpoint)
params['apiKey'] = self.api_key
print(params['apiKey'])
response = requests.get(host + endpoint, params=params)
if response.status_code != 200:
print(
f'Failed to get {endpoint}: status_code {response.status_code}, response body {response.text}')
return None
else:
return response.json()
def __init__(self, api_key: str):
self.api_key = api_key
def get_sports(self, params):
endpoint = f"/v4/sports/"
sports_response = self._get(TheOddsAPI.HOST, endpoint, params)
print("sports response type: ", type(sports_response))
return sports_response
def _get_usage_quota_helper(self):
"""Helper function for getting requests used and requests remaining
Returns
-------
Response
response object from GET request to the /v4/sports endpoint which
does not affect the usage quota
"""
# Make a request that does not affect the usage quota
params = dict()
endpoint = f"/v4/sports/"
response = self.get_sports({'apiKey': self.api_key})
params['apiKey'] = self.api_key
# Do NOT return the json of the response because we will need the headers
response = requests.get(TheOddsAPI.HOST + endpoint, params=params)
return response
def get_requests_remaining(self):
"""Get the number of requests remaining for current month
Returns
-------
int
Number of requests remaining for current month
"""
usage_response = self._get_usage_quota_helper()
return int(usage_response.headers['x-requests-remaining'])
def get_requests_used(self):
"""Get the number of requests used in current month
Returns
-------
int
Number of requests used in current month
"""
usage_response = self._get_usage_quota_helper()
return int(usage_response.headers['x-requests-used'])
def get_odds(self, **kwargs):
"""Returns a list of upcoming and live games with recent odds for a
given sport, region and market
Parameters
----------
sport : str
Sport key for which to return games and odds. Obtained from the
/sports endpoint
regions : str
Which bookmakers to appear in the response.
markets : str
The odds market to return.
eventId : str
Comma-separated game id(s) of upcoming or live game(s). Filters the
response to only return games for the specified game ids, provided
those games have not expired.
bookmakers : list[int]
The bookmaker(s) to be returned. Every group of 10 bookmakers
counts as 1 request.
"""
# Create the query parameters from the kwargs
params = kwargs
sport = params['sport']
del params['sport']
endpoint = f'/v4/sports/{sport}/odds'
odds_response = self._get(TheOddsAPI.HOST, endpoint, params)
return odds_response
def get_scores(self, **kwargs):
"""Returns a list of upcoming, live and recently completed games for a
given sport. Live and recently completed games contain scores. Games
from up to 3 days ago can be returned using the daysFrom parameter.
Live scores update approximately every 30 seconds.
Parameters
----------
sport : str
Sport key for which to return games and odds. See list of covered
sports at https://the-odds-api.com/sports-odds-data/sports-apis.html
params : dict
See https://the-odds-api.com/liveapi/guides/v4/#parameters-3
"""
# Create the query parameters from the kwargs
params = kwargs
print(params)
sport = params['sport']
del params['sport']
endpoint = f'/v4/sports/{sport}/scores/'
scores_response = self._get(TheOddsAPI.HOST, endpoint, params)
return scores_response
def get_historical_odds(self, **kwargs):
"""Returns a snapshot of games with bookmaker odds for a given sport, region
and market, at a given historical date. Historical odds data is available
from June 6th 2020, with snapshots taken at 10 minute intervals. From
September 2022, historical odds snapshots are available at 5 minute
intervals. The historical odds endpoint is only available on paid
usage plans at this time.
Parameters
----------
sport : str
Sport key for which to return games and odds. Obtained from the
/sports endpoint
regions : str
Which bookmakers to appear in the response.
markets : str
The odds market to return.
date : str
The timestamp of the data snapshot to be returned, specified in
ISO8601 format. Closest snapshot equal to or earlier than date
provided will be returned.
eventId : list[str]
Comma-separated game id(s) of upcoming or live game(s). Filters the
response to only return games for the specified game ids, provided
those games have not expired.
bookmakers : list[int]
The bookmaker(s) to be returned. Every group of 10 bookmakers
counts as 1 request.
"""
# Create the query parameters from the kwargs
params = kwargs
sport = params['sport']
del params['sport']
# Create the endpoint from the kwargs
endpoint = f'/v4/sports/{sport}/odds-history/'
odds_history_response = self._get(TheOddsAPI.HOST, endpoint, params)
return odds_history_response
def get_event_odds(self, **kwargs):
"""Returns odds for a single game. Accepts any available betting markets
using the markets parameter. To get available markets info, use
get_featured_betting_markets, get_additonal_markets, or get_player_props
endpoint.
Parameters
----------
sport : str
Sport key for which to return games and odds. Obtained from the
/sports endpoint
regions : str
Which bookmakers to appear in the response.
markets : str
The odds market to return.
eventId : str
Comma-separated game id(s) of upcoming or live game(s). Filters the
response to only return games for the specified game ids, provided
those games have not expired.
bookmakers : list[int]
The bookmaker(s) to be returned. Every group of 10 bookmakers
counts as 1 request.
"""
# Create the query parameters from the kwargs
params = kwargs
sport = params['sport']
event_id = params['eventId']
del params['sport']
del params['eventId']
# Create the endpoint from the kwargs
endpoint = f'/v4/sports/{sport}/events/{event_id}/odds/'
event_odds_response = self._get(
TheOddsAPI.HOST, endpoint, params)
return event_odds_response
@classmethod
def get_featured_betting_markets(cls):
"""Get the most common markets that are featured by bookmakers.
Terminology for betting markets can vary by country, sport and even
amongst bookmakers.
Returns
-------
pd.DataFrame
Dataframe of featured betting markets listed at
https://the-odds-api.com/sports-odds-data/betting-markets.html
"""
featured_betting_markets_dict = {
'market_key': ['h2h', 'spreads', 'totals', 'outrights', 'h2h_lay', 'outrights_lay'],
'market_names': ['Head to head, Moneyline', 'Points spread, Handicap',
'Total points/goals, Over/Under', 'Outrights, Futures',
'Head to head, Moneyline', 'Outrights, Futures'],
'description': [
'Bet on the winning team or player of a game (includes the draw for soccer)',
'The spreads market as featured by a bookmaker. Bet on the winning team after a points handicap has been applied to each team',
'The totals market as featured by a bookmaker. Bet on the total score of the game being above or below a threshold',
'Bet on a final outcome of a tournament or competition',
'Bet against a h2h outcome. This market is only applicable to betting exchanges',
'Bet against an outrights outcome. This market is only applicable to betting exchanges'
]
}
return pd.DataFrame(featured_betting_markets_dict)
@classmethod
def get_additional_markets(cls):
"""Get information on additional markets limited to US sports and selected
bookmakers. Additional markets update at 5 minute intervals.
Additional markets need to be accessed one event at a time using the
/event/{eventId}/odds endpoint.
Returns
-------
pd.DataFrame
Dataframe of additional betting markets listed at
https://the-odds-api.com/sports-odds-data/betting-markets.html#additional-markets
"""
additional_markets_dict = {
'market_key': ['alternate_spreads', 'alternate_totals', 'btts', 'draw_no_bet', 'h2h_3_way'],
'market_name': ['Alternate Spreads (handicap)', 'Alternate Totals (Over/Under)',
'Both Teams to Score', 'Draw No Bet', 'Head to head / Moneyline 3 way'],
'description': [
'All available point spread outcomes for each team',
'All available over/under outcomes',
'Odds that both teams will score during the game. Outcomes are "Yes" or "No". Available for soccer.',
'Odds for the match winner, excluding the draw outcome. A draw will result in a returned bet. Available for soccer',
'Match winner including draw'
]
}
return pd.DataFrame(additional_markets_dict)
@classmethod
def get_player_props(cls, sport: str):
"""Get information on player props limited to US sports and selected US
bookmakers, starting with FanDuel, DraftKings, Caesars, Bovada and more.
Player props update at 5 minute intervals. Player props need to be accessed
one event at a time using the /event/{eventId}/odds endpoint.
Parameters
----------
sport : str
Sport key for which to return games and odds. Obtained from the
/sports endpoint
Returns
-------
pd.DataFrame
Dataframe of player props listed at
https://the-odds-api.com/sports-odds-data/betting-markets.html#player-props-api-markets
"""
if sport == 'NFL':
player_props_dict = {
'market_key': [
'player_pass_tds',
'player_pass_yds',
'player_pass_completions',
'player_pass_attempts',
'player_pass_interceptions',
'player_pass_longest_completion',
'player_rush_yds',
'player_rush_attempts',
'player_rush_longest',
'player_receptions',
'player_reception_yds',
'player_reception_longest'
],
'market_name': [
'Pass Touchdowns (Over/Under)',
'Pass Yards (Over/Under)',
'Pass Completions (Over/Under)',
'Pass Attempts (Over/Under)',
'Pass Intercepts (Over/Under)',
'Pass Longest Completion (Over/Under)',
'Rush Yards (Over/Under)',
'Rush Attempts (Over/Under)',
'Longest Rush (Over/Under)',
'Receptions (Over/Under)',
'Reception Yards (Over/Under)',
'Longest Reception (Over/Under)'
]
}
elif sport == 'NBA':
market_key_arr = [
'player_points'
'player_rebounds',
'player_assists',
'player_threes',
'player_double_double',
'player_blocks',
'player_steals',
'player_turnovers'
]
market_name_arr = [mk.split("_")[1].capitalize(
) + " (Over/Under)" for mk in market_key_arr]
player_props_dict = {
'market_key': market_key_arr,
'market_name': market_name_arr
}
elif sport == 'NHL':
market_key_arr = [
'player_points'
]
return pd.DataFrame(player_props_dict)
Classes
class TheOddsAPI (api_key: str)
-
This module provides functions to get historical snapshots of sports odds data back to 2020 as well as game scores and results for past and live games.
Expand source code
class TheOddsAPI(object): """ This module provides functions to get historical snapshots of sports odds data back to 2020 as well as game scores and results for past and live games. """ HOST = "https://api.the-odds-api.com" def _get(self, host, endpoint, params): """Helper function for GET requests to The Odds API server Parameters ---------- host : str The host used by all requests endpoint : str A valid endpoint to make a request to. See https://the-odds-api.com/liveapi/guides/v4/ for a comprehensive list. params : dict Valid parameters to pass as part of GET requests to various endpoints. See https://app.swaggerhub.com/apis-docs/the-odds-api/odds-api/4 for a comprehensive list. Returns ------- dict or None Returns response from server if successful; otherwise, returns None """ print(host+endpoint) params['apiKey'] = self.api_key print(params['apiKey']) response = requests.get(host + endpoint, params=params) if response.status_code != 200: print( f'Failed to get {endpoint}: status_code {response.status_code}, response body {response.text}') return None else: return response.json() def __init__(self, api_key: str): self.api_key = api_key def get_sports(self, params): endpoint = f"/v4/sports/" sports_response = self._get(TheOddsAPI.HOST, endpoint, params) print("sports response type: ", type(sports_response)) return sports_response def _get_usage_quota_helper(self): """Helper function for getting requests used and requests remaining Returns ------- Response response object from GET request to the /v4/sports endpoint which does not affect the usage quota """ # Make a request that does not affect the usage quota params = dict() endpoint = f"/v4/sports/" response = self.get_sports({'apiKey': self.api_key}) params['apiKey'] = self.api_key # Do NOT return the json of the response because we will need the headers response = requests.get(TheOddsAPI.HOST + endpoint, params=params) return response def get_requests_remaining(self): """Get the number of requests remaining for current month Returns ------- int Number of requests remaining for current month """ usage_response = self._get_usage_quota_helper() return int(usage_response.headers['x-requests-remaining']) def get_requests_used(self): """Get the number of requests used in current month Returns ------- int Number of requests used in current month """ usage_response = self._get_usage_quota_helper() return int(usage_response.headers['x-requests-used']) def get_odds(self, **kwargs): """Returns a list of upcoming and live games with recent odds for a given sport, region and market Parameters ---------- sport : str Sport key for which to return games and odds. Obtained from the /sports endpoint regions : str Which bookmakers to appear in the response. markets : str The odds market to return. eventId : str Comma-separated game id(s) of upcoming or live game(s). Filters the response to only return games for the specified game ids, provided those games have not expired. bookmakers : list[int] The bookmaker(s) to be returned. Every group of 10 bookmakers counts as 1 request. """ # Create the query parameters from the kwargs params = kwargs sport = params['sport'] del params['sport'] endpoint = f'/v4/sports/{sport}/odds' odds_response = self._get(TheOddsAPI.HOST, endpoint, params) return odds_response def get_scores(self, **kwargs): """Returns a list of upcoming, live and recently completed games for a given sport. Live and recently completed games contain scores. Games from up to 3 days ago can be returned using the daysFrom parameter. Live scores update approximately every 30 seconds. Parameters ---------- sport : str Sport key for which to return games and odds. See list of covered sports at https://the-odds-api.com/sports-odds-data/sports-apis.html params : dict See https://the-odds-api.com/liveapi/guides/v4/#parameters-3 """ # Create the query parameters from the kwargs params = kwargs print(params) sport = params['sport'] del params['sport'] endpoint = f'/v4/sports/{sport}/scores/' scores_response = self._get(TheOddsAPI.HOST, endpoint, params) return scores_response def get_historical_odds(self, **kwargs): """Returns a snapshot of games with bookmaker odds for a given sport, region and market, at a given historical date. Historical odds data is available from June 6th 2020, with snapshots taken at 10 minute intervals. From September 2022, historical odds snapshots are available at 5 minute intervals. The historical odds endpoint is only available on paid usage plans at this time. Parameters ---------- sport : str Sport key for which to return games and odds. Obtained from the /sports endpoint regions : str Which bookmakers to appear in the response. markets : str The odds market to return. date : str The timestamp of the data snapshot to be returned, specified in ISO8601 format. Closest snapshot equal to or earlier than date provided will be returned. eventId : list[str] Comma-separated game id(s) of upcoming or live game(s). Filters the response to only return games for the specified game ids, provided those games have not expired. bookmakers : list[int] The bookmaker(s) to be returned. Every group of 10 bookmakers counts as 1 request. """ # Create the query parameters from the kwargs params = kwargs sport = params['sport'] del params['sport'] # Create the endpoint from the kwargs endpoint = f'/v4/sports/{sport}/odds-history/' odds_history_response = self._get(TheOddsAPI.HOST, endpoint, params) return odds_history_response def get_event_odds(self, **kwargs): """Returns odds for a single game. Accepts any available betting markets using the markets parameter. To get available markets info, use get_featured_betting_markets, get_additonal_markets, or get_player_props endpoint. Parameters ---------- sport : str Sport key for which to return games and odds. Obtained from the /sports endpoint regions : str Which bookmakers to appear in the response. markets : str The odds market to return. eventId : str Comma-separated game id(s) of upcoming or live game(s). Filters the response to only return games for the specified game ids, provided those games have not expired. bookmakers : list[int] The bookmaker(s) to be returned. Every group of 10 bookmakers counts as 1 request. """ # Create the query parameters from the kwargs params = kwargs sport = params['sport'] event_id = params['eventId'] del params['sport'] del params['eventId'] # Create the endpoint from the kwargs endpoint = f'/v4/sports/{sport}/events/{event_id}/odds/' event_odds_response = self._get( TheOddsAPI.HOST, endpoint, params) return event_odds_response @classmethod def get_featured_betting_markets(cls): """Get the most common markets that are featured by bookmakers. Terminology for betting markets can vary by country, sport and even amongst bookmakers. Returns ------- pd.DataFrame Dataframe of featured betting markets listed at https://the-odds-api.com/sports-odds-data/betting-markets.html """ featured_betting_markets_dict = { 'market_key': ['h2h', 'spreads', 'totals', 'outrights', 'h2h_lay', 'outrights_lay'], 'market_names': ['Head to head, Moneyline', 'Points spread, Handicap', 'Total points/goals, Over/Under', 'Outrights, Futures', 'Head to head, Moneyline', 'Outrights, Futures'], 'description': [ 'Bet on the winning team or player of a game (includes the draw for soccer)', 'The spreads market as featured by a bookmaker. Bet on the winning team after a points handicap has been applied to each team', 'The totals market as featured by a bookmaker. Bet on the total score of the game being above or below a threshold', 'Bet on a final outcome of a tournament or competition', 'Bet against a h2h outcome. This market is only applicable to betting exchanges', 'Bet against an outrights outcome. This market is only applicable to betting exchanges' ] } return pd.DataFrame(featured_betting_markets_dict) @classmethod def get_additional_markets(cls): """Get information on additional markets limited to US sports and selected bookmakers. Additional markets update at 5 minute intervals. Additional markets need to be accessed one event at a time using the /event/{eventId}/odds endpoint. Returns ------- pd.DataFrame Dataframe of additional betting markets listed at https://the-odds-api.com/sports-odds-data/betting-markets.html#additional-markets """ additional_markets_dict = { 'market_key': ['alternate_spreads', 'alternate_totals', 'btts', 'draw_no_bet', 'h2h_3_way'], 'market_name': ['Alternate Spreads (handicap)', 'Alternate Totals (Over/Under)', 'Both Teams to Score', 'Draw No Bet', 'Head to head / Moneyline 3 way'], 'description': [ 'All available point spread outcomes for each team', 'All available over/under outcomes', 'Odds that both teams will score during the game. Outcomes are "Yes" or "No". Available for soccer.', 'Odds for the match winner, excluding the draw outcome. A draw will result in a returned bet. Available for soccer', 'Match winner including draw' ] } return pd.DataFrame(additional_markets_dict) @classmethod def get_player_props(cls, sport: str): """Get information on player props limited to US sports and selected US bookmakers, starting with FanDuel, DraftKings, Caesars, Bovada and more. Player props update at 5 minute intervals. Player props need to be accessed one event at a time using the /event/{eventId}/odds endpoint. Parameters ---------- sport : str Sport key for which to return games and odds. Obtained from the /sports endpoint Returns ------- pd.DataFrame Dataframe of player props listed at https://the-odds-api.com/sports-odds-data/betting-markets.html#player-props-api-markets """ if sport == 'NFL': player_props_dict = { 'market_key': [ 'player_pass_tds', 'player_pass_yds', 'player_pass_completions', 'player_pass_attempts', 'player_pass_interceptions', 'player_pass_longest_completion', 'player_rush_yds', 'player_rush_attempts', 'player_rush_longest', 'player_receptions', 'player_reception_yds', 'player_reception_longest' ], 'market_name': [ 'Pass Touchdowns (Over/Under)', 'Pass Yards (Over/Under)', 'Pass Completions (Over/Under)', 'Pass Attempts (Over/Under)', 'Pass Intercepts (Over/Under)', 'Pass Longest Completion (Over/Under)', 'Rush Yards (Over/Under)', 'Rush Attempts (Over/Under)', 'Longest Rush (Over/Under)', 'Receptions (Over/Under)', 'Reception Yards (Over/Under)', 'Longest Reception (Over/Under)' ] } elif sport == 'NBA': market_key_arr = [ 'player_points' 'player_rebounds', 'player_assists', 'player_threes', 'player_double_double', 'player_blocks', 'player_steals', 'player_turnovers' ] market_name_arr = [mk.split("_")[1].capitalize( ) + " (Over/Under)" for mk in market_key_arr] player_props_dict = { 'market_key': market_key_arr, 'market_name': market_name_arr } elif sport == 'NHL': market_key_arr = [ 'player_points' ] return pd.DataFrame(player_props_dict)
Class variables
var HOST
Static methods
def get_additional_markets()
-
Get information on additional markets limited to US sports and selected bookmakers. Additional markets update at 5 minute intervals. Additional markets need to be accessed one event at a time using the /event/{eventId}/odds endpoint.
Returns
pd.DataFrame
- Dataframe of additional betting markets listed at https://the-odds-api.com/sports-odds-data/betting-markets.html#additional-markets
Expand source code
@classmethod def get_additional_markets(cls): """Get information on additional markets limited to US sports and selected bookmakers. Additional markets update at 5 minute intervals. Additional markets need to be accessed one event at a time using the /event/{eventId}/odds endpoint. Returns ------- pd.DataFrame Dataframe of additional betting markets listed at https://the-odds-api.com/sports-odds-data/betting-markets.html#additional-markets """ additional_markets_dict = { 'market_key': ['alternate_spreads', 'alternate_totals', 'btts', 'draw_no_bet', 'h2h_3_way'], 'market_name': ['Alternate Spreads (handicap)', 'Alternate Totals (Over/Under)', 'Both Teams to Score', 'Draw No Bet', 'Head to head / Moneyline 3 way'], 'description': [ 'All available point spread outcomes for each team', 'All available over/under outcomes', 'Odds that both teams will score during the game. Outcomes are "Yes" or "No". Available for soccer.', 'Odds for the match winner, excluding the draw outcome. A draw will result in a returned bet. Available for soccer', 'Match winner including draw' ] } return pd.DataFrame(additional_markets_dict)
def get_featured_betting_markets()
-
Get the most common markets that are featured by bookmakers. Terminology for betting markets can vary by country, sport and even amongst bookmakers.
Returns
pd.DataFrame
- Dataframe of featured betting markets listed at https://the-odds-api.com/sports-odds-data/betting-markets.html
Expand source code
@classmethod def get_featured_betting_markets(cls): """Get the most common markets that are featured by bookmakers. Terminology for betting markets can vary by country, sport and even amongst bookmakers. Returns ------- pd.DataFrame Dataframe of featured betting markets listed at https://the-odds-api.com/sports-odds-data/betting-markets.html """ featured_betting_markets_dict = { 'market_key': ['h2h', 'spreads', 'totals', 'outrights', 'h2h_lay', 'outrights_lay'], 'market_names': ['Head to head, Moneyline', 'Points spread, Handicap', 'Total points/goals, Over/Under', 'Outrights, Futures', 'Head to head, Moneyline', 'Outrights, Futures'], 'description': [ 'Bet on the winning team or player of a game (includes the draw for soccer)', 'The spreads market as featured by a bookmaker. Bet on the winning team after a points handicap has been applied to each team', 'The totals market as featured by a bookmaker. Bet on the total score of the game being above or below a threshold', 'Bet on a final outcome of a tournament or competition', 'Bet against a h2h outcome. This market is only applicable to betting exchanges', 'Bet against an outrights outcome. This market is only applicable to betting exchanges' ] } return pd.DataFrame(featured_betting_markets_dict)
def get_player_props(sport: str)
-
Get information on player props limited to US sports and selected US bookmakers, starting with FanDuel, DraftKings, Caesars, Bovada and more. Player props update at 5 minute intervals. Player props need to be accessed one event at a time using the /event/{eventId}/odds endpoint.
Parameters
sport
:str
- Sport key for which to return games and odds. Obtained from the /sports endpoint
Returns
pd.DataFrame
- Dataframe of player props listed at https://the-odds-api.com/sports-odds-data/betting-markets.html#player-props-api-markets
Expand source code
@classmethod def get_player_props(cls, sport: str): """Get information on player props limited to US sports and selected US bookmakers, starting with FanDuel, DraftKings, Caesars, Bovada and more. Player props update at 5 minute intervals. Player props need to be accessed one event at a time using the /event/{eventId}/odds endpoint. Parameters ---------- sport : str Sport key for which to return games and odds. Obtained from the /sports endpoint Returns ------- pd.DataFrame Dataframe of player props listed at https://the-odds-api.com/sports-odds-data/betting-markets.html#player-props-api-markets """ if sport == 'NFL': player_props_dict = { 'market_key': [ 'player_pass_tds', 'player_pass_yds', 'player_pass_completions', 'player_pass_attempts', 'player_pass_interceptions', 'player_pass_longest_completion', 'player_rush_yds', 'player_rush_attempts', 'player_rush_longest', 'player_receptions', 'player_reception_yds', 'player_reception_longest' ], 'market_name': [ 'Pass Touchdowns (Over/Under)', 'Pass Yards (Over/Under)', 'Pass Completions (Over/Under)', 'Pass Attempts (Over/Under)', 'Pass Intercepts (Over/Under)', 'Pass Longest Completion (Over/Under)', 'Rush Yards (Over/Under)', 'Rush Attempts (Over/Under)', 'Longest Rush (Over/Under)', 'Receptions (Over/Under)', 'Reception Yards (Over/Under)', 'Longest Reception (Over/Under)' ] } elif sport == 'NBA': market_key_arr = [ 'player_points' 'player_rebounds', 'player_assists', 'player_threes', 'player_double_double', 'player_blocks', 'player_steals', 'player_turnovers' ] market_name_arr = [mk.split("_")[1].capitalize( ) + " (Over/Under)" for mk in market_key_arr] player_props_dict = { 'market_key': market_key_arr, 'market_name': market_name_arr } elif sport == 'NHL': market_key_arr = [ 'player_points' ] return pd.DataFrame(player_props_dict)
Methods
def get_event_odds(self, **kwargs)
-
Returns odds for a single game. Accepts any available betting markets using the markets parameter. To get available markets info, use get_featured_betting_markets, get_additonal_markets, or get_player_props endpoint.
Parameters
sport
:str
- Sport key for which to return games and odds. Obtained from the /sports endpoint
regions
:str
- Which bookmakers to appear in the response.
markets
:str
- The odds market to return.
eventId
:str
- Comma-separated game id(s) of upcoming or live game(s). Filters the response to only return games for the specified game ids, provided those games have not expired.
bookmakers
:list[int]
- The bookmaker(s) to be returned. Every group of 10 bookmakers counts as 1 request.
Expand source code
def get_event_odds(self, **kwargs): """Returns odds for a single game. Accepts any available betting markets using the markets parameter. To get available markets info, use get_featured_betting_markets, get_additonal_markets, or get_player_props endpoint. Parameters ---------- sport : str Sport key for which to return games and odds. Obtained from the /sports endpoint regions : str Which bookmakers to appear in the response. markets : str The odds market to return. eventId : str Comma-separated game id(s) of upcoming or live game(s). Filters the response to only return games for the specified game ids, provided those games have not expired. bookmakers : list[int] The bookmaker(s) to be returned. Every group of 10 bookmakers counts as 1 request. """ # Create the query parameters from the kwargs params = kwargs sport = params['sport'] event_id = params['eventId'] del params['sport'] del params['eventId'] # Create the endpoint from the kwargs endpoint = f'/v4/sports/{sport}/events/{event_id}/odds/' event_odds_response = self._get( TheOddsAPI.HOST, endpoint, params) return event_odds_response
def get_historical_odds(self, **kwargs)
-
Returns a snapshot of games with bookmaker odds for a given sport, region and market, at a given historical date. Historical odds data is available from June 6th 2020, with snapshots taken at 10 minute intervals. From September 2022, historical odds snapshots are available at 5 minute intervals. The historical odds endpoint is only available on paid usage plans at this time.
Parameters
sport
:str
- Sport key for which to return games and odds. Obtained from the /sports endpoint
regions
:str
- Which bookmakers to appear in the response.
markets
:str
- The odds market to return.
date
:str
- The timestamp of the data snapshot to be returned, specified in ISO8601 format. Closest snapshot equal to or earlier than date provided will be returned.
eventId
:list[str]
- Comma-separated game id(s) of upcoming or live game(s). Filters the response to only return games for the specified game ids, provided those games have not expired.
bookmakers
:list[int]
- The bookmaker(s) to be returned. Every group of 10 bookmakers counts as 1 request.
Expand source code
def get_historical_odds(self, **kwargs): """Returns a snapshot of games with bookmaker odds for a given sport, region and market, at a given historical date. Historical odds data is available from June 6th 2020, with snapshots taken at 10 minute intervals. From September 2022, historical odds snapshots are available at 5 minute intervals. The historical odds endpoint is only available on paid usage plans at this time. Parameters ---------- sport : str Sport key for which to return games and odds. Obtained from the /sports endpoint regions : str Which bookmakers to appear in the response. markets : str The odds market to return. date : str The timestamp of the data snapshot to be returned, specified in ISO8601 format. Closest snapshot equal to or earlier than date provided will be returned. eventId : list[str] Comma-separated game id(s) of upcoming or live game(s). Filters the response to only return games for the specified game ids, provided those games have not expired. bookmakers : list[int] The bookmaker(s) to be returned. Every group of 10 bookmakers counts as 1 request. """ # Create the query parameters from the kwargs params = kwargs sport = params['sport'] del params['sport'] # Create the endpoint from the kwargs endpoint = f'/v4/sports/{sport}/odds-history/' odds_history_response = self._get(TheOddsAPI.HOST, endpoint, params) return odds_history_response
def get_odds(self, **kwargs)
-
Returns a list of upcoming and live games with recent odds for a given sport, region and market
Parameters
sport
:str
- Sport key for which to return games and odds. Obtained from the /sports endpoint
regions
:str
- Which bookmakers to appear in the response.
markets
:str
- The odds market to return.
eventId
:str
- Comma-separated game id(s) of upcoming or live game(s). Filters the response to only return games for the specified game ids, provided those games have not expired.
bookmakers
:list[int]
- The bookmaker(s) to be returned. Every group of 10 bookmakers counts as 1 request.
Expand source code
def get_odds(self, **kwargs): """Returns a list of upcoming and live games with recent odds for a given sport, region and market Parameters ---------- sport : str Sport key for which to return games and odds. Obtained from the /sports endpoint regions : str Which bookmakers to appear in the response. markets : str The odds market to return. eventId : str Comma-separated game id(s) of upcoming or live game(s). Filters the response to only return games for the specified game ids, provided those games have not expired. bookmakers : list[int] The bookmaker(s) to be returned. Every group of 10 bookmakers counts as 1 request. """ # Create the query parameters from the kwargs params = kwargs sport = params['sport'] del params['sport'] endpoint = f'/v4/sports/{sport}/odds' odds_response = self._get(TheOddsAPI.HOST, endpoint, params) return odds_response
def get_requests_remaining(self)
-
Get the number of requests remaining for current month
Returns
int
- Number of requests remaining for current month
Expand source code
def get_requests_remaining(self): """Get the number of requests remaining for current month Returns ------- int Number of requests remaining for current month """ usage_response = self._get_usage_quota_helper() return int(usage_response.headers['x-requests-remaining'])
def get_requests_used(self)
-
Get the number of requests used in current month
Returns
int
- Number of requests used in current month
Expand source code
def get_requests_used(self): """Get the number of requests used in current month Returns ------- int Number of requests used in current month """ usage_response = self._get_usage_quota_helper() return int(usage_response.headers['x-requests-used'])
def get_scores(self, **kwargs)
-
Returns a list of upcoming, live and recently completed games for a given sport. Live and recently completed games contain scores. Games from up to 3 days ago can be returned using the daysFrom parameter. Live scores update approximately every 30 seconds.
Parameters
sport
:str
- Sport key for which to return games and odds. See list of covered sports at https://the-odds-api.com/sports-odds-data/sports-apis.html
params
:dict
- See https://the-odds-api.com/liveapi/guides/v4/#parameters-3
Expand source code
def get_scores(self, **kwargs): """Returns a list of upcoming, live and recently completed games for a given sport. Live and recently completed games contain scores. Games from up to 3 days ago can be returned using the daysFrom parameter. Live scores update approximately every 30 seconds. Parameters ---------- sport : str Sport key for which to return games and odds. See list of covered sports at https://the-odds-api.com/sports-odds-data/sports-apis.html params : dict See https://the-odds-api.com/liveapi/guides/v4/#parameters-3 """ # Create the query parameters from the kwargs params = kwargs print(params) sport = params['sport'] del params['sport'] endpoint = f'/v4/sports/{sport}/scores/' scores_response = self._get(TheOddsAPI.HOST, endpoint, params) return scores_response
def get_sports(self, params)
-
Expand source code
def get_sports(self, params): endpoint = f"/v4/sports/" sports_response = self._get(TheOddsAPI.HOST, endpoint, params) print("sports response type: ", type(sports_response)) return sports_response