From 06c78330de14cb2beba6134a580f52937affe345 Mon Sep 17 00:00:00 2001 From: kdelaney Date: Mon, 11 Sep 2017 17:02:23 -0400 Subject: [PATCH 1/2] Added methods to output Pandas DataFrames --- espnff/league.py | 59 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) diff --git a/espnff/league.py b/espnff/league.py index 3cbe808..60bf52d 100644 --- a/espnff/league.py +++ b/espnff/league.py @@ -1,5 +1,8 @@ import requests +from pandas.io.json import json_normalize +import pandas as pd + from .utils import (two_step_dominance, power_points, ) from .team import Team @@ -131,3 +134,59 @@ def scoreboard(self, week=None): matchup.away_team = team return result + + def team_df(self): + """ Returns a Pandas DataFrame with team data """ + variables = self.teams[0].__dict__.keys() + df = pd.DataFrame([[getattr(i, j) for j in variables] for i in self.teams], columns=variables) + return df + + def player_df(self): + """ Returns a Pandas DataFrame with raw player data """ + params = { + 'leagueId': self.league_id, + 'offset': None, + 'limit': '1', + 'availabilityFilter': '-1', + 'slotCategoryFilter': '-1', + 'useCurrentSeasonRealStats': 'true', + 'useCurrentSeasonProjectedStats': 'true', + 'useCurrentPeriodRealStats': 'true', + 'useCurrentPeriodProjectedStats': 'true', + 'usePreviousPeriodRealStats': 'true', + 'usePreviousSeasonRealStats': 'true', + 'processAverages': 'true', + 'includeRankings': 'true', + 'includeLatestNews': 'true', + 'includeProjectionText': 'true', + } + + cookies = None + if self.espn_s2 and self.swid: + cookies = { + 'espn_s2': self.espn_s2, + 'SWID': self.swid + } + + player_data = [] + + for i in range(1): + params['offset'] = i + + r = requests.get('%splayerInfo' % (self.ENDPOINT,), params=params, cookies=cookies) + self.status = r.status_code + data = r.json() + + if self.status == 401: + raise PrivateLeagueException(data['error'][0]['message']) + elif self.status == 404: + raise InvalidLeagueException(data['error'][0]['message']) + elif self.status != 200: + raise UnknownLeagueException('Unknown %s Error' % self.status) + + player_data.extend(data['playerInfo']['players']) + + df = json_normalize(player_data) + df = df.select(lambda x: 'rawStats' not in x and 'appliedStats' not in x, axis=1) # remove excess statistics + + return df From da4da900752a8aefcf0510df29aee88d1a0fcbb2 Mon Sep 17 00:00:00 2001 From: kdelaney Date: Mon, 11 Sep 2017 17:04:24 -0400 Subject: [PATCH 2/2] Fixed offset and limit --- espnff/league.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/espnff/league.py b/espnff/league.py index 60bf52d..8cbdbc7 100644 --- a/espnff/league.py +++ b/espnff/league.py @@ -146,7 +146,7 @@ def player_df(self): params = { 'leagueId': self.league_id, 'offset': None, - 'limit': '1', + 'limit': '40', 'availabilityFilter': '-1', 'slotCategoryFilter': '-1', 'useCurrentSeasonRealStats': 'true', @@ -170,7 +170,7 @@ def player_df(self): player_data = [] - for i in range(1): + for i in range(20): params['offset'] = i r = requests.get('%splayerInfo' % (self.ENDPOINT,), params=params, cookies=cookies)