2026_MLB_Model / data /odds.py
Syntrex's picture
Rename data/odds.txt to data/odds.py
cb5cd5c verified
raw
history blame
1.95 kB
from __future__ import annotations
from datetime import datetime
from typing import Any
import pandas as pd
import requests
from config.settings import (
ODDS_API_KEY,
ODDS_BASE_URL,
ODDS_FEATURED_MARKETS,
ODDS_FORMAT,
ODDS_REGIONS,
ODDS_SPORT_KEY,
)
def fetch_featured_odds() -> pd.DataFrame:
if not ODDS_API_KEY:
return pd.DataFrame()
url = f"{ODDS_BASE_URL}/sports/{ODDS_SPORT_KEY}/odds"
params = {
"apiKey": ODDS_API_KEY,
"regions": ODDS_REGIONS,
"markets": ODDS_FEATURED_MARKETS,
"oddsFormat": ODDS_FORMAT,
}
response = requests.get(url, params=params, timeout=30)
response.raise_for_status()
payload = response.json()
rows: list[dict[str, Any]] = []
for event in payload:
event_id = event.get("id", "")
commence_time = event.get("commence_time")
home_team = event.get("home_team", "")
away_team = event.get("away_team", "")
for bookmaker in event.get("bookmakers", []):
sportsbook = bookmaker.get("title", "")
for market in bookmaker.get("markets", []):
market_key = market.get("key", "")
for outcome in market.get("outcomes", []):
rows.append(
{
"fetched_at": datetime.utcnow(),
"event_id": event_id,
"commence_time": commence_time,
"home_team": home_team,
"away_team": away_team,
"sportsbook": sportsbook,
"market_key": market_key,
"outcome_name": outcome.get("name", ""),
"price": outcome.get("price"),
"point": outcome.get("point"),
}
)
return pd.DataFrame(rows)