Spaces:
Runtime error
Runtime error
import requests | |
import logging | |
# Configure logging | |
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s') | |
class FPLClient: | |
def __init__(self): | |
self.base_url = "https://fantasy.premierleague.com/api" | |
self.data = self.get_static_data() | |
def player_position(self, position_id): | |
logging.info(f"Mapping position ID: {position_id}") | |
positions = { | |
1: 'Goalkeeper', | |
2: 'Defender', | |
3: 'Midfielder', | |
4: 'Forward' | |
} | |
return positions.get(position_id, 'Unknown') | |
def get_static_data(self): | |
url = f"{self.base_url}/bootstrap-static/" | |
logging.info(f"Fetching static data from {url}") | |
response = requests.get(url) | |
if response.status_code == 200: | |
logging.debug("Static data fetched successfully.") | |
return response.json() | |
else: | |
logging.error(f"Failed to fetch static data. Status code: {response.status_code}") | |
return None | |
def get_teams(self): | |
teams = self.data.get('teams', []) | |
logging.info(f"Fetching team names. Total teams: {len(teams)}") | |
return [team['name'] for team in teams] | |
def get_player_info(self, player_name): | |
logging.info(f"Searching for player: {player_name}") | |
players = self.data['elements'] | |
player = next((p for p in players if p['web_name'].lower() == player_name.lower()), None) | |
if player: | |
logging.debug(f"Player found: {player['web_name']}") | |
else: | |
logging.warning(f"Player not found: {player_name}") | |
return player | |
def get_team_info(self, team_id): | |
logging.info(f"Fetching team info for team ID: {team_id}") | |
teams = self.data['teams'] | |
team = next((t for t in teams if t['id'] == team_id), None) | |
if team: | |
logging.debug(f"Team found: {team['name']}") | |
else: | |
logging.warning(f"Team not found for ID: {team_id}") | |
return team | |
def get_player_stats(self, player_name): | |
logging.info(f"Fetching stats for player: {player_name}") | |
player = self.get_player_info(player_name) | |
if player: | |
logging.info(f"Player position ID: {player['element_type']}") | |
player_pos = self.player_position(player['element_type']) | |
team_name = self.get_team_info(player['team'])['name'] | |
news = player['news'] | |
if not news: | |
news = "No news available" | |
stats = { | |
"Name": player['web_name'], | |
"Team": team_name, | |
"Points per game avarage": player['points_per_game'], | |
"Price": player['now_cost'] / 10, | |
"Position": player_pos, | |
"News": news, | |
"Selected By": player['selected_by_percent'] + "%", | |
} | |
logging.debug(f"Stats for player {player_name}: {stats}") | |
return stats | |
logging.warning(f"Stats not found for player: {player_name}") | |
return "Player not found" | |
def get_team_players(self, team_name): | |
logging.info(f"Fetching players for team: {team_name}") | |
teams = self.data['teams'] | |
team = next((t for t in teams if t['name'].lower() == team_name.lower()), None) | |
if team: | |
players = [p['web_name'] for p in self.data['elements'] if p['team'] == team['id']] | |
logging.debug(f"Players found for team {team_name}: {players}") | |
return players | |
logging.warning(f"Team not found: {team_name}") | |
return "Team not found" | |
def list_injuries(self): | |
logging.info("Fetching injuries list") | |
players = self.data['elements'] | |
injuries = [(p['web_name'], p['news']) for p in players if p['news'] and 'injury' in p['news'].lower()] | |
logging.debug(f"Injured players: {injuries}") | |
return injuries | |
# get list of Dream team by FPL by filtering Elements that have in_dreamteam: true | |
def dream_team(self): | |
logging.info("Fetching Dream Team") | |
players = self.data['elements'] | |
dream_team = [p['web_name'] for p in players if p['in_dreamteam']== True] | |
logging.info(f"Dream Team: {dream_team}") | |
return dream_team |