DFS_Contest_Analyzer / global_func /grab_contest_data.py
James McCool
Add debug prints to grab_contest_data for improved traceability
8db1f1d
raw
history blame
4.13 kB
import pandas as pd
import requests
def grab_contest_data(sport, contest_name, contest_id_map, contest_date):
contest_id = contest_id_map[contest_name]
raw_url = f'https://dh5nxc6yx3kwy.cloudfront.net/contests/{sport.lower()}/{contest_date}/{contest_id}/'
data_url = raw_url + 'data/'
lineups_url = raw_url + 'lineups/'
def format_lineup_string(lineup_hash, positions):
"""Replaces colons in a lineup hash with sequential positions."""
# Remove the leading colon and split by the remaining colons
player_ids = lineup_hash.lstrip(':').split(':')
# Print example of what we're working with
print(f"Example lineup_hash: {lineup_hash}")
print(f"Split player_ids: {player_ids}")
# Check if the number of IDs matches the number of positions
if len(player_ids) != len(positions):
print(f"Warning: Mismatch for hash {lineup_hash}. IDs: {len(player_ids)}, Positions: {len(positions)}")
return lineup_hash
# Combine positions and player IDs
combined_parts = [pos + pid for pos, pid in zip(positions, player_ids)]
result = "".join(combined_parts)
# Print example of the result
print(f"Formatted result: {result}")
return result
lineups_json = requests.get(lineups_url).json()
data_json = requests.get(data_url).json()
lineup_data = []
player_data = []
position_inserts = ['1B ', ' 2B ', ' 3B ', ' C ', ' OF ', ' OF ', ' OF ', ' P ', ' P ', ' SS ']
for players, player_info in data_json['players'].items():
player_data.append({
'fullName': player_info['fullName'],
'playerId': player_info['playerId'],
'salary': player_info['salary'],
'currentTeam': player_info['currentTeam'],
'rosterPosition': player_info['rosterPosition'],
'ownership': player_info['ownership'],
'actualPoints': player_info['actualPoints']
})
players_df = pd.DataFrame(player_data)
players_df = players_df.sort_values(by='ownership', ascending=False).reset_index(drop=True)
players_df = players_df.rename(columns={'fullName': 'Player', 'rosterPosition': 'Roster Position', 'ownership': '%Drafted', 'actualPoints': 'FPTS', 'salary': 'Salary', 'currentTeam': 'Team'})
pid_map = dict(zip(players_df['playerId'].astype(str).apply(lambda x: f" {x} "), players_df['Player']))
print("Example pid_map entries:")
for i, (pid, name) in enumerate(pid_map.items()):
if i < 3: # Print first 3 entries
print(f"ID: '{pid}' -> Name: '{name}'")
for lineup_hash, lineup_info in lineups_json['lineups'].items():
lineup_data.append({
'lineupHash': lineup_hash,
'points': lineup_info['points'],
'entryNameList': lineup_info['entryNameList'][0]
})
lineups_df = pd.DataFrame(lineup_data)
lineups_df = lineups_df.sort_values(by='points', ascending=False)
lineups_df = lineups_df.reset_index()
lineups_df['index'] = lineups_df.index + 1
lineups_df['TimeRemaining'] = str(0)
lineups_df['EntryId'] = lineups_df['index'].astype(str) + lineups_df['entryNameList'].astype(str)
lineups_df['lineupHash'] = ':' + lineups_df['lineupHash']
lineups_df = lineups_df.rename(columns={'index': 'Rank', 'points': 'Points', 'entryNameList': 'EntryName', 'lineupHash': 'Lineup'})
lineups_df['EntryName'] = lineups_df['EntryName'] + ' (1/1)'
lineups_df['Lineup'] = lineups_df['Lineup'].apply(lambda x: format_lineup_string(x, position_inserts))
# Print example before and after replacement
print("\nExample before replacement:")
print(lineups_df['Lineup'].iloc[0])
lineups_df['Lineup'] = lineups_df['Lineup'].replace(pid_map, regex=False)
print("\nExample after replacement:")
print(lineups_df['Lineup'].iloc[0])
lineups_df = lineups_df[['Rank', 'EntryId', 'EntryName', 'TimeRemaining', 'Points', 'Lineup']]
total_data = lineups_df.merge(players_df, how='left', left_index=True, right_index=True)
return total_data