def team_records(): """ Use MLB Stats API to extract daily MLB Team Records for use in Game Watchability Index calculation Returns: {Date: {Team_Name: (Wins, Losses), Team_Name: (Wins, Losses), ..., Team_Name: (Wins, Losses)}} """ # Retrieve today's league standings today = datetime.datetime.today().strftime('%Y-%m-%d') standings = statsapi.standings_data() # League Codes: # 200 - AL West # 201 - AL East # 202 - AL Center # 203 - NL West # 204 - NL East # 205 - NL Central # Use League Codes to extract team name, wins, and losses records = {} for league in range(200, 206): for team in range(len(standings[league]['teams'])): teams = standings[league]['teams'][team]['name'] wins = standings[league]['teams'][team]['w'] losses = standings[league]['teams'][team]['l'] records.update({teams: (wins, losses)}) # Create main dictionary using date as key and records dictionary as value records_dict = {today: records} return records_dict
def standings_data(): standings_data = statsapi.standings_data( leagueId="103,104", division="all", include_wildcard=True, season=None, standingsTypes=None, date=None,) return standings_data
def standings(request): standings_dict = statsapi.standings_data(leagueId="103,104", division="all", include_wildcard=True) al_west = standings_dict.get(200).get('teams') al_east = standings_dict.get(201).get('teams') al_central = standings_dict.get(202).get('teams') nl_central = standings_dict.get(205).get('teams') nl_east = standings_dict.get(203).get('teams') nl_west = standings_dict.get(204).get('teams') return render( request, 'standings.html', { 'al_west': al_west, 'al_east': al_east, 'al_central': al_central, 'nl_central': nl_central, 'nl_east': nl_east, 'nl_west': nl_west })
def on_enter_amarican(self, event): reply_token = event.reply_token data = statsapi.standings_data(leagueId=103) content = [ { "type": "text", "text": "戰績", "weight": "bold", "size": "lg", "margin": "lg", "align": "center" }, ] message = message_template.stats2_message for i in data: stats_head = { "type": "text", "text": data[i]['div_name'], } content.append(stats_head) stats_body = { "type": "box", "layout": "horizontal", "align": "start", "contents": [], "paddingAll": "0px", } print(i) key = [] for j in data[i]['teams'][0]: key.append(j) tmp = key[0] key[0] = key[1] key[1] = tmp tmp = key[8] key[8] = key[7] key[7] = key[6] key[6] = key[5] key[5] = tmp print(key) for j in key: flex = 1 align = "end" index = { "div_rank": "rank", "name": "team", "w": "W", "l": "L", "gb": "GB", "wc_rank": "WC_RANK", "wc_gb": "WC_GB", "elim_num": "(E)", "wc_elim_num": "(E)" } if j == "name": flex = 4 align = "center" if j == "wc_rank" or j == "wc_gb": flex = 2 if j == "team_id": continue tmp = { "type": "box", "layout": "vertical", "contents": [], "flex": flex } tmp_data = { "type": "text", "text": index[j], "align": align, "size": "sm", "flex": flex, } tmp["contents"].append(tmp_data) for k in data[i]['teams']: tmp_data = { "type": "text", "text": str(k[j]), "align": "end", "size": "sm", "flex": flex, } tmp["contents"].append(tmp_data) #print(type(k[j])) stats_body["contents"].append(tmp) content.append(stats_body) stats2 = { "type": "box", "layout": "horizontal", "contents": [{ "type": "box", "layout": "vertical", "contents": [ { "type": "text", "text": "", "wrap": True, }, { "type": "text", "text": "ab", }, ] }] } message["body"]["contents"] = content message_to_reply = FlexSendMessage("戰績表", message) line_bot_api = LineBotApi(settings.LINE_CHANNEL_ACCESS_TOKEN) line_bot_api.reply_message(reply_token, message_to_reply)
def update_reddit(self): if self.sport == "MLB": if self.settings.get("MLB", {}).get("TEAM", "") == "": self.log.critical( "No team selected! Set MLB > TEAM in Bot Config.") self.bot.STOP = True return all_teams = statsapi.get("teams", { "sportIds": 1, "hydrate": "league,division" }).get("teams", []) my_team = next( (x for x in all_teams if x["id"] == int(self.settings["MLB"]["TEAM"].split("|")[1]) ), None, ) if self.settings.get( "Old Reddit", {}).get("STANDINGS_ENABLED") or self.settings.get( "New Reddit", {}).get("STANDINGS_ENABLED"): standings = statsapi.standings_data() else: standings = None team_subs = self.mlb_team_subs current_week = None elif self.sport == "NBA": if self.settings.get("NBA", {}).get("TEAM", "") == "": self.log.critical( "No team selected! Set NBA > TEAM in Bot Config.") self.bot.STOP = True return nba = pynbaapi.nba.NBA( f"RedditSidebarUpdater/{__version__} (platform; redball/{redball.__version__})" ) season = (datetime.today().strftime("%Y") if int(datetime.today().strftime("%m")) >= 8 else str(int(datetime.today().strftime("%Y")) - 1)) all_teams = nba.all_teams(season) my_team = nba.team(int(self.settings["NBA"]["TEAM"].split("|")[1])) if self.settings.get( "Old Reddit", {}).get("STANDINGS_ENABLED") or self.settings.get( "New Reddit", {}).get("STANDINGS_ENABLED"): standings = nba.standings(season=season) else: standings = None team_subs = self.nba_team_subs current_week = None elif self.sport == "NFL": if self.settings.get("NFL", {}).get("TEAM", "") == "": self.log.critical( "No team selected! Set NFL > TEAM in Bot Config.") self.bot.STOP = True return nfl = mynflapi.APISession(self.get_nfl_token()) current_week = nfl.weekByDate(datetime.now().strftime("%Y-%m-%d")) all_teams = nfl.teams( current_week.get("season", datetime.now().strftime("%Y"))).get( "teams", []) my_team = next( (x for x in all_teams if x["abbreviation"] == self.settings["NFL"]["TEAM"].split("|")[1]), None, ) if self.settings.get( "Old Reddit", {}).get("STANDINGS_ENABLED") or self.settings.get( "New Reddit", {}).get("STANDINGS_ENABLED"): standings = (nfl.standings( season=current_week["season"], seasonType="REG", week=current_week["week"] if current_week["seasonType"] == "REG" else 17 if current_week["seasonType"] == "POST" else 1, ).get("weeks", [{}])[0].get("standings", [])) else: standings = None team_subs = self.nfl_team_subs elif self.sport == "NHL": if self.settings.get("NHL", {}).get("TEAM", "") == "": self.log.critical( "No team selected! Set NHL > TEAM in Bot Config.") self.bot.STOP = True return nhl = pynhlapi.API() all_teams = nhl.teams() my_team = next( (x for x in all_teams if x["id"] == int(self.settings["NHL"]["TEAM"].split("|")[1]) ), None, ) if self.settings.get( "Old Reddit", {}).get("STANDINGS_ENABLED") or self.settings.get( "New Reddit", {}).get("STANDINGS_ENABLED"): standings = nhl.standings() else: standings = None team_subs = self.nhl_team_subs current_week = None self.log.debug(f"{self.sport=}") self.log.debug(f"{my_team=}") self.log.debug(f"{all_teams=}") self.log.debug(f"{standings=}") self.log.debug(f"{team_subs=}") self.log.debug(f"{current_week=}") if self.settings.get("Old Reddit", {}).get("STANDINGS_ENABLED"): self.log.debug("Updating Old Reddit...") self.update_old_reddit_standings( my_team, standings, team_subs, all_teams, current_week, ) if self.settings.get("New Reddit", {}).get("STANDINGS_ENABLED"): self.log.debug("Updating New Reddit...") self.update_new_reddit_standings( my_team, standings, team_subs, all_teams, current_week, )
def get_games(spoiler, start_date, end_date): try: sched = statsapi.schedule(start_date, end_date) except ReadTimeout: print("ReadTimeout Error") sleep(20) pass except NewConnectionError: print("NewConnection Error") sleep(20) pass except MaxRetryError: print("MaxRetry Error") sleep(20) pass except ConnectionError: print("Connection Error") sleep(20) pass games_list = [] for game in sched: #print(game['game_id'], game['summary']) status = game['status'] if 'Progress' not in status and 'Final' not in status: continue game_id = game['game_id'] home_id = game['home_id'] away_id = game['away_id'] if spoiler: if home_id == 137 or away_id == 137: continue home_name = game['home_name'] away_name = game['away_name'] home_score = game['home_score'] away_score = game['away_score'] if 'Final' not in status: home_str = f"{home_name} ({home_score})" away_str = f"{away_name} ({away_score})" else: if home_score > away_score: home_str = f"{home_name} ({home_score}-{away_score}) W" away_str = f"{away_name} ({away_score}-{home_score}) L" else: home_str = f"{home_name} ({home_score}-{away_score}) L" away_str = f"{away_name} ({away_score}-{home_score}) W" home_team = statsapi.get('team', {'teamId': home_id}) away_team = statsapi.get('team', {'teamId': away_id}) home_league = home_team['teams'][0]['league']['id'] away_league = away_team['teams'][0]['league']['id'] home_div = home_team['teams'][0]['division']['id'] away_div = away_team['teams'][0]['division']['id'] try: home_standings = statsapi.standings_data( leagueId=home_league, division="all", include_wildcard=True, season=datetime.datetime.now().year, standingsTypes=None, date=None) sleep(1) away_standings = statsapi.standings_data( leagueId=away_league, division="all", include_wildcard=True, season=datetime.datetime.now().year, standingsTypes=None, date=None) except ReadTimeout: print("ReadTimeout Error") sleep(20) pass except NewConnectionError: print("MewConnection Error") sleep(20) pass except MaxRetryError: print("MaxRetry Error") sleep(20) pass except ConnectionError: print(ConnectionError) sleep(20) pass #pprint.pprint(home_standings, width=1) #print(home_id, home_league, home_div) home_teams = home_standings[home_div]['teams'] home_team_dict = next(item for item in home_teams if item["team_id"] == int(home_id)) home_team_wins = home_team_dict['w'] home_team_losses = home_team_dict['l'] home_team_percentage = home_team_wins / (home_team_wins + home_team_losses) * 100 away_teams = away_standings[away_div]['teams'] away_team_dict = next(item for item in away_teams if item["team_id"] == int(away_id)) away_team_wins = away_team_dict['w'] away_team_losses = away_team_dict['l'] away_team_percentage = away_team_wins / (away_team_wins + away_team_losses) * 100 game_list = [ away_str, away_team_percentage, home_str, home_team_percentage ] print(game_list) games_list.append(game_list) #print("Home wins: ", home_team_wins, "Away wins: ", away_team_wins) return games_list