import requests from datetime import datetime class SleeperAPI: BASE_URL = 'https://api.sleeper.app/v1' def __init__(self): self.session = requests.Session() self.players_cache = None # Cache player data self.players_updated = None # Track last update time def get_user(self, username): """Get user info by username""" try: response = self.session.get(f"{self.BASE_URL}/user/{username}") response.raise_for_status() return response.json() except requests.exceptions.RequestException: return None def get_user_by_id(self, user_id): """Get user info by user_id""" try: response = self.session.get(f"{self.BASE_URL}/user/{user_id}") response.raise_for_status() return response.json() except requests.exceptions.RequestException: return None def get_nfl_state(self): """Get current NFL state (week, season, etc)""" response = self.session.get(f"{self.BASE_URL}/state/nfl") response.raise_for_status() return response.json() def get_user_leagues(self, user_id, season): """Get all leagues for a user in a season""" response = self.session.get(f"{self.BASE_URL}/user/{user_id}/leagues/nfl/{season}") response.raise_for_status() return response.json() def get_matchups(self, league_id, week): """Get matchups for a league and week""" response = self.session.get(f"{self.BASE_URL}/league/{league_id}/matchups/{week}") response.raise_for_status() return response.json() def get_rosters(self, league_id): """Get rosters for a league""" response = self.session.get(f"{self.BASE_URL}/league/{league_id}/rosters") response.raise_for_status() return response.json() def get_players(self, force_refresh=False): """Get all NFL players (cached for 24 hours)""" now = datetime.now() # Check if cache is stale or force refresh requested if (not self.players_cache or not self.players_updated or (now - self.players_updated).total_seconds() > 86400 or force_refresh): response = self.session.get(f"{self.BASE_URL}/players/nfl") response.raise_for_status() self.players_cache = response.json() self.players_updated = now return self.players_cache def get_player_info(self, player_id): """Get specific player info""" players = self.get_players() player_info = players.get(str(player_id)) return player_info