from argparse import ArgumentParser from config import Config as cfg from datetime import datetime from espn_api.football import League from time import strftime import pandas as pd def check_int(s): if s is None: return s if s[0] in ('-', '+'): return s[1:].isdigit() return s.isdigit() def extract_positional_data(lineup: list, position: str) -> int: response = 0 for player in lineup: if player.lineupSlot == position: response = response + player.points return response def extract_matchup_box_scores(league: League, week_override: int) -> dict: matchups = league.box_scores(week=week_override) result = [] for matchup in matchups: result.append({ 'Week': week_override, 'Away Team': matchup.away_team.team_name, 'Away Team Score': matchup.away_score, 'Away Team Kicker Score': extract_positional_data(matchup.away_lineup, 'K'), 'Away Team Bench Score': extract_positional_data(matchup.away_lineup, 'BE'), 'Home Team': matchup.home_team.team_name, 'Home Team Score': matchup.home_score, 'Home Team Kicker Score': extract_positional_data(matchup.home_lineup, 'K'), 'Home Team Bench Score': extract_positional_data(matchup.home_lineup, 'BE') }) return result if __name__ == "__main__": parser = ArgumentParser(description='Weekly Report Generator for Fantasy Football') parser.add_argument('-wo','--weekly-override', help='Numeric value that overrides which fantasy week to generate data from', required=False) args = vars(parser.parse_args()) timestamp = strftime("%Y%m%d_%H%M%S") weekly_value = args['weekly_override'] league = League(league_id=cfg.LEAGUE_ID, year=datetime.now().year, espn_s2=cfg.ESPN_S2, swid=cfg.SWID, fetch_league=cfg.FETCH_LEAGUE) if check_int(weekly_value): print(f"Override applied, using week {weekly_value}") else: weekly_value = league.current_week print(f'Using current week: {weekly_value}') matchup = extract_matchup_box_scores(league=league, week_override=int(weekly_value)) df = pd.DataFrame.from_dict(matchup) df.to_csv(f'espn_fantasy_football_week_{weekly_value}_{timestamp}.csv', index=False, float_format='%.2f')