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)