Beispiel #1
0
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
Beispiel #2
0
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
        })
Beispiel #4
0
    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)
Beispiel #5
0
    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,
            )
Beispiel #6
0
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