From af0eb3466c33978ecadeaae32368104a8a94abbb Mon Sep 17 00:00:00 2001 From: Death916 Date: Mon, 11 Mar 2024 20:12:38 -0700 Subject: [PATCH] updates --- deathclock/ESPNMLBAPIBoxScores.py | 655 +++++++++++++++++ deathclock/ESPNNBAAPIBoxScores.py | 446 ++++++++++++ deathclock/ESPNNFLAPIBoxScores.py | 672 ++++++++++++++++++ deathclock/__pycache__/news.cpython-311.pyc | Bin 2603 -> 2632 bytes .../__pycache__/weather.cpython-311.pyc | Bin 4062 -> 3259 bytes deathclock/main.py | 2 +- deathclock/news.py | 2 +- deathclock/sports.py | 0 8 files changed, 1775 insertions(+), 2 deletions(-) create mode 100644 deathclock/ESPNMLBAPIBoxScores.py create mode 100644 deathclock/ESPNNBAAPIBoxScores.py create mode 100644 deathclock/ESPNNFLAPIBoxScores.py create mode 100644 deathclock/sports.py diff --git a/deathclock/ESPNMLBAPIBoxScores.py b/deathclock/ESPNMLBAPIBoxScores.py new file mode 100644 index 0000000..a25f8b4 --- /dev/null +++ b/deathclock/ESPNMLBAPIBoxScores.py @@ -0,0 +1,655 @@ +from urllib.request import urlopen +import json +import sys +import datetime +import re +from rich.console import Console +from rich.table import Table + +#Summary: mainline code at bottom, call the ESPN MLB Scoreboard API to get current list of games; +#There are 4 possible statuses for each game, post-game, during the game, pre-game, or other, usually a game in postponement, +#for which there will be such a status posted, but otherwise default to pre-game status. +#Then, the game is sent to one of three def's, which will then make another API call for that particular "event", in API terminology. +#At this point, there are two active Python dictionaries converted from the JSON data retunred from the API calls: +#1. MLB_data_json, the global dictionary for all games, from which a few stats are pulled, +#2. MLB_event_data_json, the detailed stats for that particular game being readied for display. +#Within each def, appropriate stats are pulled from the appropriate dictionary, and Python strings are built for display. +#Because Python/Linux display options are far too limited, the Raspberry Pi ticker idea was abandoned, +#so these stats are dumped to the terminal for viewing or redirection. +#Usage: python3 ESPNMLBAPIBoxScores.py YYYYMMDD +#Date parameter is optional, 1 date allowed only +#IMPORTANT: +#The rich text library must be installed, run the command "pip install rich" if necessary. + +#This project is posted under the GNU General Public License v3.0. If you intend to sell a product based on this code, or release a modified version of this code to the public, that code must also carry this license & be released to the public as open source. + +def MLB_post_game(game_number): + + url_event = "https://site.api.espn.com/apis/site/v2/sports/baseball/mlb/summary?event=" + MLB_data_json['events'][game_number]['id'] + MLB_event = urlopen(url_event) + MLB_event_data_json = json.loads(MLB_event.read()) + + console = Console() + + game_status = MLB_data_json['events'][game_number]['status']['type']['shortDetail'] + stadium = MLB_data_json['events'][game_number]['competitions'][0]['venue']['fullName'] + ", " + MLB_data_json['events'][game_number]['competitions'][0]['venue']['address']['city'] + ", " + MLB_data_json['events'][game_number]['competitions'][0]['venue']['address']['state'] + ", A-" + f"{MLB_data_json['events'][game_number]['competitions'][0]['attendance']:,}" + home = MLB_data_json['events'][game_number]['competitions'][0]['competitors'][0]['team']['displayName'] + visitor = MLB_data_json['events'][game_number]['competitions'][0]['competitors'][1]['team']['displayName'] + home_short = MLB_data_json['events'][game_number]['competitions'][0]['competitors'][0]['team']['abbreviation'] + visitor_short = MLB_data_json['events'][game_number]['competitions'][0]['competitors'][1]['team']['abbreviation'] + try: + home_record = MLB_data_json['events'][game_number]['competitions'][0]['competitors'][0]['records'][0]['summary'] + visitor_record = MLB_data_json['events'][game_number]['competitions'][0]['competitors'][1]['records'][0]['summary'] + except: + home_record = "" + visitor_record = "" + try: + headline = MLB_data_json['events'][game_number]['competitions'][0]['headlines'][0]['shortLinkText'] + except: + headline = "" + try: + series = MLB_data_json['events'][game_number]['competitions'][0]['series']['summary'] + except: + series = "" + try: + notes = MLB_data_json['events'][game_number]['competitions'][0]['notes'][0]['headline'] + except: + notes = "" + print() + print(" " + visitor + " (" + visitor_record + ")" + " vs. " + home + " (" + home_record + "),", stadium) + series_status = " " + if notes != "": + series_status = series_status + notes + ", " + if series != "": + series_status = series_status + series + else: + series_status = series_status[:-2] + if series_status != "": #If notes & series_blank are blank, series_status becomes blank + print(series_status) + if headline != "": + print(" " + headline) + if game_status == "Postponed": + print(" " + game_status) + print() + print("----------------------------------------") + return + + home_score = MLB_data_json['events'][game_number]['competitions'][0]['competitors'][0]['score'] + home_hits = MLB_data_json['events'][game_number]['competitions'][0]['competitors'][0]['hits'] + home_errors = MLB_data_json['events'][game_number]['competitions'][0]['competitors'][0]['errors'] + visitor_score = MLB_data_json['events'][game_number]['competitions'][0]['competitors'][1]['score'] + visitor_hits = MLB_data_json['events'][game_number]['competitions'][0]['competitors'][1]['hits'] + visitor_errors = MLB_data_json['events'][game_number]['competitions'][0]['competitors'][1]['errors'] + + home_inn = "" + visitor_inn = "" + for inn in range(0, 20): + try: + home_inn = home_inn + str(int(MLB_data_json['events'][game_number]['competitions'][0]['competitors'][0]['linescores'][inn]['value'])) + " " + except (IndexError, KeyError) as EndForLoop: #If PPD game, necessary to skip inning loop, similar for pitchers/batters + continue + for inn in range(0, 20): + try: + visitor_inn = visitor_inn + str(int(MLB_data_json['events'][game_number]['competitions'][0]['competitors'][1]['linescores'][inn]['value'])) + " " + except (IndexError, KeyError) as EndForLoop: + continue + + pitchers_wls = " " + for pitcher in range(0,3): + try: + pitchers_wls = pitchers_wls + MLB_data_json['events'][game_number]['competitions'][0]['status']['featuredAthletes'][pitcher]['abbreviation'] + "-" + MLB_data_json['events'][game_number]['competitions'][0]['status']['featuredAthletes'][pitcher]['athlete']['shortName'] + wins = 0 + losses = 0 + saves = 0 + era = 0 + for statistic in range(0,10): + try: + check_stat = MLB_data_json['events'][game_number]['competitions'][0]['status']['featuredAthletes'][pitcher]['statistics'][statistic]['abbreviation'] + if check_stat == "W": + wins = MLB_data_json['events'][game_number]['competitions'][0]['status']['featuredAthletes'][pitcher]['statistics'][statistic]['displayValue'] + elif check_stat == "L": + losses = MLB_data_json['events'][game_number]['competitions'][0]['status']['featuredAthletes'][pitcher]['statistics'][statistic]['displayValue'] + elif check_stat =="SV": + saves = MLB_data_json['events'][game_number]['competitions'][0]['status']['featuredAthletes'][pitcher]['statistics'][statistic]['displayValue'] + elif check_stat == "ERA": + era = MLB_data_json['events'][game_number]['competitions'][0]['status']['featuredAthletes'][pitcher]['statistics'][statistic]['displayValue'] + else: + pass + except: + continue + pitchers_wls = pitchers_wls + " (" + wins + "-" + losses + ", " + saves + " Sv, " + era + " ERA)\n " + except (IndexError, KeyError) as NoPitchersAvail: + continue + if pitchers_wls != " ": + pitchers_wls = pitchers_wls[0:-2] + + visitor_batting = Table(box=None, header_style="default") + visitor_batting.add_column(MLB_event_data_json['boxscore']['teams'][0]['team']['location'], style="default") + visitor_batting.add_column("Pos", style="default") + visitor_batting.add_column("AB", justify="right", style="default") + visitor_batting.add_column("R", justify="right", style="default") + visitor_batting.add_column("H", justify="right", style="default") + visitor_batting.add_column("RBI", justify="right", style="default") + visitor_batting.add_column("BB", justify="right", style="default") + visitor_batting.add_column("K", justify="right", style="default") + visitor_batting.add_column("AVG", justify="right", style="default") + visitor_batting.add_column("OBP", justify="right", style="default") + visitor_batting.add_column("SLG", justify="right", style="default") + bat_order = 0 + for batter in range(0,30): + try: + next_bat_order = MLB_event_data_json['boxscore']['players'][0]['statistics'][0]['athletes'][batter]['batOrder'] + if next_bat_order > bat_order: + bat_order = next_bat_order + batter_name = MLB_event_data_json['boxscore']['players'][0]['statistics'][0]['athletes'][batter]['athlete']['displayName'] + else: + batter_name = " " + MLB_event_data_json['boxscore']['players'][0]['statistics'][0]['athletes'][batter]['athlete']['displayName'] + try: #Index priming & continue out thru idx 6 ok + pos = MLB_event_data_json['boxscore']['players'][0]['statistics'][0]['athletes'][batter]['positions'][0]['abbreviation'] + for multi_pos in range (1,5): + try: + pos = pos + "-" + MLB_event_data_json['boxscore']['players'][0]['statistics'][0]['athletes'][batter]['positions'][multi_pos]['abbreviation'] + except: + continue + except (IndexError, KeyError) as OnePositionOnly: + pos = MLB_event_data_json['boxscore']['players'][0]['statistics'][0]['athletes'][batter]['position']['abbreviation'] + ab = MLB_event_data_json['boxscore']['players'][0]['statistics'][0]['athletes'][batter]['stats'][1] + r = MLB_event_data_json['boxscore']['players'][0]['statistics'][0]['athletes'][batter]['stats'][2] + h = MLB_event_data_json['boxscore']['players'][0]['statistics'][0]['athletes'][batter]['stats'][3] + rbi = MLB_event_data_json['boxscore']['players'][0]['statistics'][0]['athletes'][batter]['stats'][4] + bb = MLB_event_data_json['boxscore']['players'][0]['statistics'][0]['athletes'][batter]['stats'][6] + k = MLB_event_data_json['boxscore']['players'][0]['statistics'][0]['athletes'][batter]['stats'][7] + avg = MLB_event_data_json['boxscore']['players'][0]['statistics'][0]['athletes'][batter]['stats'][9] + obp = MLB_event_data_json['boxscore']['players'][0]['statistics'][0]['athletes'][batter]['stats'][10] + slg = MLB_event_data_json['boxscore']['players'][0]['statistics'][0]['athletes'][batter]['stats'][11] + visitor_batting.add_row(batter_name, pos, str(ab), str(r), str(h), str(rbi), str(bb), str(k), str(avg), str(obp), str(slg)) + except (IndexError, KeyError) as player_issue: + continue + visitor_batting.add_row("Totals", "", str(MLB_event_data_json['boxscore']['players'][0]['statistics'][0]['totals'][1]), str(MLB_event_data_json['boxscore']['players'][0]['statistics'][0]['totals'][2]), str(MLB_event_data_json['boxscore']['players'][0]['statistics'][0]['totals'][3]), str(MLB_event_data_json['boxscore']['players'][0]['statistics'][0]['totals'][4]), str(MLB_event_data_json['boxscore']['players'][0]['statistics'][0]['totals'][6]), str(MLB_event_data_json['boxscore']['players'][0]['statistics'][0]['totals'][7]), "", "", "") + + home_batting = Table(box=None, header_style="default") + home_batting.add_column(MLB_event_data_json['boxscore']['teams'][1]['team']['location'], style="default") + home_batting.add_column("Pos", style="default") + home_batting.add_column("AB", justify="right", style="default") + home_batting.add_column("R", justify="right", style="default") + home_batting.add_column("H", justify="right", style="default") + home_batting.add_column("RBI", justify="right", style="default") + home_batting.add_column("BB", justify="right", style="default") + home_batting.add_column("K", justify="right", style="default") + home_batting.add_column("AVG", justify="right", style="default") + home_batting.add_column("OBP", justify="right", style="default") + home_batting.add_column("SLG", justify="right", style="default") + bat_order = 0 + for batter in range(0,30): + try: + next_bat_order = MLB_event_data_json['boxscore']['players'][1]['statistics'][0]['athletes'][batter]['batOrder'] + if next_bat_order > bat_order: + bat_order = next_bat_order + batter_name = MLB_event_data_json['boxscore']['players'][1]['statistics'][0]['athletes'][batter]['athlete']['displayName'] + else: + batter_name = " " + MLB_event_data_json['boxscore']['players'][1]['statistics'][0]['athletes'][batter]['athlete']['displayName'] + try: + pos = MLB_event_data_json['boxscore']['players'][1]['statistics'][0]['athletes'][batter]['positions'][0]['abbreviation'] + for multi_pos in range (1,5): + try: + pos = pos + "-" + MLB_event_data_json['boxscore']['players'][1]['statistics'][0]['athletes'][batter]['positions'][multi_pos]['abbreviation'] + except: + continue + except (IndexError, KeyError) as OnePositionOnly: + pos = MLB_event_data_json['boxscore']['players'][1]['statistics'][0]['athletes'][batter]['position']['abbreviation'] + ab = MLB_event_data_json['boxscore']['players'][1]['statistics'][0]['athletes'][batter]['stats'][1] + r = MLB_event_data_json['boxscore']['players'][1]['statistics'][0]['athletes'][batter]['stats'][2] + h = MLB_event_data_json['boxscore']['players'][1]['statistics'][0]['athletes'][batter]['stats'][3] + rbi = MLB_event_data_json['boxscore']['players'][1]['statistics'][0]['athletes'][batter]['stats'][4] + bb = MLB_event_data_json['boxscore']['players'][1]['statistics'][0]['athletes'][batter]['stats'][6] + k = MLB_event_data_json['boxscore']['players'][1]['statistics'][0]['athletes'][batter]['stats'][7] + avg = MLB_event_data_json['boxscore']['players'][1]['statistics'][0]['athletes'][batter]['stats'][9] + obp = MLB_event_data_json['boxscore']['players'][1]['statistics'][0]['athletes'][batter]['stats'][10] + slg = MLB_event_data_json['boxscore']['players'][1]['statistics'][0]['athletes'][batter]['stats'][11] + home_batting.add_row(batter_name, pos, str(ab), str(r), str(h), str(rbi), str(bb), str(k), str(avg), str(obp), str(slg)) + except: + continue + home_batting.add_row("Totals", "", str(MLB_event_data_json['boxscore']['players'][1]['statistics'][0]['totals'][1]), str(MLB_event_data_json['boxscore']['players'][1]['statistics'][0]['totals'][2]), str(MLB_event_data_json['boxscore']['players'][1]['statistics'][0]['totals'][3]), str(MLB_event_data_json['boxscore']['players'][1]['statistics'][0]['totals'][4]), str(MLB_event_data_json['boxscore']['players'][1]['statistics'][0]['totals'][6]), str(MLB_event_data_json['boxscore']['players'][1]['statistics'][0]['totals'][7]), "", "", "") + + visitor_batting_details = " " + for detail in range (0,20): + try: + visitor_batting_details = visitor_batting_details + MLB_event_data_json['boxscore']['teams'][0]['details'][0]['stats'][detail]['abbreviation'] + "-" + MLB_event_data_json['boxscore']['teams'][0]['details'][0]['stats'][detail]['displayValue'] + "\n " + except IndexError: + continue + for detail in range (0,20): + try: + visitor_batting_details = visitor_batting_details + MLB_event_data_json['boxscore']['teams'][0]['details'][2]['stats'][detail]['abbreviation'] + "-" + MLB_event_data_json['boxscore']['teams'][0]['details'][2]['stats'][detail]['displayValue'] + "\n " + except IndexError: + continue + for detail in range (0,20): + try: + visitor_batting_details = visitor_batting_details + MLB_event_data_json['boxscore']['teams'][0]['details'][3]['stats'][detail]['abbreviation'] + "-" + MLB_event_data_json['boxscore']['teams'][0]['details'][3]['stats'][detail]['displayValue'] + "\n " + except IndexError: + continue + if visitor_batting_details != " ": + visitor_batting_details = visitor_batting_details[:-2] + + home_batting_details = " " + for detail in range (0,20): + try: + home_batting_details = home_batting_details + MLB_event_data_json['boxscore']['teams'][1]['details'][0]['stats'][detail]['abbreviation'] + "-" + MLB_event_data_json['boxscore']['teams'][1]['details'][0]['stats'][detail]['displayValue'] + "\n " + except IndexError: + continue + for detail in range (0,20): + try: + home_batting_details = home_batting_details + MLB_event_data_json['boxscore']['teams'][1]['details'][2]['stats'][detail]['abbreviation'] + "-" + MLB_event_data_json['boxscore']['teams'][1]['details'][2]['stats'][detail]['displayValue'] + "\n " + except IndexError: + continue + for detail in range (0,20): + try: + home_batting_details = home_batting_details + MLB_event_data_json['boxscore']['teams'][1]['details'][3]['stats'][detail]['abbreviation'] + "-" + MLB_event_data_json['boxscore']['teams'][1]['details'][3]['stats'][detail]['displayValue'] + "\n " + except IndexError: + continue + if home_batting_details != " ": + home_batting_details = home_batting_details[:-2] + + visitor_pitching_details = " " + for detail in range (0,20): + try: + visitor_pitching_details = visitor_pitching_details + MLB_event_data_json['boxscore']['teams'][0]['details'][1]['stats'][detail]['abbreviation'] + "-" + MLB_event_data_json['boxscore']['teams'][0]['details'][1]['stats'][detail]['displayValue'] + "\n " + except IndexError: + continue + if visitor_pitching_details != " ": + visitor_pitching_details = visitor_pitching_details[:-2] + + home_pitching_details = " " + for detail in range (0,20): + try: + home_pitching_details = home_pitching_details + MLB_event_data_json['boxscore']['teams'][1]['details'][1]['stats'][detail]['abbreviation'] + "-" + MLB_event_data_json['boxscore']['teams'][1]['details'][1]['stats'][detail]['displayValue'] + "\n " + except IndexError: + continue + if home_pitching_details != " ": + home_pitching_details = home_pitching_details[:-2] + + visitor_pitching = Table(box=None, header_style="default") + visitor_pitching.add_column(visitor_short + " Pitching", style="default") + visitor_pitching.add_column("IP", justify="right", style="default") + visitor_pitching.add_column("H", justify="right", style="default") + visitor_pitching.add_column("R", justify="right", style="default") + visitor_pitching.add_column("ER", justify="right", style="default") + visitor_pitching.add_column("BB", justify="right", style="default") + visitor_pitching.add_column("K", justify="right", style="default") + visitor_pitching.add_column("HR", justify="right", style="default") + visitor_pitching.add_column("PC-ST", justify="right", style="default") + visitor_pitching.add_column("ERA", justify="right", style="default") + visitor_pitching.add_column("PC", justify="right", style="default") + for pitcher in range(0,30): + try: + pitcher_name = MLB_event_data_json['boxscore']['players'][0]['statistics'][1]['athletes'][pitcher]['athlete']['displayName'] + ip = MLB_event_data_json['boxscore']['players'][0]['statistics'][1]['athletes'][pitcher]['stats'][0] + h = MLB_event_data_json['boxscore']['players'][0]['statistics'][1]['athletes'][pitcher]['stats'][1] + r = MLB_event_data_json['boxscore']['players'][0]['statistics'][1]['athletes'][pitcher]['stats'][2] + er = MLB_event_data_json['boxscore']['players'][0]['statistics'][1]['athletes'][pitcher]['stats'][3] + bb = MLB_event_data_json['boxscore']['players'][0]['statistics'][1]['athletes'][pitcher]['stats'][4] + k = MLB_event_data_json['boxscore']['players'][0]['statistics'][1]['athletes'][pitcher]['stats'][5] + hr = MLB_event_data_json['boxscore']['players'][0]['statistics'][1]['athletes'][pitcher]['stats'][6] + pcst = MLB_event_data_json['boxscore']['players'][0]['statistics'][1]['athletes'][pitcher]['stats'][7] + era = MLB_event_data_json['boxscore']['players'][0]['statistics'][1]['athletes'][pitcher]['stats'][8] + pc = MLB_event_data_json['boxscore']['players'][0]['statistics'][1]['athletes'][pitcher]['stats'][9] + visitor_pitching.add_row(pitcher_name, str(ip), str(h), str(r), str(er), str(bb), str(k), str(hr), str(pcst), str(era), str(pc)) + except IndexError: + continue + visitor_pitching.add_row("Totals", str(MLB_event_data_json['boxscore']['players'][0]['statistics'][1]['totals'][0]), str(MLB_event_data_json['boxscore']['players'][0]['statistics'][1]['totals'][1]), str(MLB_event_data_json['boxscore']['players'][0]['statistics'][1]['totals'][2]), str(MLB_event_data_json['boxscore']['players'][0]['statistics'][1]['totals'][3]), str(MLB_event_data_json['boxscore']['players'][0]['statistics'][1]['totals'][4]), str(MLB_event_data_json['boxscore']['players'][0]['statistics'][1]['totals'][5]), str(MLB_event_data_json['boxscore']['players'][0]['statistics'][1]['totals'][6]), str(MLB_event_data_json['boxscore']['players'][0]['statistics'][1]['totals'][7]), "", str(MLB_event_data_json['boxscore']['players'][0]['statistics'][1]['totals'][9])) + + home_pitching = Table(box=None, header_style="default") + home_pitching.add_column(home_short + " Pitching", style="default") + home_pitching.add_column("IP", justify="right", style="default") + home_pitching.add_column("H", justify="right", style="default") + home_pitching.add_column("R", justify="right", style="default") + home_pitching.add_column("ER", justify="right", style="default") + home_pitching.add_column("BB", justify="right", style="default") + home_pitching.add_column("K", justify="right", style="default") + home_pitching.add_column("HR", justify="right", style="default") + home_pitching.add_column("PC-ST", justify="right", style="default") + home_pitching.add_column("ERA", justify="right", style="default") + home_pitching.add_column("PC", justify="right", style="default") + for pitcher in range(0,30): + try: + pitcher_name = MLB_event_data_json['boxscore']['players'][1]['statistics'][1]['athletes'][pitcher]['athlete']['displayName'] + ip = MLB_event_data_json['boxscore']['players'][1]['statistics'][1]['athletes'][pitcher]['stats'][0] + h = MLB_event_data_json['boxscore']['players'][1]['statistics'][1]['athletes'][pitcher]['stats'][1] + r = MLB_event_data_json['boxscore']['players'][1]['statistics'][1]['athletes'][pitcher]['stats'][2] + er = MLB_event_data_json['boxscore']['players'][1]['statistics'][1]['athletes'][pitcher]['stats'][3] + bb = MLB_event_data_json['boxscore']['players'][1]['statistics'][1]['athletes'][pitcher]['stats'][4] + k = MLB_event_data_json['boxscore']['players'][1]['statistics'][1]['athletes'][pitcher]['stats'][5] + hr = MLB_event_data_json['boxscore']['players'][1]['statistics'][1]['athletes'][pitcher]['stats'][6] + pcst = MLB_event_data_json['boxscore']['players'][1]['statistics'][1]['athletes'][pitcher]['stats'][7] + era = MLB_event_data_json['boxscore']['players'][1]['statistics'][1]['athletes'][pitcher]['stats'][8] + pc = MLB_event_data_json['boxscore']['players'][1]['statistics'][1]['athletes'][pitcher]['stats'][9] + home_pitching.add_row(pitcher_name, str(ip), str(h), str(r), str(er), str(bb), str(k), str(hr), str(pcst), str(era), str(pc)) + except IndexError: + continue + home_pitching.add_row("Totals", str(MLB_event_data_json['boxscore']['players'][1]['statistics'][1]['totals'][0]), str(MLB_event_data_json['boxscore']['players'][1]['statistics'][1]['totals'][1]), str(MLB_event_data_json['boxscore']['players'][1]['statistics'][1]['totals'][2]), str(MLB_event_data_json['boxscore']['players'][1]['statistics'][1]['totals'][3]), str(MLB_event_data_json['boxscore']['players'][1]['statistics'][1]['totals'][4]), str(MLB_event_data_json['boxscore']['players'][1]['statistics'][1]['totals'][5]), str(MLB_event_data_json['boxscore']['players'][1]['statistics'][1]['totals'][6]), str(MLB_event_data_json['boxscore']['players'][1]['statistics'][1]['totals'][7]), "", str(MLB_event_data_json['boxscore']['players'][1]['statistics'][1]['totals'][9])) + + plays = " Play-by-play:" + for play in range(0,2000): + try: + if MLB_event_data_json['plays'][play]['type']['type'] == "start-inning": + plays = plays + "\n " + MLB_event_data_json['plays'][play]['text'] + ": " + elif MLB_event_data_json['plays'][play]['type']['type'] == "play-result": + plays = plays + MLB_event_data_json['plays'][play]['text'] + " " + else: + pass + except (IndexError, KeyError) as api_bad_data_problem: + continue + if plays == " Play-by-play:": + plays = "No play-by-play data available." + + try: + article = MLB_event_data_json['article']['story'] + except: + article = "" + if article != "": + article = re.sub(r'<.*?>', '', article) + article = re.sub(' +', ' ', article) + article = re.sub('\r', '', article) + article = re.sub('\n\n\n ', '\n', article) + + rhe = Table(box=None, header_style="default") + rhe.add_column(game_status, style="default") + rhe.add_column("", style="default") + rhe.add_column("R", justify="right", style="default") + rhe.add_column("H", justify="right", style="default") + rhe.add_column("E", justify="right", style="default") + rhe.add_row(visitor_short, visitor_inn, str(visitor_score), str(visitor_hits), str(visitor_errors)) + rhe.add_row(home_short, home_inn, str(home_score), str(home_hits), str(home_errors)) + + print() + console.print(rhe) + print() + if pitchers_wls != " ": + print(pitchers_wls) + print() + console.print(visitor_batting) + print() + print(visitor_batting_details) + print() + console.print(home_batting) + print() + print(home_batting_details) + print() + console.print(visitor_pitching) + print() + print(visitor_pitching_details) + print() + console.print(home_pitching) + print() + print(home_pitching_details) + if article != "": + print() + print(article) + print() + print(plays) + print("----------------------------------------") + +def MLB_in_progress(game_number): + + console = Console() + + stadium = MLB_data_json['events'][game_number]['competitions'][0]['venue']['fullName'] + ", " + MLB_data_json['events'][game_number]['competitions'][0]['venue']['address']['city'] + ", " + MLB_data_json['events'][game_number]['competitions'][0]['venue']['address']['state'] + home = MLB_data_json['events'][game_number]['competitions'][0]['competitors'][0]['team']['displayName'] + visitor = MLB_data_json['events'][game_number]['competitions'][0]['competitors'][1]['team']['displayName'] + game_status = MLB_data_json['events'][game_number]['status']['type']['shortDetail'] + home_short = MLB_data_json['events'][game_number]['competitions'][0]['competitors'][0]['team']['abbreviation'] + visitor_short = MLB_data_json['events'][game_number]['competitions'][0]['competitors'][1]['team']['abbreviation'] + try: + home_record = MLB_data_json['events'][game_number]['competitions'][0]['competitors'][0]['records'][0]['summary'] + visitor_record = MLB_data_json['events'][game_number]['competitions'][0]['competitors'][1]['records'][0]['summary'] + except: + home_record = "" + visitor_record = "" + try: + broadcast = ", " + MLB_data_json['events'][game_number]['competitions'][0]['broadcasts'][0]['names'][0] + except: + broadcast = "" + try: + series = MLB_data_json['events'][game_number]['competitions'][0]['series']['summary'] + except: + series = "" + try: + notes = MLB_data_json['events'][game_number]['competitions'][0]['notes'][0]['headline'] + except: + notes = "" + balls = MLB_data_json['events'][game_number]['competitions'][0]['situation']['balls'] + strikes = MLB_data_json['events'][game_number]['competitions'][0]['situation']['strikes'] + outs = MLB_data_json['events'][game_number]['competitions'][0]['situation']['outs'] + home_score = MLB_data_json['events'][game_number]['competitions'][0]['competitors'][0]['score'] + home_hits = MLB_data_json['events'][game_number]['competitions'][0]['competitors'][0]['hits'] + home_errors = MLB_data_json['events'][game_number]['competitions'][0]['competitors'][0]['errors'] + visitor_score = MLB_data_json['events'][game_number]['competitions'][0]['competitors'][1]['score'] + visitor_hits = MLB_data_json['events'][game_number]['competitions'][0]['competitors'][1]['hits'] + visitor_errors = MLB_data_json['events'][game_number]['competitions'][0]['competitors'][1]['errors'] + + home_inn = "" + visitor_inn = "" + for inn in range(0, 20): + try: + home_inn = home_inn + str(int(MLB_data_json['events'][game_number]['competitions'][0]['competitors'][0]['linescores'][inn]['value'])) + " + " + except IndexError: + continue + if home_inn != "": + home_inn = home_inn[:-3] + for inn in range(0, 20): + try: + visitor_inn = visitor_inn + str(int(MLB_data_json['events'][game_number]['competitions'][0]['competitors'][1]['linescores'][inn]['value'])) + " + " + except IndexError: + continue + if visitor_inn != "": + visitor_inn = visitor_inn[:-3] + + on_first_bool = int(MLB_data_json['events'][game_number]['competitions'][0]['situation']['onFirst']) # In JSON as boolean, so cast T/F to 1/0 + on_second_bool = int(MLB_data_json['events'][game_number]['competitions'][0]['situation']['onSecond']) + on_third_bool = int(MLB_data_json['events'][game_number]['competitions'][0]['situation']['onThird']) + if on_first_bool == 1: + on_first = " 1st" + else: + on_first = "" + if on_second_bool == 1: + on_second = " 2nd" + else: + on_second = "" + if on_third_bool == 1: + on_third = " 3rd" + else: + on_third = "" + + rhe = Table(box=None, header_style="default") + rhe.add_column(game_status, style="default") + rhe.add_column("", style="default") + rhe.add_column("R", justify="right", style="default") + rhe.add_column("H", justify="right", style="default") + rhe.add_column("E", justify="right", style="default") + rhe.add_row(visitor_short, visitor_inn, str(visitor_score), str(visitor_hits), str(visitor_errors)) + rhe.add_row(home_short, home_inn, str(home_score), str(home_hits), str(home_errors)) + + bso = Table(box=None, header_style="black on white") + bso.add_column("", style="black on white") + bso.add_column("", style="black on white") + bso.add_column("Runners", style="black on white") + bso.add_row("Balls", str(balls), on_first) + bso.add_row("Strikes", str(strikes), on_second) + bso.add_row("Outs", str(outs), on_third) + + last_play = " " + MLB_data_json['events'][game_number]['competitions'][0]['situation']['lastPlay']['text'] + try: + pitcher = " Pitcher: " + MLB_data_json['events'][game_number]['competitions'][0]['situation']['pitcher']['athlete']['displayName'] + " " + MLB_data_json['events'][game_number]['competitions'][0]['situation']['pitcher']['summary'] + except: + pitcher = "" + try: + batter = " Batter: " + MLB_data_json['events'][game_number]['competitions'][0]['situation']['batter']['athlete']['displayName'] + " " + MLB_data_json['events'][game_number]['competitions'][0]['situation']['batter']['summary'] + except: + batter = "" + + print(" " + visitor + " (" + visitor_record + ")" + " vs. " + home + " (" + home_record + ")") + print (" " + stadium + broadcast) + series_status = " " + if notes != "": + series_status = series_status + notes + ", " + if series != "": + series_status = series_status + series + else: + series_status = series_status[:-2] + if series_status != "": + print(series_status) + print() + console.print(rhe) + print() + console.print(bso) + print() + print(last_play) + if pitcher != "": + print(pitcher) + if batter != "": + print(batter) + print("----------------------------------------") + +def MLB_pre_game(game_number): + + stadium = MLB_data_json['events'][game_number]['competitions'][0]['venue']['fullName'] + ", " + MLB_data_json['events'][game_number]['competitions'][0]['venue']['address']['city'] + ", " + MLB_data_json['events'][game_number]['competitions'][0]['venue']['address']['state'] + home = MLB_data_json['events'][game_number]['competitions'][0]['competitors'][0]['team']['displayName'] + visitor = MLB_data_json['events'][game_number]['competitions'][0]['competitors'][1]['team']['displayName'] + game_status = MLB_data_json['events'][game_number]['status']['type']['shortDetail'] + try: + home_record = MLB_data_json['events'][game_number]['competitions'][0]['competitors'][0]['records'][0]['summary'] + visitor_record = MLB_data_json['events'][game_number]['competitions'][0]['competitors'][1]['records'][0]['summary'] + home_record_list = re.split('[-()]', home_record) + visitor_record_list = re.split('[-()]', visitor_record) + home_total_games = 0 + visitor_total_games = 0 + for i in home_record_list: + home_total_games = home_total_games + int(i) + for i in visitor_record_list: + visitor_total_games = visitor_total_games + int(i) + except: + home_record = "" + visitor_record = "" + try: + weather = MLB_data_json['events'][game_number]['weather']['displayValue'] + temperature = MLB_data_json['events'][game_number]['weather']['temperature'] + except: + weather = "" + temperature = "" + try: + broadcast = MLB_data_json['events'][game_number]['competitions'][0]['broadcasts'][0]['names'][0] + except: + broadcast = "" + try: + odds = MLB_data_json['events'][game_number]['competitions'][0]['odds'][0]['details'] + except: + odds = "" + try: + series = MLB_data_json['events'][game_number]['competitions'][0]['series']['summary'] + except: + series = "" + try: + notes = MLB_data_json['events'][game_number]['competitions'][0]['notes'][0]['headline'] + except: + notes = "" + + home_short = MLB_data_json['events'][game_number]['competitions'][0]['competitors'][0]['team']['abbreviation'] + visitor_short = MLB_data_json['events'][game_number]['competitions'][0]['competitors'][1]['team']['abbreviation'] + + try: + home_probable = MLB_data_json['events'][game_number]['competitions'][0]['competitors'][0]['probables'][0]['athlete']['displayName'] + home_probable_record = MLB_data_json['events'][game_number]['competitions'][0]['competitors'][0]['probables'][0]['statistics'][2]['displayValue'] + "-" + MLB_data_json['events'][game_number]['competitions'][0]['competitors'][0]['probables'][0]['statistics'][1]['displayValue'] + "-" + MLB_data_json['events'][game_number]['competitions'][0]['competitors'][0]['probables'][0]['statistics'][0]['displayValue'] + ", " + MLB_data_json['events'][game_number]['competitions'][0]['competitors'][0]['probables'][0]['statistics'][3]['displayValue'] + " ERA" + except: + home_probable = "" + home_probable_record = "" + + try: + visitor_probable = MLB_data_json['events'][game_number]['competitions'][0]['competitors'][1]['probables'][0]['athlete']['displayName'] + visitor_probable_record = MLB_data_json['events'][game_number]['competitions'][0]['competitors'][1]['probables'][0]['statistics'][2]['displayValue'] + "-" + MLB_data_json['events'][game_number]['competitions'][0]['competitors'][1]['probables'][0]['statistics'][1]['displayValue'] + "-" + MLB_data_json['events'][game_number]['competitions'][0]['competitors'][1]['probables'][0]['statistics'][0]['displayValue'] + ", " + MLB_data_json['events'][game_number]['competitions'][0]['competitors'][1]['probables'][0]['statistics'][3]['displayValue'] + " ERA" + except: + visitor_probable = "" + visitor_probable_record = "" + + if home_total_games != 0: + home_rpg = " (" + str(round(int(MLB_data_json['events'][game_number]['competitions'][0]['competitors'][0]['statistics'][1]['displayValue']) / home_total_games, 2)) + ")" + home_hpg = " (" + str(round(int(MLB_data_json['events'][game_number]['competitions'][0]['competitors'][0]['statistics'][0]['displayValue']) / home_total_games, 2)) + ")" + else: + home_rpg = "" + home_hpg = "" + + if visitor_total_games != 0: + visitor_rpg = " (" + str(round(int(MLB_data_json['events'][game_number]['competitions'][0]['competitors'][1]['statistics'][1]['displayValue']) / visitor_total_games, 2)) + ")" + visitor_hpg = " (" + str(round(int(MLB_data_json['events'][game_number]['competitions'][0]['competitors'][1]['statistics'][0]['displayValue']) / visitor_total_games, 2)) + ")" + else: + visitor_rpg = "" + visitor_hpg = "" + + home_totals = " Team Totals: " + str(MLB_data_json['events'][game_number]['competitions'][0]['competitors'][0]['statistics'][1]['displayValue']) + home_rpg + " Runs, " + str(MLB_data_json['events'][game_number]['competitions'][0]['competitors'][0]['statistics'][0]['displayValue']) + home_hpg + " Hits, " + str(MLB_data_json['events'][game_number]['competitions'][0]['competitors'][0]['statistics'][2]['displayValue']) + " Avg., " + str(MLB_data_json['events'][game_number]['competitions'][0]['competitors'][0]['statistics'][6]['displayValue']) + " ERA" + visitor_totals = " Team Totals: " + str(MLB_data_json['events'][game_number]['competitions'][0]['competitors'][1]['statistics'][1]['displayValue']) + visitor_rpg + " Runs, " + str(MLB_data_json['events'][game_number]['competitions'][0]['competitors'][1]['statistics'][0]['displayValue']) + visitor_hpg + " Hits, " + str(MLB_data_json['events'][game_number]['competitions'][0]['competitors'][1]['statistics'][2]['displayValue']) + " Avg., " + str(MLB_data_json['events'][game_number]['competitions'][0]['competitors'][1]['statistics'][6]['displayValue']) + " ERA" + + home_leaders = " Team Leaders: " + MLB_data_json['events'][game_number]['competitions'][0]['competitors'][0]['leaders'][0]['leaders'][0]['athlete']['fullName'] + " " + MLB_data_json['events'][game_number]['competitions'][0]['competitors'][0]['leaders'][0]['leaders'][0]['athlete']['position']['abbreviation'] + ", " + MLB_data_json['events'][game_number]['competitions'][0]['competitors'][0]['leaders'][0]['leaders'][0]['displayValue'] + " Avg., " + MLB_data_json['events'][game_number]['competitions'][0]['competitors'][0]['leaders'][1]['leaders'][0]['athlete']['fullName'] + " " + MLB_data_json['events'][game_number]['competitions'][0]['competitors'][0]['leaders'][1]['leaders'][0]['athlete']['position']['abbreviation'] + ", " + MLB_data_json['events'][game_number]['competitions'][0]['competitors'][0]['leaders'][1]['leaders'][0]['displayValue'] + " HR, " + MLB_data_json['events'][game_number]['competitions'][0]['competitors'][0]['leaders'][2]['leaders'][0]['athlete']['fullName'] + " " + MLB_data_json['events'][game_number]['competitions'][0]['competitors'][0]['leaders'][2]['leaders'][0]['athlete']['position']['abbreviation'] + ", " + MLB_data_json['events'][game_number]['competitions'][0]['competitors'][0]['leaders'][2]['leaders'][0]['displayValue'] + " RBI" + visitor_leaders = " Team Leaders: " + MLB_data_json['events'][game_number]['competitions'][0]['competitors'][1]['leaders'][0]['leaders'][0]['athlete']['fullName'] + " " + MLB_data_json['events'][game_number]['competitions'][0]['competitors'][1]['leaders'][0]['leaders'][0]['athlete']['position']['abbreviation'] + ", " + MLB_data_json['events'][game_number]['competitions'][0]['competitors'][1]['leaders'][0]['leaders'][0]['displayValue'] + " Avg., " + MLB_data_json['events'][game_number]['competitions'][0]['competitors'][1]['leaders'][1]['leaders'][0]['athlete']['fullName'] + " " + MLB_data_json['events'][game_number]['competitions'][0]['competitors'][1]['leaders'][1]['leaders'][0]['athlete']['position']['abbreviation'] + ", " + MLB_data_json['events'][game_number]['competitions'][0]['competitors'][1]['leaders'][1]['leaders'][0]['displayValue'] + " HR, " + MLB_data_json['events'][game_number]['competitions'][0]['competitors'][1]['leaders'][2]['leaders'][0]['athlete']['fullName'] + " " + MLB_data_json['events'][game_number]['competitions'][0]['competitors'][1]['leaders'][2]['leaders'][0]['athlete']['position']['abbreviation'] + ", " + MLB_data_json['events'][game_number]['competitions'][0]['competitors'][1]['leaders'][2]['leaders'][0]['displayValue'] + " RBI" + + print(visitor, "("+visitor_record+")", "at", home, "("+home_record+")", "\n", game_status+",", stadium) + series_status = " " + if notes != "": + series_status = series_status + notes + ", " + if series != "": + series_status = series_status + series + else: + series_status = series_status[:-2] + if series_status != "": + print(series_status) + misc_status = " " + if weather != "" and temperature != "": + misc_status = misc_status+weather+", "+str(temperature)+", " + if broadcast != "": + misc_status = misc_status+broadcast+", " + if odds != "": + misc_status = misc_status+"LINE: "+odds + if misc_status != " ": + print(misc_status) + print() + print(" " + visitor_short + " Probable Starting Pitcher: " + visitor_probable + " (" + visitor_probable_record + ")") + print(visitor_totals) + print(visitor_leaders) + print() + print(" " + home_short + " Probable Starting Pitcher: " + home_probable + " (" + home_probable_record + ")") + print(home_totals) + print(home_leaders) + print() + +#Mainline +#Due to API throttling of requesting more than one day at a time, only 1 day is supported as an optional parameter. Script this program if more than 1 day desired. Due to issues with throttling, wait 1 minute between calls of this program for 1 day of box scores. + +if len(sys.argv) == 2: + date_arg = str(sys.argv[1]) + url = "https://site.api.espn.com/apis/site/v2/sports/baseball/mlb/scoreboard?dates=" + date_arg + "-" + date_arg + try: + game_date = datetime.datetime(int(date_arg[0:4]), int(date_arg[4:6]), int(date_arg[6:8])) + except: + print("Incorrect date format, use YYYYMMDD format.") + exit() + print("----------------------------------------------------------------------") + print("Games of " + game_date.strftime("%B %-d, %Y")) +else: + url = "https://site.api.espn.com/apis/site/v2/sports/baseball/mlb/scoreboard" + +try: + MLB_today = urlopen(url) +except: + print("No games on this date.") #If get past datetime above, date is OK, so API error due to no games. + exit() + +MLB_data_json = json.loads(MLB_today.read()) + +for game in range(0, 20): + try: + game_state = MLB_data_json['events'][game]['status']['type']['state'] + if game_state == "post": + MLB_post_game(game) + elif game_state == "in": + MLB_in_progress(game) + else: + MLB_pre_game(game) + except IndexError: + continue \ No newline at end of file diff --git a/deathclock/ESPNNBAAPIBoxScores.py b/deathclock/ESPNNBAAPIBoxScores.py new file mode 100644 index 0000000..0931bdf --- /dev/null +++ b/deathclock/ESPNNBAAPIBoxScores.py @@ -0,0 +1,446 @@ +from urllib.request import urlopen +import json +import sys +import datetime +import re +from rich.console import Console +from rich.table import Table + +#Summary: mainline code at bottom, call the ESPN NBA Scoreboard API to get current list of games; +#There are 4 possible statuses for each game, post-game, during the game, pre-game, or other, usually a game in postponement, +#for which there will be such a status posted, but otherwise default to pre-game status. +#Then, the game is sent to one of three def's, which will then make another API call for that particular "event", in API terminology. +#At this point, there are two active Python dictionaries converted from the JSON data retunred from the API calls: +#1. NBA_data_json, the global dictionary for all games, from which a few stats are pulled, +#2. NBA_event_data_json, the detailed stats for that particular game being readied for display. +#Within each def, appropriate stats are pulled from the appropriate dictionary, and Python strings are built for display. +#Because Python/Linux display options are far too limited, the Raspberry Pi ticker idea was abandoned, +#so these stats are dumped to the terminal for viewing or redirection. +#Usage: python3 -u ESPNNBAAPIBoxScores.py YYYYMMDD +#Date parameter optional, add 2nd date in same format for a date range, otherwise get games on current scoreboard +#IMPORTANT: +#The rich text library must be installed, run the command "pip install rich" if necessary. + +#This project is posted under the GNU General Public License v3.0. If you intend to sell a product based on this code, or release a modified version of this code to the public, that code must also carry this license & be released to the public as open source. + +def NBA_post_game(game_number): + + event_id = NBA_data_json['events'][game_number]['id'] + event_url = "http://site.api.espn.com/apis/site/v2/sports/basketball/nba/summary?event=" + event_id + NBA_event = urlopen(event_url) + NBA_event_data_json = json.loads(NBA_event.read()) + + console = Console() + + home = NBA_data_json['events'][game_number]['competitions'][0]['competitors'][0]['team']['displayName'] + home_record = NBA_data_json['events'][game_number]['competitions'][0]['competitors'][0]['records'][0]['summary'] + home_short = NBA_data_json['events'][game_number]['competitions'][0]['competitors'][0]['team']['shortDisplayName'] + home_player_stats = Table(box=None, header_style="default") + home_player_stats.add_column(home_short + " (" + home_record + ")") + home_player_stats.add_column("Min", justify="right") + home_player_stats.add_column("FG", justify="right") + home_player_stats.add_column("3-pt", justify="right") + home_player_stats.add_column("FT", justify="right") + home_player_stats.add_column("Tot Reb", justify="right") + home_player_stats.add_column("Off Reb", justify="right") + home_player_stats.add_column("Ast", justify="right") + home_player_stats.add_column("TO", justify="right") + home_player_stats.add_column("Stl", justify="right") + home_player_stats.add_column("Blk", justify="right") + home_player_stats.add_column("Fls", justify="right") + home_player_stats.add_column("Pts", justify="right") + + for player in range(0, 20): + try: + try: + player_name = NBA_event_data_json['boxscore']['players'][1]['statistics'][0]['athletes'][player]['athlete']['displayName'] + except: + player_name = NBA_event_data_json['boxscore']['players'][1]['statistics'][0]['athletes'][player]['athlete']['shortName'] + player_min = NBA_event_data_json['boxscore']['players'][1]['statistics'][0]['athletes'][player]['stats'][0] + player_fg = NBA_event_data_json['boxscore']['players'][1]['statistics'][0]['athletes'][player]['stats'][1] + player_3pt = NBA_event_data_json['boxscore']['players'][1]['statistics'][0]['athletes'][player]['stats'][2] + player_ft = NBA_event_data_json['boxscore']['players'][1]['statistics'][0]['athletes'][player]['stats'][3] + player_reb = NBA_event_data_json['boxscore']['players'][1]['statistics'][0]['athletes'][player]['stats'][6] + player_oreb = NBA_event_data_json['boxscore']['players'][1]['statistics'][0]['athletes'][player]['stats'][4] + player_ast = NBA_event_data_json['boxscore']['players'][1]['statistics'][0]['athletes'][player]['stats'][7] + player_stl = NBA_event_data_json['boxscore']['players'][1]['statistics'][0]['athletes'][player]['stats'][8] + player_blk = NBA_event_data_json['boxscore']['players'][1]['statistics'][0]['athletes'][player]['stats'][9] + player_to = NBA_event_data_json['boxscore']['players'][1]['statistics'][0]['athletes'][player]['stats'][10] + player_fl = NBA_event_data_json['boxscore']['players'][1]['statistics'][0]['athletes'][player]['stats'][11] + player_pts = NBA_event_data_json['boxscore']['players'][1]['statistics'][0]['athletes'][player]['stats'][13] + home_player_stats.add_row(player_name, player_min, player_fg, player_3pt, player_ft, player_reb, player_oreb, player_ast, player_to, player_stl, player_blk, player_fl, player_pts) + except IndexError: + continue + + home_score = NBA_data_json['events'][game_number]['competitions'][0]['competitors'][0]['score'] + home_rebounds = NBA_data_json['events'][game_number]['competitions'][0]['competitors'][0]['statistics'][0]['displayValue'] + home_off_reb = NBA_event_data_json['boxscore']['teams'][1]['statistics'][7]['displayValue'] + home_assists = NBA_data_json['events'][game_number]['competitions'][0]['competitors'][0]['statistics'][2]['displayValue'] + home_fg_pct = NBA_data_json['events'][game_number]['competitions'][0]['competitors'][0]['statistics'][5]['displayValue'] + home_ft_pct = NBA_data_json['events'][game_number]['competitions'][0]['competitors'][0]['statistics'][6]['displayValue'] + home_3pt_pct = NBA_data_json['events'][game_number]['competitions'][0]['competitors'][0]['statistics'][15]['displayValue'] + home_3pt_made = NBA_data_json['events'][game_number]['competitions'][0]['competitors'][0]['statistics'][12]['displayValue'] + home_3pt_att = NBA_data_json['events'][game_number]['competitions'][0]['competitors'][0]['statistics'][11]['displayValue'] + home_fgm = NBA_data_json['events'][game_number]['competitions'][0]['competitors'][0]['statistics'][4]['displayValue'] + home_fga = NBA_data_json['events'][game_number]['competitions'][0]['competitors'][0]['statistics'][3]['displayValue'] + home_ftm = NBA_data_json['events'][game_number]['competitions'][0]['competitors'][0]['statistics'][8]['displayValue'] + home_fta = NBA_data_json['events'][game_number]['competitions'][0]['competitors'][0]['statistics'][7]['displayValue'] + home_to = NBA_event_data_json['boxscore']['teams'][1]['statistics'][14]['displayValue'] + home_stl = NBA_event_data_json['boxscore']['teams'][1]['statistics'][10]['displayValue'] + home_blk = NBA_event_data_json['boxscore']['teams'][1]['statistics'][11]['displayValue'] + home_fls = NBA_event_data_json['boxscore']['teams'][1]['statistics'][21]['displayValue'] + + home_player_stats.add_row("Totals", "", home_fgm + "-" + home_fga, home_3pt_made + "-" + home_3pt_att, home_ftm + "-" + home_fta, home_rebounds, home_off_reb, home_assists, home_to, home_stl, home_blk, home_fls, home_score) + home_player_stats.add_row("", "", home_fg_pct + "%", home_3pt_pct + "%", home_ft_pct + "%", "", "", "", "", "", "", "", "") + + home_qtrs = "" + for qtr in range(0, 12): + try: + home_qtrs = home_qtrs + str(int(NBA_data_json['events'][game_number]['competitions'][0]['competitors'][0]['linescores'][qtr]['value'])) + " + " + except IndexError: + continue + if home_qtrs != "": #Remove extra + at end + home_qtrs = home_qtrs[:-3] + + home_extra_stats = " Score by Quarters: " + home_qtrs + "\n " + str(NBA_event_data_json['boxscore']['teams'][1]['statistics'][15]['displayValue']) + " Technicals, " + str(NBA_event_data_json['boxscore']['teams'][1]['statistics'][17]['displayValue']) + " Flagrant Fouls, " + str(NBA_event_data_json['boxscore']['teams'][1]['statistics'][22]['displayValue']) + " Largest Lead, " + str(NBA_event_data_json['boxscore']['teams'][1]['statistics'][18]['displayValue']) + " Points off Turnovers, " + str(NBA_event_data_json['boxscore']['teams'][1]['statistics'][19]['displayValue']) + " Fast Break Points, " + str(NBA_event_data_json['boxscore']['teams'][1]['statistics'][20]['displayValue']) + " Points in the Paint" + + visitor = NBA_data_json['events'][game_number]['competitions'][0]['competitors'][1]['team']['displayName'] + visitor_record = NBA_data_json['events'][game_number]['competitions'][0]['competitors'][1]['records'][0]['summary'] + visitor_short = NBA_data_json['events'][game_number]['competitions'][0]['competitors'][1]['team']['shortDisplayName'] + visitor_player_stats = Table(box=None, header_style="default") + visitor_player_stats.add_column(visitor_short + " (" + visitor_record + ")") + visitor_player_stats.add_column("Min", justify="right") + visitor_player_stats.add_column("FG", justify="right") + visitor_player_stats.add_column("3-pt", justify="right") + visitor_player_stats.add_column("FT", justify="right") + visitor_player_stats.add_column("Tot Reb", justify="right") + visitor_player_stats.add_column("Off Reb", justify="right") + visitor_player_stats.add_column("Ast", justify="right") + visitor_player_stats.add_column("TO", justify="right") + visitor_player_stats.add_column("Stl", justify="right") + visitor_player_stats.add_column("Blk", justify="right") + visitor_player_stats.add_column("Fls", justify="right") + visitor_player_stats.add_column("Pts", justify="right") + + for player in range(0, 20): + try: + try: + player_name = NBA_event_data_json['boxscore']['players'][0]['statistics'][0]['athletes'][player]['athlete']['displayName'] + except: + player_name = NBA_event_data_json['boxscore']['players'][0]['statistics'][0]['athletes'][player]['athlete']['shortName'] + player_min = NBA_event_data_json['boxscore']['players'][0]['statistics'][0]['athletes'][player]['stats'][0] + player_fg = NBA_event_data_json['boxscore']['players'][0]['statistics'][0]['athletes'][player]['stats'][1] + player_3pt = NBA_event_data_json['boxscore']['players'][0]['statistics'][0]['athletes'][player]['stats'][2] + player_ft = NBA_event_data_json['boxscore']['players'][0]['statistics'][0]['athletes'][player]['stats'][3] + player_reb = NBA_event_data_json['boxscore']['players'][0]['statistics'][0]['athletes'][player]['stats'][6] + player_oreb = NBA_event_data_json['boxscore']['players'][0]['statistics'][0]['athletes'][player]['stats'][4] + player_ast = NBA_event_data_json['boxscore']['players'][0]['statistics'][0]['athletes'][player]['stats'][7] + player_stl = NBA_event_data_json['boxscore']['players'][0]['statistics'][0]['athletes'][player]['stats'][8] + player_blk = NBA_event_data_json['boxscore']['players'][0]['statistics'][0]['athletes'][player]['stats'][9] + player_to = NBA_event_data_json['boxscore']['players'][0]['statistics'][0]['athletes'][player]['stats'][10] + player_fl = NBA_event_data_json['boxscore']['players'][0]['statistics'][0]['athletes'][player]['stats'][11] + player_pts = NBA_event_data_json['boxscore']['players'][0]['statistics'][0]['athletes'][player]['stats'][13] + visitor_player_stats.add_row(player_name, player_min, player_fg, player_3pt, player_ft, player_reb, player_oreb, player_ast, player_to, player_stl, player_blk, player_fl, player_pts) + except IndexError: + continue + + visitor_score = NBA_data_json['events'][game_number]['competitions'][0]['competitors'][1]['score'] + visitor_rebounds = NBA_data_json['events'][game_number]['competitions'][0]['competitors'][1]['statistics'][0]['displayValue'] + visitor_off_reb = NBA_event_data_json['boxscore']['teams'][0]['statistics'][7]['displayValue'] + visitor_assists = NBA_data_json['events'][game_number]['competitions'][0]['competitors'][1]['statistics'][2]['displayValue'] + visitor_fg_pct = NBA_data_json['events'][game_number]['competitions'][0]['competitors'][1]['statistics'][5]['displayValue'] + visitor_ft_pct = NBA_data_json['events'][game_number]['competitions'][0]['competitors'][1]['statistics'][6]['displayValue'] + visitor_3pt_pct = NBA_data_json['events'][game_number]['competitions'][0]['competitors'][1]['statistics'][15]['displayValue'] + visitor_3pt_made = NBA_data_json['events'][game_number]['competitions'][0]['competitors'][1]['statistics'][12]['displayValue'] + visitor_3pt_att = NBA_data_json['events'][game_number]['competitions'][0]['competitors'][1]['statistics'][11]['displayValue'] + visitor_fgm = NBA_data_json['events'][game_number]['competitions'][0]['competitors'][1]['statistics'][4]['displayValue'] + visitor_fga = NBA_data_json['events'][game_number]['competitions'][0]['competitors'][1]['statistics'][3]['displayValue'] + visitor_ftm = NBA_data_json['events'][game_number]['competitions'][0]['competitors'][1]['statistics'][8]['displayValue'] + visitor_fta = NBA_data_json['events'][game_number]['competitions'][0]['competitors'][1]['statistics'][7]['displayValue'] + visitor_to = NBA_event_data_json['boxscore']['teams'][0]['statistics'][14]['displayValue'] + visitor_stl = NBA_event_data_json['boxscore']['teams'][0]['statistics'][10]['displayValue'] + visitor_blk = NBA_event_data_json['boxscore']['teams'][0]['statistics'][11]['displayValue'] + visitor_fls = NBA_event_data_json['boxscore']['teams'][0]['statistics'][21]['displayValue'] + + visitor_player_stats.add_row("Totals", "", visitor_fgm + "-" + visitor_fga, visitor_3pt_made + "-" + visitor_3pt_att, visitor_ftm + "-" + visitor_fta, visitor_rebounds, visitor_off_reb, visitor_assists, visitor_to, visitor_stl, visitor_blk, visitor_fls, visitor_score) + visitor_player_stats.add_row("", "", visitor_fg_pct + "%", visitor_3pt_pct + "%", visitor_ft_pct + "%", "", "", "", "", "", "", "", "") + + visitor_qtrs = "" + for qtr in range(0, 12): + try: + visitor_qtrs = visitor_qtrs + str(int(NBA_data_json['events'][game_number]['competitions'][0]['competitors'][1]['linescores'][qtr]['value'])) + " + " + except IndexError: + continue + if visitor_qtrs != "": + visitor_qtrs = visitor_qtrs[:-3] + + visitor_extra_stats = " Score by Quarters: " + visitor_qtrs + "\n " + str(NBA_event_data_json['boxscore']['teams'][0]['statistics'][15]['displayValue']) + " Technicals, " + str(NBA_event_data_json['boxscore']['teams'][0]['statistics'][17]['displayValue']) + " Flagrant Fouls, " + str(NBA_event_data_json['boxscore']['teams'][0]['statistics'][22]['displayValue']) + " Largest Lead, " + str(NBA_event_data_json['boxscore']['teams'][0]['statistics'][18]['displayValue']) + " Points off Turnovers, " + str(NBA_event_data_json['boxscore']['teams'][0]['statistics'][19]['displayValue']) + " Fast Break Points, " + str(NBA_event_data_json['boxscore']['teams'][0]['statistics'][20]['displayValue']) + " Points in the Paint" + + arena = NBA_data_json['events'][game_number]['competitions'][0]['venue']['fullName'] + game_status = NBA_data_json['events'][game_number]['status']['type']['detail'] + try: + headline = NBA_data_json['events'][game_number]['competitions'][0]['headlines'][0]['shortLinkText'] + except: + headline = "" + try: + notes = NBA_data_json['events'][game_number]['competitions'][0]['notes'][0]['headline'] + except: + notes="" + try: + series = NBA_data_json['events'][game_number]['competitions'][0]['series']['summary'] + notes = notes + ", " + series + except: + pass + + try: + article = NBA_event_data_json['article']['story'] + except: + article = "" + if article != "": + article = re.sub(r'<.*?>', '', article) + article = re.sub(' +', ' ', article) + article = re.sub('\r', '', article) + article = re.sub('\n\n\n ', '\n', article) + + visitor_len = len(visitor + " " + str(visitor_score)) + home_len = len(home + " " + str(home_score)) + if visitor_len > home_len: + visitor_add_spc = "" + home_add_spc = " " * (visitor_len - home_len) + else: + home_add_spc = "" + visitor_add_spc = " " * (home_len - visitor_len) + + print(visitor, " " + visitor_add_spc, visitor_score) + print(home, " " + home_add_spc, home_score, game_status, arena) + if notes != "": + print(notes) + if headline != "": + print(headline + "\n") + else: + print() + + console.print(visitor_player_stats) + print() + print(visitor_extra_stats) + print() + console.print(home_player_stats) + print() + print(home_extra_stats) + + if article != "": + print() + print(article) + print() + +def NBA_in_progress(game_number): + + arena = NBA_data_json['events'][game_number]['competitions'][0]['venue']['fullName'] + home = NBA_data_json['events'][game_number]['competitions'][0]['competitors'][0]['team']['displayName'] + home_score = NBA_data_json['events'][game_number]['competitions'][0]['competitors'][0]['score'] + home_rebounds = NBA_data_json['events'][game_number]['competitions'][0]['competitors'][0]['statistics'][0]['displayValue'] + home_assists = NBA_data_json['events'][game_number]['competitions'][0]['competitors'][0]['statistics'][2]['displayValue'] + home_fg_pct = NBA_data_json['events'][game_number]['competitions'][0]['competitors'][0]['statistics'][5]['displayValue'] + home_ft_pct = NBA_data_json['events'][game_number]['competitions'][0]['competitors'][0]['statistics'][6]['displayValue'] + home_3pt_pct = NBA_data_json['events'][game_number]['competitions'][0]['competitors'][0]['statistics'][15]['displayValue'] + home_3pt_made = NBA_data_json['events'][game_number]['competitions'][0]['competitors'][0]['statistics'][12]['displayValue'] + home_3pt_att = NBA_data_json['events'][game_number]['competitions'][0]['competitors'][0]['statistics'][11]['displayValue'] + home_fgm = NBA_data_json['events'][game_number]['competitions'][0]['competitors'][0]['statistics'][4]['displayValue'] + home_fga = NBA_data_json['events'][game_number]['competitions'][0]['competitors'][0]['statistics'][3]['displayValue'] + home_ftm = NBA_data_json['events'][game_number]['competitions'][0]['competitors'][0]['statistics'][8]['displayValue'] + home_fta = NBA_data_json['events'][game_number]['competitions'][0]['competitors'][0]['statistics'][7]['displayValue'] + try: + home_leader_0 = NBA_data_json['events'][game_number]['competitions'][0]['competitors'][0]['leaders'][0]['shortDisplayName'] + home_leader_0_stat = NBA_data_json['events'][game_number]['competitions'][0]['competitors'][0]['leaders'][0]['leaders'][0]['displayValue'] + home_leader_0_player = NBA_data_json['events'][game_number]['competitions'][0]['competitors'][0]['leaders'][0]['leaders'][0]['athlete']['displayName'] + home_leader_1 = NBA_data_json['events'][game_number]['competitions'][0]['competitors'][0]['leaders'][1]['shortDisplayName'] + home_leader_1_stat = NBA_data_json['events'][game_number]['competitions'][0]['competitors'][0]['leaders'][1]['leaders'][0]['displayValue'] + home_leader_1_player = NBA_data_json['events'][game_number]['competitions'][0]['competitors'][0]['leaders'][1]['leaders'][0]['athlete']['displayName'] + home_leader_2 = NBA_data_json['events'][game_number]['competitions'][0]['competitors'][0]['leaders'][2]['shortDisplayName'] + home_leader_2_stat = NBA_data_json['events'][game_number]['competitions'][0]['competitors'][0]['leaders'][2]['leaders'][0]['displayValue'] + home_leader_2_player = NBA_data_json['events'][game_number]['competitions'][0]['competitors'][0]['leaders'][2]['leaders'][0]['athlete']['displayName'] + home_leader_status = " " + except: + home_leader_status = "" + home_record = NBA_data_json['events'][game_number]['competitions'][0]['competitors'][0]['records'][0]['summary'] + visitor = NBA_data_json['events'][game_number]['competitions'][0]['competitors'][1]['team']['displayName'] + visitor_score = NBA_data_json['events'][game_number]['competitions'][0]['competitors'][1]['score'] + try: + visitor_leader_0 = NBA_data_json['events'][game_number]['competitions'][0]['competitors'][1]['leaders'][0]['shortDisplayName'] + visitor_leader_0_stat = NBA_data_json['events'][game_number]['competitions'][0]['competitors'][1]['leaders'][0]['leaders'][0]['displayValue'] + visitor_leader_0_player = NBA_data_json['events'][game_number]['competitions'][0]['competitors'][1]['leaders'][0]['leaders'][0]['athlete']['displayName'] + visitor_leader_1 = NBA_data_json['events'][game_number]['competitions'][0]['competitors'][1]['leaders'][1]['shortDisplayName'] + visitor_leader_1_stat = NBA_data_json['events'][game_number]['competitions'][0]['competitors'][1]['leaders'][1]['leaders'][0]['displayValue'] + visitor_leader_1_player = NBA_data_json['events'][game_number]['competitions'][0]['competitors'][1]['leaders'][1]['leaders'][0]['athlete']['displayName'] + visitor_leader_2 = NBA_data_json['events'][game_number]['competitions'][0]['competitors'][1]['leaders'][2]['shortDisplayName'] + visitor_leader_2_stat = NBA_data_json['events'][game_number]['competitions'][0]['competitors'][1]['leaders'][2]['leaders'][0]['displayValue'] + visitor_leader_2_player = NBA_data_json['events'][game_number]['competitions'][0]['competitors'][1]['leaders'][2]['leaders'][0]['athlete']['displayName'] + visitor_leader_status = " " + except: + visitor_leader_status = "" + visitor_rebounds = NBA_data_json['events'][game_number]['competitions'][0]['competitors'][1]['statistics'][0]['displayValue'] + visitor_assists = NBA_data_json['events'][game_number]['competitions'][0]['competitors'][1]['statistics'][2]['displayValue'] + visitor_fg_pct = NBA_data_json['events'][game_number]['competitions'][0]['competitors'][1]['statistics'][5]['displayValue'] + visitor_ft_pct = NBA_data_json['events'][game_number]['competitions'][0]['competitors'][1]['statistics'][6]['displayValue'] + visitor_3pt_pct = NBA_data_json['events'][game_number]['competitions'][0]['competitors'][1]['statistics'][15]['displayValue'] + visitor_3pt_made = NBA_data_json['events'][game_number]['competitions'][0]['competitors'][1]['statistics'][12]['displayValue'] + visitor_3pt_att = NBA_data_json['events'][game_number]['competitions'][0]['competitors'][1]['statistics'][11]['displayValue'] + visitor_fgm = NBA_data_json['events'][game_number]['competitions'][0]['competitors'][1]['statistics'][4]['displayValue'] + visitor_fga = NBA_data_json['events'][game_number]['competitions'][0]['competitors'][1]['statistics'][3]['displayValue'] + visitor_ftm = NBA_data_json['events'][game_number]['competitions'][0]['competitors'][1]['statistics'][8]['displayValue'] + visitor_fta = NBA_data_json['events'][game_number]['competitions'][0]['competitors'][1]['statistics'][7]['displayValue'] + visitor_record = NBA_data_json['events'][game_number]['competitions'][0]['competitors'][1]['records'][0]['summary'] + game_status = NBA_data_json['events'][game_number]['status']['type']['detail'] + home_short = NBA_data_json['events'][game_number]['competitions'][0]['competitors'][0]['team']['shortDisplayName'] + visitor_short = NBA_data_json['events'][game_number]['competitions'][0]['competitors'][1]['team']['shortDisplayName'] + try: + broadcast = NBA_data_json['events'][game_number]['competitions'][0]['broadcasts'][0]['names'][0] + except: + broadcast = "No Nat'l TV" + try: + notes = NBA_data_json['events'][game_number]['competitions'][0]['notes'][0]['headline'] + except: + notes="" + try: + series = NBA_data_json['events'][game_number]['competitions'][0]['series']['summary'] + notes = notes + ", " + series + except: + pass + visitor_len = len(visitor+" ("+visitor_record+") "+visitor_score) + home_len = len(home+" ("+home_record+") "+home_score) + if visitor_len > home_len: + visitor_add_spc = "" + home_add_spc = " " * (visitor_len - home_len) + else: + home_add_spc = "" + visitor_add_spc = " " * (home_len - visitor_len) + print(visitor, "("+visitor_record+") "+visitor_add_spc, visitor_score) + print(home, "("+home_record+") "+home_add_spc, home_score) + print(game_status+",", arena+",", broadcast) + if notes != "": + print(notes) + print(" "+visitor_short+":", str(visitor_fgm)+"/"+str(visitor_fga), visitor_fg_pct, "FG%,", str(visitor_3pt_made)+"/"+str(visitor_3pt_att), visitor_3pt_pct, "3PT%,", str(visitor_ftm)+"/"+str(visitor_fta), visitor_ft_pct, "FT%,", visitor_rebounds, "Reb,", visitor_assists, "Ast") + if visitor_leader_status != "": + print(" "+visitor_leader_0_player, visitor_leader_0_stat, visitor_leader_0+",", visitor_leader_1_player, visitor_leader_1_stat, visitor_leader_1+",", visitor_leader_2_player, visitor_leader_2_stat, visitor_leader_2) + else: + print() + print(" "+home_short+":", str(home_fgm)+"/"+str(home_fga), home_fg_pct, "FG%,", str(home_3pt_made)+"/"+str(home_3pt_att), home_3pt_pct, "3PT%,", str(home_ftm)+"/"+str(home_fta), home_ft_pct, "FT%,", home_rebounds, "Reb,", home_assists, "Ast") + if home_leader_status != "": + print(" "+home_leader_0_player, home_leader_0_stat, home_leader_0+",", home_leader_1_player, home_leader_1_stat, home_leader_1+",", home_leader_2_player, home_leader_2_stat, home_leader_2, "\n") + else: + print() + +def NBA_pre_game(game_number): + + arena = NBA_data_json['events'][game_number]['competitions'][0]['venue']['fullName'] + home = NBA_data_json['events'][game_number]['competitions'][0]['competitors'][0]['team']['displayName'] + home_rebounds = NBA_data_json['events'][game_number]['competitions'][0]['competitors'][0]['statistics'][1]['displayValue'] + home_assists = NBA_data_json['events'][game_number]['competitions'][0]['competitors'][0]['statistics'][14]['displayValue'] + home_points = NBA_data_json['events'][game_number]['competitions'][0]['competitors'][0]['statistics'][13]['displayValue'] + home_fg_pct = NBA_data_json['events'][game_number]['competitions'][0]['competitors'][0]['statistics'][5]['displayValue'] + home_ft_pct = NBA_data_json['events'][game_number]['competitions'][0]['competitors'][0]['statistics'][6]['displayValue'] + home_3pt_pct = NBA_data_json['events'][game_number]['competitions'][0]['competitors'][0]['statistics'][15]['displayValue'] + home_leader_0 = NBA_data_json['events'][game_number]['competitions'][0]['competitors'][0]['leaders'][0]['shortDisplayName'] + home_leader_0_stat = NBA_data_json['events'][game_number]['competitions'][0]['competitors'][0]['leaders'][0]['leaders'][0]['displayValue'] + home_leader_0_player = NBA_data_json['events'][game_number]['competitions'][0]['competitors'][0]['leaders'][0]['leaders'][0]['athlete']['displayName'] + home_leader_1 = NBA_data_json['events'][game_number]['competitions'][0]['competitors'][0]['leaders'][1]['shortDisplayName'] + home_leader_1_stat = NBA_data_json['events'][game_number]['competitions'][0]['competitors'][0]['leaders'][1]['leaders'][0]['displayValue'] + home_leader_1_player = NBA_data_json['events'][game_number]['competitions'][0]['competitors'][0]['leaders'][1]['leaders'][0]['athlete']['displayName'] + home_leader_2 = NBA_data_json['events'][game_number]['competitions'][0]['competitors'][0]['leaders'][2]['shortDisplayName'] + home_leader_2_stat = NBA_data_json['events'][game_number]['competitions'][0]['competitors'][0]['leaders'][2]['leaders'][0]['displayValue'] + home_leader_2_player = NBA_data_json['events'][game_number]['competitions'][0]['competitors'][0]['leaders'][2]['leaders'][0]['athlete']['displayName'] + home_record = NBA_data_json['events'][game_number]['competitions'][0]['competitors'][0]['records'][0]['summary'] + visitor = NBA_data_json['events'][game_number]['competitions'][0]['competitors'][1]['team']['displayName'] + visitor_leader_0 = NBA_data_json['events'][game_number]['competitions'][0]['competitors'][1]['leaders'][0]['shortDisplayName'] + visitor_leader_0_stat = NBA_data_json['events'][game_number]['competitions'][0]['competitors'][1]['leaders'][0]['leaders'][0]['displayValue'] + visitor_leader_0_player = NBA_data_json['events'][game_number]['competitions'][0]['competitors'][1]['leaders'][0]['leaders'][0]['athlete']['displayName'] + visitor_leader_1 = NBA_data_json['events'][game_number]['competitions'][0]['competitors'][1]['leaders'][1]['shortDisplayName'] + visitor_leader_1_stat = NBA_data_json['events'][game_number]['competitions'][0]['competitors'][1]['leaders'][1]['leaders'][0]['displayValue'] + visitor_leader_1_player = NBA_data_json['events'][game_number]['competitions'][0]['competitors'][1]['leaders'][1]['leaders'][0]['athlete']['displayName'] + visitor_leader_2 = NBA_data_json['events'][game_number]['competitions'][0]['competitors'][1]['leaders'][2]['shortDisplayName'] + visitor_leader_2_stat = NBA_data_json['events'][game_number]['competitions'][0]['competitors'][1]['leaders'][2]['leaders'][0]['displayValue'] + visitor_leader_2_player = NBA_data_json['events'][game_number]['competitions'][0]['competitors'][1]['leaders'][2]['leaders'][0]['athlete']['displayName'] + visitor_rebounds = NBA_data_json['events'][game_number]['competitions'][0]['competitors'][1]['statistics'][1]['displayValue'] + visitor_assists = NBA_data_json['events'][game_number]['competitions'][0]['competitors'][1]['statistics'][14]['displayValue'] + visitor_points = NBA_data_json['events'][game_number]['competitions'][0]['competitors'][1]['statistics'][13]['displayValue'] + visitor_fg_pct = NBA_data_json['events'][game_number]['competitions'][0]['competitors'][1]['statistics'][5]['displayValue'] + visitor_ft_pct = NBA_data_json['events'][game_number]['competitions'][0]['competitors'][1]['statistics'][6]['displayValue'] + visitor_3pt_pct = NBA_data_json['events'][game_number]['competitions'][0]['competitors'][1]['statistics'][15]['displayValue'] + visitor_record = NBA_data_json['events'][game_number]['competitions'][0]['competitors'][1]['records'][0]['summary'] + game_status = NBA_data_json['events'][game_number]['status']['type']['detail'] + home_short = NBA_data_json['events'][game_number]['competitions'][0]['competitors'][0]['team']['shortDisplayName'] + visitor_short = NBA_data_json['events'][game_number]['competitions'][0]['competitors'][1]['team']['shortDisplayName'] + try: + broadcast = NBA_data_json['events'][game_number]['competitions'][0]['broadcasts'][0]['names'][0] + except: + broadcast = "No Nat'l TV" + try: + odds = NBA_data_json['events'][game_number]['competitions'][0]['odds'][0]['details'] + except: + odds="" + try: + notes = NBA_data_json['events'][game_number]['competitions'][0]['notes'][0]['headline'] + except: + notes="" + try: + series = NBA_data_json['events'][game_number]['competitions'][0]['series']['summary'] + notes = notes + ", " + series + except: + pass + print(visitor, "("+visitor_record+")", "at", home, "("+home_record+")", "\n", visitor_short+":", visitor_fg_pct, "FG%,", visitor_3pt_pct, "3PT%,", visitor_ft_pct, "FT%,", visitor_points, "PPG,", visitor_rebounds, "RPG,", visitor_assists, "APG,", "\n", visitor_leader_0_player, visitor_leader_0_stat, visitor_leader_0+",", visitor_leader_1_player, visitor_leader_1_stat, visitor_leader_1+",", visitor_leader_2_player, visitor_leader_2_stat, visitor_leader_2, "\n", home_short+":", home_fg_pct, "FG%,", home_3pt_pct, "3PT%,", home_ft_pct, "FT%,", home_points, "PPG,", home_rebounds, "RPG,", home_assists, "APG,", "\n", home_leader_0_player, home_leader_0_stat, home_leader_0+",", home_leader_1_player, home_leader_1_stat, home_leader_1+",", home_leader_2_player, home_leader_2_stat, home_leader_2, "\n", game_status+",", arena+",", broadcast) + if notes != "": + print(" " + notes) + print(" LINE:", odds, "\n") + +#Mainline + +if len(sys.argv) == 2: + date_arg = str(sys.argv[1]) + url = "http://site.api.espn.com/apis/site/v2/sports/basketball/nba/scoreboard?dates=" + date_arg + "-" + date_arg + try: + game_date = datetime.datetime(int(date_arg[0:4]), int(date_arg[4:6]), int(date_arg[6:8])) + except: + print("Incorrect date format, use YYYYMMDD format.") + exit() + print("----------------------------------------------------------------------") + print("Games of " + game_date.strftime("%B %-d, %Y")) + print() +elif len(sys.argv) == 3: + date1_arg = str(sys.argv[1]) + date2_arg = str(sys.argv[2]) + url = "http://site.api.espn.com/apis/site/v2/sports/basketball/nba/scoreboard?dates=" + date1_arg + "-" + date2_arg + try: + game1_date = datetime.datetime(int(date1_arg[0:4]), int(date1_arg[4:6]), int(date1_arg[6:8])) + except: + print("Incorrect date format, use YYYYMMDD format.") + exit() + try: + game2_date = datetime.datetime(int(date2_arg[0:4]), int(date2_arg[4:6]), int(date2_arg[6:8])) + except: + print("Incorrect date format, use YYYYMMDD format.") + exit() + print("----------------------------------------------------------------------") + print("Games of " + game1_date.strftime("%B %-d, %Y") + " through " + game2_date.strftime("%B %-d, %Y")) + print() +else: + url = "http://site.api.espn.com/apis/site/v2/sports/basketball/nba/scoreboard" + +try: + NBA_today = urlopen(url) +except: + print("No games on this date, or use earlier date first if entering two dates.") + exit() + +NBA_data_json = json.loads(NBA_today.read()) + +for game in range(0, 25): + try: + game_state = NBA_data_json['events'][game]['status']['type']['state'] + if game_state == "post": + NBA_post_game(game) + elif game_state == "in": + NBA_in_progress(game) + else: + NBA_pre_game(game) + except IndexError: + continue diff --git a/deathclock/ESPNNFLAPIBoxScores.py b/deathclock/ESPNNFLAPIBoxScores.py new file mode 100644 index 0000000..f86fff1 --- /dev/null +++ b/deathclock/ESPNNFLAPIBoxScores.py @@ -0,0 +1,672 @@ +from urllib.request import urlopen +import json +import sys +import datetime +import re +from rich.console import Console +from rich.table import Table + +#Summary: mainline code at bottom, call the ESPN NFL Scoreboard API to get current list of games; +#There are 4 possible statuses for each game, post-game, during the game, pre-game, or other, usually a game in postponement, +#for which there will be such a status posted, but otherwise default to pre-game status. +#Then, the game is sent to one of three def's, which will then make another API call for that particular "event", in API terminology. +#At this point, there are two active Python dictionaries converted from the JSON data retunred from the API calls: +#1. NFL_data_json, the global dictionary for all games, from which a few stats are pulled, +#2. NFL_event_data_json, the detailed stats for that particular game being readied for display. +#Within each def, appropriate stats are pulled from the appropriate dictionary, and Python strings are built for display. +#Because Python/Linux display options are far too limited, the Raspberry Pi ticker idea was abandoned, +#so these stats are dumped to the terminal for viewing or redirection. +#Usage: python3 ESPNNFLAPIBoxScores.py YYYYMMDD Date parameter optional, 1 day allowed only, otherwise get games on current scoreboard +#IMPORTANT: +#The rich text library must be installed, run the command "pip install rich" if necessary. + +#This project is posted under the GNU General Public License v3.0. If you intend to sell a product based on this code, or release a modified version of this code to the public, that code must also carry this license & be released to the public as open source. + +def NFL_post_game(game_number): + + #Make event API call & transfer to dictionary. Note that the game number, or id, is passed into the def for the API call + + url_event = "http://site.api.espn.com/apis/site/v2/sports/football/nfl/summary?event=" + NFL_data_json['events'][game_number]['id'] + NFL_event = urlopen(url_event) + NFL_event_data_json = json.loads(NFL_event.read()) + + console = Console() + + try: + team_stats = Table(box=None, header_style="default") + team_stats.add_column("") + team_stats.add_column(NFL_event_data_json['boxscore']['teams'][0]['team']['abbreviation'], justify="right") + team_stats.add_column(NFL_event_data_json['boxscore']['teams'][1]['team']['abbreviation'], justify="right") + team_stats.add_row("1st Downs", NFL_event_data_json['boxscore']['teams'][0]['statistics'][0]['displayValue'], NFL_event_data_json['boxscore']['teams'][1]['statistics'][0]['displayValue']) + team_stats.add_row("Rushing", NFL_event_data_json['boxscore']['teams'][0]['statistics'][16]['displayValue'] + "-" + NFL_event_data_json['boxscore']['teams'][0]['statistics'][15]['displayValue'], NFL_event_data_json['boxscore']['teams'][1]['statistics'][16]['displayValue'] + "-" + NFL_event_data_json['boxscore']['teams'][1]['statistics'][15]['displayValue']) + team_stats.add_row("Passing", NFL_event_data_json['boxscore']['teams'][0]['statistics'][11]['displayValue'], NFL_event_data_json['boxscore']['teams'][1]['statistics'][11]['displayValue']) + team_stats.add_row("Passing Yds", NFL_event_data_json['boxscore']['teams'][0]['statistics'][10]['displayValue'], NFL_event_data_json['boxscore']['teams'][1]['statistics'][10]['displayValue']) + team_stats.add_row("Total Yds", NFL_event_data_json['boxscore']['teams'][0]['statistics'][7]['displayValue'], NFL_event_data_json['boxscore']['teams'][1]['statistics'][7]['displayValue']) + team_stats.add_row("Had Intercepted", NFL_event_data_json['boxscore']['teams'][0]['statistics'][13]['displayValue'], NFL_event_data_json['boxscore']['teams'][1]['statistics'][13]['displayValue']) + team_stats.add_row("Fumbles Lost", NFL_event_data_json['boxscore']['teams'][0]['statistics'][21]['displayValue'], NFL_event_data_json['boxscore']['teams'][1]['statistics'][21]['displayValue']) + team_stats.add_row("Sacked-Yds Lost", NFL_event_data_json['boxscore']['teams'][0]['statistics'][14]['displayValue'], NFL_event_data_json['boxscore']['teams'][1]['statistics'][14]['displayValue']) + team_stats.add_row("3rd Down Conversions", NFL_event_data_json['boxscore']['teams'][0]['statistics'][4]['displayValue'], NFL_event_data_json['boxscore']['teams'][1]['statistics'][4]['displayValue']) + team_stats.add_row("4th Down Conversions", NFL_event_data_json['boxscore']['teams'][0]['statistics'][5]['displayValue'], NFL_event_data_json['boxscore']['teams'][1]['statistics'][5]['displayValue']) + team_stats.add_row("Penalties", NFL_event_data_json['boxscore']['teams'][0]['statistics'][19]['displayValue'], NFL_event_data_json['boxscore']['teams'][1]['statistics'][19]['displayValue']) + team_stats.add_row("Total Plays", NFL_event_data_json['boxscore']['teams'][0]['statistics'][6]['displayValue'], NFL_event_data_json['boxscore']['teams'][1]['statistics'][6]['displayValue']) + team_stats.add_row("Time of Possession", NFL_event_data_json['boxscore']['teams'][0]['statistics'][24]['displayValue'], NFL_event_data_json['boxscore']['teams'][1]['statistics'][24]['displayValue']) + except: + team_stats = "" + + home_passing = " Passing: " + for player in range(0, 3): + try: + home_passing = home_passing + NFL_event_data_json['boxscore']['players'][1]['statistics'][0]['athletes'][player]['athlete']['displayName'] + " " + NFL_event_data_json['boxscore']['players'][1]['statistics'][0]['athletes'][player]['stats'][0] + ", " + NFL_event_data_json['boxscore']['players'][1]['statistics'][0]['athletes'][player]['stats'][1] + " Yds, " + NFL_event_data_json['boxscore']['players'][1]['statistics'][0]['athletes'][player]['stats'][3] + " TD, " + NFL_event_data_json['boxscore']['players'][1]['statistics'][0]['athletes'][player]['stats'][4] + " Int, " + NFL_event_data_json['boxscore']['players'][1]['statistics'][0]['athletes'][player]['stats'][6] + " Rtg, " + except IndexError: + continue + home_passing = home_passing[:-2] #Strip last comma & space + + home_rushing = " Rushing: " + for player in range(0, 7): + try: + home_rushing = home_rushing + NFL_event_data_json['boxscore']['players'][1]['statistics'][1]['athletes'][player]['athlete']['displayName'] + " " + NFL_event_data_json['boxscore']['players'][1]['statistics'][1]['athletes'][player]['stats'][0] + " Carries, " + NFL_event_data_json['boxscore']['players'][1]['statistics'][1]['athletes'][player]['stats'][1] + " Yds, " + NFL_event_data_json['boxscore']['players'][1]['statistics'][1]['athletes'][player]['stats'][3] + " TD, " + NFL_event_data_json['boxscore']['players'][1]['statistics'][1]['athletes'][player]['stats'][4] + " Long, " + except IndexError: + continue + home_rushing = home_rushing[:-2] + + home_receiving = " Receiving: " + for player in range(0, 10): + try: + home_receiving = home_receiving + NFL_event_data_json['boxscore']['players'][1]['statistics'][2]['athletes'][player]['athlete']['displayName'] + " " + NFL_event_data_json['boxscore']['players'][1]['statistics'][2]['athletes'][player]['stats'][0] + " Receptions, " + NFL_event_data_json['boxscore']['players'][1]['statistics'][2]['athletes'][player]['stats'][1] + " Yds, " + NFL_event_data_json['boxscore']['players'][1]['statistics'][2]['athletes'][player]['stats'][3] + " TD, " + NFL_event_data_json['boxscore']['players'][1]['statistics'][2]['athletes'][player]['stats'][4] + " Long, " + NFL_event_data_json['boxscore']['players'][1]['statistics'][2]['athletes'][player]['stats'][5] + " Tgt, " + except IndexError: + continue + home_receiving = home_receiving[:-2] + + home_punting = " Punting: " + for player in range(0, 10): + try: + home_punting = home_punting + NFL_event_data_json['boxscore']['players'][1]['statistics'][9]['athletes'][player]['athlete']['displayName'] + " " + NFL_event_data_json['boxscore']['players'][1]['statistics'][9]['athletes'][player]['stats'][0] + " Punt, " + NFL_event_data_json['boxscore']['players'][1]['statistics'][9]['athletes'][player]['stats'][1] + " Yds, " + NFL_event_data_json['boxscore']['players'][1]['statistics'][9]['athletes'][player]['stats'][2] + " Avg, " + NFL_event_data_json['boxscore']['players'][1]['statistics'][9]['athletes'][player]['stats'][5] + " Long, " + except IndexError: + continue + if home_punting == " Punting: ": + home_punting = home_punting + "None" + else: + home_punting = home_punting[:-2] + + home_punt_return = " Punt Returns: " + for player in range(0, 10): + try: + home_punt_return = home_punt_return + NFL_event_data_json['boxscore']['players'][1]['statistics'][7]['athletes'][player]['athlete']['displayName'] + " " + NFL_event_data_json['boxscore']['players'][1]['statistics'][7]['athletes'][player]['stats'][0] + " Return, " + NFL_event_data_json['boxscore']['players'][1]['statistics'][7]['athletes'][player]['stats'][1] + " Yds, " + NFL_event_data_json['boxscore']['players'][1]['statistics'][7]['athletes'][player]['stats'][3] + " Long, " + except IndexError: + continue + if home_punt_return == " Punt Returns: ": + home_punt_return = home_punt_return + "None" + else: + home_punt_return = home_punt_return[:-2] + + home_kick_return = " Kick Returns: " + for player in range(0, 10): + try: + home_kick_return = home_kick_return + NFL_event_data_json['boxscore']['players'][1]['statistics'][6]['athletes'][player]['athlete']['displayName'] + " " + NFL_event_data_json['boxscore']['players'][1]['statistics'][6]['athletes'][player]['stats'][0] + " Return, " + NFL_event_data_json['boxscore']['players'][1]['statistics'][6]['athletes'][player]['stats'][1] + " Yds, " + NFL_event_data_json['boxscore']['players'][1]['statistics'][6]['athletes'][player]['stats'][3] + " Long, " + except IndexError: + continue + if home_kick_return == " Kick Returns: ": + home_kick_return = home_kick_return + "None" + else: + home_kick_return = home_kick_return[:-2] + + home_interceptions = " Interceptions: " + for player in range(0, 10): + try: + home_interceptions = home_interceptions + NFL_event_data_json['boxscore']['players'][1]['statistics'][5]['athletes'][player]['athlete']['displayName'] + " " + NFL_event_data_json['boxscore']['players'][1]['statistics'][5]['athletes'][player]['stats'][0] + " Interception, " + NFL_event_data_json['boxscore']['players'][1]['statistics'][5]['athletes'][player]['stats'][1] + " Yds, " + except IndexError: + continue + if home_interceptions == " Interceptions: ": + home_interceptions = home_interceptions + "None" + else: + home_interceptions = home_interceptions[:-2] + + try: + home_def_stats = Table(box=None, header_style="default") + home_def_stats.add_column("Defensive Stats") + home_def_stats.add_column("Tkls", justify="right") + home_def_stats.add_column("Solo", justify="right") + home_def_stats.add_column("Sacks", justify="right") + home_def_stats.add_column("TFL", justify="right") + home_def_stats.add_column("PD", justify="right") + home_def_stats.add_column("QB Hit", justify="right") + home_def_stats.add_column("TDs", justify="right") + for player in range (0, 50): + try: + home_def_stats.add_row(NFL_event_data_json['boxscore']['players'][1]['statistics'][4]['athletes'][player]['athlete']['displayName'], NFL_event_data_json['boxscore']['players'][1]['statistics'][4]['athletes'][player]['stats'][0], NFL_event_data_json['boxscore']['players'][1]['statistics'][4]['athletes'][player]['stats'][1], NFL_event_data_json['boxscore']['players'][1]['statistics'][4]['athletes'][player]['stats'][2], NFL_event_data_json['boxscore']['players'][1]['statistics'][4]['athletes'][player]['stats'][3], NFL_event_data_json['boxscore']['players'][1]['statistics'][4]['athletes'][player]['stats'][4], NFL_event_data_json['boxscore']['players'][1]['statistics'][4]['athletes'][player]['stats'][5], NFL_event_data_json['boxscore']['players'][1]['statistics'][4]['athletes'][player]['stats'][6]) + except IndexError: + continue + except: + home_def_stats = "" + + visitor_passing = " Passing: " + for player in range(0, 3): + try: + visitor_passing = visitor_passing + NFL_event_data_json['boxscore']['players'][0]['statistics'][0]['athletes'][player]['athlete']['displayName'] + " " + NFL_event_data_json['boxscore']['players'][0]['statistics'][0]['athletes'][player]['stats'][0] + ", " + NFL_event_data_json['boxscore']['players'][0]['statistics'][0]['athletes'][player]['stats'][1] + " Yds, " + NFL_event_data_json['boxscore']['players'][0]['statistics'][0]['athletes'][player]['stats'][3] + " TD, " + NFL_event_data_json['boxscore']['players'][0]['statistics'][0]['athletes'][player]['stats'][4] + " Int, " + NFL_event_data_json['boxscore']['players'][0]['statistics'][0]['athletes'][player]['stats'][6] + " Rtg, " + except IndexError: + continue + visitor_passing = visitor_passing[:-2] + + visitor_rushing = " Rushing: " + for player in range(0, 7): + try: + visitor_rushing = visitor_rushing + NFL_event_data_json['boxscore']['players'][0]['statistics'][1]['athletes'][player]['athlete']['displayName'] + " " + NFL_event_data_json['boxscore']['players'][0]['statistics'][1]['athletes'][player]['stats'][0] + " Carries, " + NFL_event_data_json['boxscore']['players'][0]['statistics'][1]['athletes'][player]['stats'][1] + " Yds, " + NFL_event_data_json['boxscore']['players'][0]['statistics'][1]['athletes'][player]['stats'][3] + " TD, " + NFL_event_data_json['boxscore']['players'][0]['statistics'][1]['athletes'][player]['stats'][4] + " Long, " + except IndexError: + continue + visitor_rushing = visitor_rushing[:-2] + + visitor_receiving = " Receiving: " + for player in range(0, 10): + try: + visitor_receiving = visitor_receiving + NFL_event_data_json['boxscore']['players'][0]['statistics'][2]['athletes'][player]['athlete']['displayName'] + " " + NFL_event_data_json['boxscore']['players'][0]['statistics'][2]['athletes'][player]['stats'][0] + " Receptions, " + NFL_event_data_json['boxscore']['players'][0]['statistics'][2]['athletes'][player]['stats'][1] + " Yds, " + NFL_event_data_json['boxscore']['players'][0]['statistics'][2]['athletes'][player]['stats'][3] + " TD, " + NFL_event_data_json['boxscore']['players'][0]['statistics'][2]['athletes'][player]['stats'][4] + " Long, " + NFL_event_data_json['boxscore']['players'][0]['statistics'][2]['athletes'][player]['stats'][5] + " Tgt, " + except IndexError: + continue + visitor_receiving = visitor_receiving[:-2] + + visitor_punting = " Punting: " + for player in range(0, 10): + try: + visitor_punting = visitor_punting + NFL_event_data_json['boxscore']['players'][0]['statistics'][9]['athletes'][player]['athlete']['displayName'] + " " + NFL_event_data_json['boxscore']['players'][0]['statistics'][9]['athletes'][player]['stats'][0] + " Punt, " + NFL_event_data_json['boxscore']['players'][0]['statistics'][9]['athletes'][player]['stats'][1] + " Yds, " + NFL_event_data_json['boxscore']['players'][0]['statistics'][9]['athletes'][player]['stats'][2] + " Avg, " + NFL_event_data_json['boxscore']['players'][0]['statistics'][9]['athletes'][player]['stats'][5] + " Long, " + except IndexError: + continue + if visitor_punting == " Punting: ": + visitor_punting = visitor_punting + "None" + else: + visitor_punting = visitor_punting[:-2] + + visitor_punt_return = " Punt Returns: " + for player in range(0, 10): + try: + visitor_punt_return = visitor_punt_return + NFL_event_data_json['boxscore']['players'][0]['statistics'][7]['athletes'][player]['athlete']['displayName'] + " " + NFL_event_data_json['boxscore']['players'][0]['statistics'][7]['athletes'][player]['stats'][0] + " Return, " + NFL_event_data_json['boxscore']['players'][0]['statistics'][7]['athletes'][player]['stats'][1] + " Yds, " + NFL_event_data_json['boxscore']['players'][0]['statistics'][7]['athletes'][player]['stats'][3] + " Long, " + except IndexError: + continue + if visitor_punt_return == " Punt Returns: ": + visitor_punt_return = visitor_punt_return + "None" + else: + visitor_punt_return = visitor_punt_return[:-2] + + visitor_kick_return = " Kick Returns: " + for player in range(0, 10): + try: + visitor_kick_return = visitor_kick_return + NFL_event_data_json['boxscore']['players'][0]['statistics'][6]['athletes'][player]['athlete']['displayName'] + " " + NFL_event_data_json['boxscore']['players'][0]['statistics'][6]['athletes'][player]['stats'][0] + " Return, " + NFL_event_data_json['boxscore']['players'][0]['statistics'][6]['athletes'][player]['stats'][1] + " Yds, " + NFL_event_data_json['boxscore']['players'][0]['statistics'][6]['athletes'][player]['stats'][3] + " Long, " + except IndexError: + continue + if visitor_kick_return == " Kick Returns: ": + visitor_kick_return = visitor_kick_return + "None" + else: + visitor_kick_return = visitor_kick_return[:-2] + + visitor_interceptions = " Interceptions: " + for player in range(0, 10): + try: + visitor_interceptions = visitor_interceptions + NFL_event_data_json['boxscore']['players'][0]['statistics'][5]['athletes'][player]['athlete']['displayName'] + " " + NFL_event_data_json['boxscore']['players'][0]['statistics'][5]['athletes'][player]['stats'][0] + " Interception, " + NFL_event_data_json['boxscore']['players'][0]['statistics'][5]['athletes'][player]['stats'][1] + " Yds, " + except IndexError: + continue + if visitor_interceptions == " Interceptions: ": + visitor_interceptions = visitor_interceptions + "None" + else: + visitor_interceptions = visitor_interceptions[:-2] + + try: + visitor_def_stats = Table(box=None, header_style="default") + visitor_def_stats.add_column("Defensive Stats") + visitor_def_stats.add_column("Tkls", justify="right") + visitor_def_stats.add_column("Solo", justify="right") + visitor_def_stats.add_column("Sacks", justify="right") + visitor_def_stats.add_column("TFL", justify="right") + visitor_def_stats.add_column("PD", justify="right") + visitor_def_stats.add_column("QB Hit", justify="right") + visitor_def_stats.add_column("TDs", justify="right") + for player in range (0, 50): + try: + visitor_def_stats.add_row(NFL_event_data_json['boxscore']['players'][0]['statistics'][4]['athletes'][player]['athlete']['displayName'], NFL_event_data_json['boxscore']['players'][0]['statistics'][4]['athletes'][player]['stats'][0], NFL_event_data_json['boxscore']['players'][0]['statistics'][4]['athletes'][player]['stats'][1], NFL_event_data_json['boxscore']['players'][0]['statistics'][4]['athletes'][player]['stats'][2], NFL_event_data_json['boxscore']['players'][0]['statistics'][4]['athletes'][player]['stats'][3], NFL_event_data_json['boxscore']['players'][0]['statistics'][4]['athletes'][player]['stats'][4], NFL_event_data_json['boxscore']['players'][0]['statistics'][4]['athletes'][player]['stats'][5], NFL_event_data_json['boxscore']['players'][0]['statistics'][4]['athletes'][player]['stats'][6]) + except IndexError: + continue + except: + visitor_def_stats = "" + + try: + home_qtrs = str(int(NFL_data_json['events'][game_number]['competitions'][0]['competitors'][0]['linescores'][0]['value'])) + " + " + str(int(NFL_data_json['events'][game_number]['competitions'][0]['competitors'][0]['linescores'][1]['value'])) + " + " + str(int(NFL_data_json['events'][game_number]['competitions'][0]['competitors'][0]['linescores'][2]['value'])) + " + " + str(int(NFL_data_json['events'][game_number]['competitions'][0]['competitors'][0]['linescores'][3]['value'])) + except: + home_qtrs = "" + + try: + home_ot = str(int(NFL_data_json['events'][game_number]['competitions'][0]['competitors'][0]['linescores'][4]['value'])) + except: + home_ot = " " + if home_ot != " ": + home_qtrs = home_qtrs + " + " + home_ot + + try: + visitor_qtrs = str(int(NFL_data_json['events'][game_number]['competitions'][0]['competitors'][1]['linescores'][0]['value'])) + " + " + str(int(NFL_data_json['events'][game_number]['competitions'][0]['competitors'][1]['linescores'][1]['value'])) + " + " + str(int(NFL_data_json['events'][game_number]['competitions'][0]['competitors'][1]['linescores'][2]['value'])) + " + " + str(int(NFL_data_json['events'][game_number]['competitions'][0]['competitors'][1]['linescores'][3]['value'])) + except: + visitor_qtrs = "" + + try: + visitor_ot = str(int(NFL_data_json['events'][game_number]['competitions'][0]['competitors'][1]['linescores'][4]['value'])) + except: + visitor_ot = " " + if visitor_ot != " ": + visitor_qtrs = visitor_qtrs + " + " + visitor_ot + + scoring_plays = " Scoring Plays:" + "\n " + for play in range(0,20): + try: + scoring_plays = scoring_plays + NFL_event_data_json['scoringPlays'][play]['team']['abbreviation'] + ": " + NFL_event_data_json['scoringPlays'][play]['text'].rstrip().lstrip() + ", Qtr " + str(NFL_event_data_json['scoringPlays'][play]['period']['number']) + ", " + NFL_event_data_json['scoringPlays'][play]['clock']['displayValue'] + "\n " + except IndexError: + continue + if scoring_plays != "Scoring Plays:\n": + scoring_plays = scoring_plays[:-2] + + drives_plays = " Drives & Play-by-play:\n" + for drive in range(0,50): + try: + drives_plays = drives_plays + " " + NFL_event_data_json['drives']['previous'][drive]['team']['abbreviation'] + " Drive: " + NFL_event_data_json['drives']['previous'][drive]['description'] + ", " + NFL_event_data_json['drives']['previous'][drive]['displayResult'] + ":\n" + for plays in range(0,25): + try: + play_down_dist = NFL_event_data_json['drives']['previous'][drive]['plays'][plays]['start']['downDistanceText'] + except: + play_down_dist = "" + try: + play_clock = NFL_event_data_json['drives']['previous'][drive]['plays'][plays]['clock']['displayValue'] + except: + play_clock = "" + try: + play_qtr = NFL_event_data_json['drives']['previous'][drive]['plays'][plays]['period']['number'] + except: + play_qtr = "" + if play_clock == "" or play_qtr == "": + if play_down_dist == "": + play_status = "" + else: + play_status = "(" + play_down_dist + ") " + else: + if play_down_dist == "": + play_status = "(" + play_clock + " - Qtr " + str(play_qtr) + ") " + else: + play_status = "(" + play_down_dist + ", " + play_clock + " - Qtr " + str(play_qtr) + ") " + try: + drives_plays = drives_plays + " " + play_status + NFL_event_data_json['drives']['previous'][drive]['plays'][plays]['text'] + "\n" + except IndexError: + continue + drives_plays = drives_plays + "\n" + except (IndexError, KeyError) as api_bad_data_problem: + continue + if drives_plays != " Drives & Play-by-play:\n": + drives_plays = drives_plays[:-2] + else: + drives_plays = "No play-by-play data available." + + try: + article = NFL_event_data_json['article']['story'] + except: + article = "" + if article != "": + article = re.sub(r'<.*?>', '', article) + article = re.sub(' +', ' ', article) + article = re.sub('\r', '', article) + article = re.sub('\n\n\n ', '\n', article) + + stadium = NFL_data_json['events'][game_number]['competitions'][0]['venue']['fullName'] + home = NFL_data_json['events'][game_number]['competitions'][0]['competitors'][0]['team']['displayName'] + home_score = NFL_data_json['events'][game_number]['competitions'][0]['competitors'][0]['score'] + visitor = NFL_data_json['events'][game_number]['competitions'][0]['competitors'][1]['team']['displayName'] + visitor_score = NFL_data_json['events'][game_number]['competitions'][0]['competitors'][1]['score'] + game_status = NFL_data_json['events'][game_number]['status']['type']['detail'] + try: + home_record = NFL_data_json['events'][game_number]['competitions'][0]['competitors'][0]['records'][0]['summary'] + visitor_record = NFL_data_json['events'][game_number]['competitions'][0]['competitors'][1]['records'][0]['summary'] + except: + home_record = "" + visitor_record = "" + try: + headline = NFL_data_json['events'][game_number]['competitions'][0]['headlines'][0]['shortLinkText'] + except: + headline = "" + + visitor_len = len(visitor+" ("+visitor_record+") "+" "+str(visitor_score)) + home_len = len(home+" ("+home_record+") "+" "+str(home_score)) + if visitor_len > home_len: + visitor_add_spc = "" + home_add_spc = " " * (visitor_len - home_len) + else: + home_add_spc = "" + visitor_add_spc = " " * (home_len - visitor_len) + + print(visitor, "("+visitor_record+") "+" "+visitor_add_spc, visitor_score) + print(home, "("+home_record+") "+" "+home_add_spc, home_score, game_status, stadium) + if headline != "": + print (" "+headline) + + print() + print(" Score by Quarters") + score_by_qtrs = Table(box=None, header_style="default") + score_by_qtrs.add_column(NFL_event_data_json['boxscore']['teams'][0]['team']['abbreviation']) + score_by_qtrs.add_column(visitor_qtrs) + score_by_qtrs.add_row(NFL_event_data_json['boxscore']['teams'][1]['team']['abbreviation'], home_qtrs) + console.print(score_by_qtrs) + print() + console.print(team_stats) + print() + if scoring_plays != "Scoring Plays:\n": + print(scoring_plays) + print() + print(" " + visitor + " Individual Stats:") + print(visitor_passing) + print(visitor_rushing) + print(visitor_receiving) + print(visitor_punting) + print(visitor_punt_return) + print(visitor_kick_return) + print(visitor_interceptions) + print() + console.print(visitor_def_stats) + print() + print(" " + home + " Individual Stats:") + print(home_passing) + print(home_rushing) + print(home_receiving) + print(home_punting) + print(home_punt_return) + print(home_kick_return) + print(home_interceptions) + print() + console.print(home_def_stats) + + if article != "": + print() + print(article) + print() + print(drives_plays) + print("----------------------------------------------------------------------") + print() + +def NFL_in_progress(game_number): + + url_event = "http://site.api.espn.com/apis/site/v2/sports/football/nfl/summary?event=" + NFL_data_json['events'][game_number]['id'] + NFL_event = urlopen(url_event) + NFL_event_data_json = json.loads(NFL_event.read()) + + try: + home_team_stats = " " + NFL_event_data_json['boxscore']['teams'][1]['team']['abbreviation'] + ": " + NFL_event_data_json['boxscore']['teams'][1]['statistics'][0]['displayValue'] + " " + NFL_event_data_json['boxscore']['teams'][1]['statistics'][0]['label'] + ", " + NFL_event_data_json['boxscore']['teams'][1]['statistics'][16]['displayValue'] + "-" + NFL_event_data_json['boxscore']['teams'][1]['statistics'][15]['displayValue'] + " Rushing, " + NFL_event_data_json['boxscore']['teams'][1]['statistics'][11]['displayValue'] + ", " + NFL_event_data_json['boxscore']['teams'][1]['statistics'][10]['displayValue'] + " Yds Passing, " + NFL_event_data_json['boxscore']['teams'][1]['statistics'][7]['displayValue'] + " Total Yds, " + NFL_event_data_json['boxscore']['teams'][1]['statistics'][13]['displayValue'] + " Int, " + NFL_event_data_json['boxscore']['teams'][1]['statistics'][14]['displayValue'] + " " + NFL_event_data_json['boxscore']['teams'][1]['statistics'][14]['label'] + "\n" + " " + NFL_event_data_json['boxscore']['teams'][1]['statistics'][21]['displayValue'] + " Fum Lost, " + NFL_event_data_json['boxscore']['teams'][1]['statistics'][4]['displayValue'] + " 3rd Downs, " + NFL_event_data_json['boxscore']['teams'][1]['statistics'][5]['displayValue'] + " 4th Downs, " + NFL_event_data_json['boxscore']['teams'][1]['statistics'][19]['displayValue'] + " Penalties, " + NFL_event_data_json['boxscore']['teams'][1]['statistics'][6]['displayValue'] + " Total Plays, " + NFL_event_data_json['boxscore']['teams'][1]['statistics'][24]['displayValue'] + " Possession" + visitor_team_stats = " " + NFL_event_data_json['boxscore']['teams'][0]['team']['abbreviation'] + ": " + NFL_event_data_json['boxscore']['teams'][0]['statistics'][0]['displayValue'] + " " + NFL_event_data_json['boxscore']['teams'][0]['statistics'][0]['label'] + ", " + NFL_event_data_json['boxscore']['teams'][0]['statistics'][16]['displayValue'] + "-" + NFL_event_data_json['boxscore']['teams'][0]['statistics'][15]['displayValue'] + " Rushing, " + NFL_event_data_json['boxscore']['teams'][0]['statistics'][11]['displayValue'] + ", " + NFL_event_data_json['boxscore']['teams'][0]['statistics'][10]['displayValue'] + " Yds Passing, " + NFL_event_data_json['boxscore']['teams'][0]['statistics'][7]['displayValue'] + " Total Yds, " + NFL_event_data_json['boxscore']['teams'][0]['statistics'][13]['displayValue'] + " Int, " + NFL_event_data_json['boxscore']['teams'][0]['statistics'][14]['displayValue'] + " " + NFL_event_data_json['boxscore']['teams'][0]['statistics'][14]['label'] + "\n" + " " + NFL_event_data_json['boxscore']['teams'][0]['statistics'][21]['displayValue'] + " Fum Lost, " + NFL_event_data_json['boxscore']['teams'][0]['statistics'][4]['displayValue'] + " 3rd Downs, " + NFL_event_data_json['boxscore']['teams'][0]['statistics'][5]['displayValue'] + " 4th Downs, " + NFL_event_data_json['boxscore']['teams'][0]['statistics'][19]['displayValue'] + " Penalties, " + NFL_event_data_json['boxscore']['teams'][0]['statistics'][6]['displayValue'] + " Total Plays, " + NFL_event_data_json['boxscore']['teams'][0]['statistics'][24]['displayValue'] + " Possession" + current_drive = NFL_event_data_json['drives']['current']['description'] + current_drive_possession = NFL_event_data_json['drives']['current']['team']['abbreviation'] + except: + home_team_stats = "" + current_drive = "" + current_drive_possession = "" + visitor_team_stats = "" + + home_passing = " Passing: " + for player in range(0, 3): + try: + home_passing = home_passing + NFL_event_data_json['boxscore']['players'][1]['statistics'][0]['athletes'][player]['athlete']['displayName'] + " " + NFL_event_data_json['boxscore']['players'][1]['statistics'][0]['athletes'][player]['stats'][0] + ", " + NFL_event_data_json['boxscore']['players'][1]['statistics'][0]['athletes'][player]['stats'][1] + " Yds, " + NFL_event_data_json['boxscore']['players'][1]['statistics'][0]['athletes'][player]['stats'][3] + " TD, " + NFL_event_data_json['boxscore']['players'][1]['statistics'][0]['athletes'][player]['stats'][4] + " Int, " + NFL_event_data_json['boxscore']['players'][1]['statistics'][0]['athletes'][player]['stats'][6] + " Rtg, " + except IndexError: + continue + home_passing = home_passing[:-2] + + home_rushing = " Rushing: " + for player in range(0, 7): + try: + home_rushing = home_rushing + NFL_event_data_json['boxscore']['players'][1]['statistics'][1]['athletes'][player]['athlete']['displayName'] + " " + NFL_event_data_json['boxscore']['players'][1]['statistics'][1]['athletes'][player]['stats'][0] + " Carries, " + NFL_event_data_json['boxscore']['players'][1]['statistics'][1]['athletes'][player]['stats'][1] + " Yds, " + NFL_event_data_json['boxscore']['players'][1]['statistics'][1]['athletes'][player]['stats'][3] + " TD, " + NFL_event_data_json['boxscore']['players'][1]['statistics'][1]['athletes'][player]['stats'][4] + " Long, " + except IndexError: + continue + home_rushing = home_rushing[:-2] + + home_receiving = " Receiving: " + for player in range(0, 10): + try: + home_receiving = home_receiving + NFL_event_data_json['boxscore']['players'][1]['statistics'][2]['athletes'][player]['athlete']['displayName'] + " " + NFL_event_data_json['boxscore']['players'][1]['statistics'][2]['athletes'][player]['stats'][0] + " Receptions, " + NFL_event_data_json['boxscore']['players'][1]['statistics'][2]['athletes'][player]['stats'][1] + " Yds, " + NFL_event_data_json['boxscore']['players'][1]['statistics'][2]['athletes'][player]['stats'][3] + " TD, " + NFL_event_data_json['boxscore']['players'][1]['statistics'][2]['athletes'][player]['stats'][4] + " Long, " + NFL_event_data_json['boxscore']['players'][1]['statistics'][2]['athletes'][player]['stats'][5] + " Tgt, " + except IndexError: + continue + home_receiving = home_receiving[:-2] + + visitor_passing = " Passing: " + for player in range(0, 3): + try: + visitor_passing = visitor_passing + NFL_event_data_json['boxscore']['players'][0]['statistics'][0]['athletes'][player]['athlete']['displayName'] + " " + NFL_event_data_json['boxscore']['players'][0]['statistics'][0]['athletes'][player]['stats'][0] + ", " + NFL_event_data_json['boxscore']['players'][0]['statistics'][0]['athletes'][player]['stats'][1] + " Yds, " + NFL_event_data_json['boxscore']['players'][0]['statistics'][0]['athletes'][player]['stats'][3] + " TD, " + NFL_event_data_json['boxscore']['players'][0]['statistics'][0]['athletes'][player]['stats'][4] + " Int, " + NFL_event_data_json['boxscore']['players'][0]['statistics'][0]['athletes'][player]['stats'][6] + " Rtg, " + except IndexError: + continue + visitor_passing = visitor_passing[:-2] + + visitor_rushing = " Rushing: " + for player in range(0, 7): + try: + visitor_rushing = visitor_rushing + NFL_event_data_json['boxscore']['players'][0]['statistics'][1]['athletes'][player]['athlete']['displayName'] + " " + NFL_event_data_json['boxscore']['players'][0]['statistics'][1]['athletes'][player]['stats'][0] + " Carries, " + NFL_event_data_json['boxscore']['players'][0]['statistics'][1]['athletes'][player]['stats'][1] + " Yds, " + NFL_event_data_json['boxscore']['players'][0]['statistics'][1]['athletes'][player]['stats'][3] + " TD, " + NFL_event_data_json['boxscore']['players'][0]['statistics'][1]['athletes'][player]['stats'][4] + " Long, " + except IndexError: + continue + visitor_rushing = visitor_rushing[:-2] + + visitor_receiving = " Receiving: " + for player in range(0, 10): + try: + visitor_receiving = visitor_receiving + NFL_event_data_json['boxscore']['players'][0]['statistics'][2]['athletes'][player]['athlete']['displayName'] + " " + NFL_event_data_json['boxscore']['players'][0]['statistics'][2]['athletes'][player]['stats'][0] + " Receptions, " + NFL_event_data_json['boxscore']['players'][0]['statistics'][2]['athletes'][player]['stats'][1] + " Yds, " + NFL_event_data_json['boxscore']['players'][0]['statistics'][2]['athletes'][player]['stats'][3] + " TD, " + NFL_event_data_json['boxscore']['players'][0]['statistics'][2]['athletes'][player]['stats'][4] + " Long, " + NFL_event_data_json['boxscore']['players'][0]['statistics'][2]['athletes'][player]['stats'][5] + " Tgt, " + except IndexError: + continue + visitor_receiving = visitor_receiving[:-2] + + stadium = NFL_data_json['events'][game_number]['competitions'][0]['venue']['fullName'] + home = NFL_data_json['events'][game_number]['competitions'][0]['competitors'][0]['team']['displayName'] + home_score = NFL_data_json['events'][game_number]['competitions'][0]['competitors'][0]['score'] + visitor = NFL_data_json['events'][game_number]['competitions'][0]['competitors'][1]['team']['displayName'] + visitor_score = NFL_data_json['events'][game_number]['competitions'][0]['competitors'][1]['score'] + try: + home_record = NFL_data_json['events'][game_number]['competitions'][0]['competitors'][0]['records'][0]['summary'] + visitor_record = NFL_data_json['events'][game_number]['competitions'][0]['competitors'][1]['records'][0]['summary'] + except: + home_record = "" + visitor_record = "" + try: + last_play = NFL_data_json['events'][game_number]['competitions'][0]['situation']['lastPlay']['text'] + home_timeouts = NFL_data_json['events'][game_number]['competitions'][0]['situation']['homeTimeouts'] + visitor_timeouts = NFL_data_json['events'][game_number]['competitions'][0]['situation']['awayTimeouts'] + except: + last_play = "" + home_timeouts = "" + visitor_timeouts = "" + try: + down_distance_ball_on = NFL_data_json['events'][game_number]['competitions'][0]['situation']['downDistanceText'] + except: + down_distance_ball_on = "" + game_status = NFL_data_json['events'][game_number]['status']['type']['detail'] + + visitor_len = len(visitor+" ("+visitor_record+") " + str(visitor_timeouts) + " T/O "+str(visitor_score)) + home_len = len (home+" ("+home_record+") "+str(home_timeouts)+" T/O "+str(home_score)) + if visitor_len > home_len: + visitor_add_spc = "" + home_add_spc = " " * (visitor_len - home_len) + else: + home_add_spc = "" + visitor_add_spc = " " * (home_len - visitor_len) + + print(visitor, "("+visitor_record+") " + str(visitor_timeouts) + " T/O "+visitor_add_spc, visitor_score) + print(home, "("+home_record+") "+str(home_timeouts)+" T/O "+home_add_spc, home_score) + if down_distance_ball_on != "": + print (" "+down_distance_ball_on) + print(" "+game_status, "\n", current_drive_possession+" Ball: "+current_drive, "\n", last_play) + + if visitor_team_stats != "": + print() + print(visitor_team_stats) + print(visitor_passing) + print(visitor_rushing) + print(visitor_receiving) + if home_team_stats != "": + print() + print(home_team_stats) + print(home_passing) + print(home_rushing) + print(home_receiving) + print() + +def NFL_pre_game(game_number): + + url_event = "http://site.api.espn.com/apis/site/v2/sports/football/nfl/summary?event=" + NFL_data_json['events'][game_number]['id'] + NFL_event = urlopen(url_event) + NFL_event_data_json = json.loads(NFL_event.read()) + + stadium = NFL_data_json['events'][game_number]['competitions'][0]['venue']['fullName'] + home = NFL_data_json['events'][game_number]['competitions'][0]['competitors'][0]['team']['displayName'] + visitor = NFL_data_json['events'][game_number]['competitions'][0]['competitors'][1]['team']['displayName'] + game_status = NFL_data_json['events'][game_number]['status']['type']['detail'] + try: + home_record = NFL_data_json['events'][game_number]['competitions'][0]['competitors'][0]['records'][0]['summary'] + visitor_record = NFL_data_json['events'][game_number]['competitions'][0]['competitors'][1]['records'][0]['summary'] + except: + home_record = "" + visitor_record = "" + try: + weather = NFL_data_json['events'][game_number]['weather']['displayValue'] + temperature = NFL_data_json['events'][game_number]['weather']['temperature'] + except: + weather = "" + temperature = "" + try: + broadcast = NFL_data_json['events'][game_number]['competitions'][0]['broadcasts'][0]['names'][0] + except: + broadcast = "" + try: + odds = NFL_data_json['events'][game_number]['competitions'][0]['odds'][0]['details'] + over_under = NFL_data_json['events'][game_number]['competitions'][0]['odds'][0]['overUnder'] + except: + odds = "" + over_under = "" + + try: + visitor_stats = " " + NFL_event_data_json['boxscore']['teams'][0]['team']['abbreviation'] + " Stats: " + except: + visitor_stats = "" + + for stat in range(0, 10): + try: + visitor_stats = visitor_stats + NFL_event_data_json['boxscore']['teams'][0]['statistics'][stat]['displayValue'] + " " + NFL_event_data_json['boxscore']['teams'][0]['statistics'][stat]['label'] + ", " + except IndexError: + pass + visitor_stats = visitor_stats[:-2] + + try: + home_stats = " " + NFL_event_data_json['boxscore']['teams'][1]['team']['abbreviation'] + " Stats: " + except: + home_stats = "" + + for stat in range(0, 10): + try: + home_stats = home_stats + NFL_event_data_json['boxscore']['teams'][1]['statistics'][stat]['displayValue'] + " " + NFL_event_data_json['boxscore']['teams'][1]['statistics'][stat]['label'] + ", " + except IndexError: + pass + home_stats = home_stats[:-2] + + visitor_leaders = " " + try: + visitor_leaders = visitor_leaders + NFL_event_data_json['leaders'][1]['leaders'][0]['leaders'][0]['athlete']['fullName'] + " " + NFL_event_data_json['leaders'][1]['leaders'][0]['leaders'][0]['displayValue'] + ", " + NFL_event_data_json['leaders'][1]['leaders'][1]['leaders'][0]['athlete']['fullName'] + " " + NFL_event_data_json['leaders'][1]['leaders'][1]['leaders'][0]['displayValue'] + ", " + NFL_event_data_json['leaders'][1]['leaders'][2]['leaders'][0]['athlete']['fullName'] + " " + NFL_event_data_json['leaders'][1]['leaders'][2]['leaders'][0]['displayValue'] + except: + pass + + home_leaders = " " + try: + home_leaders = home_leaders + NFL_event_data_json['leaders'][0]['leaders'][0]['leaders'][0]['athlete']['fullName'] + " " + NFL_event_data_json['leaders'][0]['leaders'][0]['leaders'][0]['displayValue'] + ", " + NFL_event_data_json['leaders'][0]['leaders'][1]['leaders'][0]['athlete']['fullName'] + " " + NFL_event_data_json['leaders'][0]['leaders'][1]['leaders'][0]['displayValue'] + ", " + NFL_event_data_json['leaders'][0]['leaders'][2]['leaders'][0]['athlete']['fullName'] + " " + NFL_event_data_json['leaders'][0]['leaders'][2]['leaders'][0]['displayValue'] + except: + pass + + visitor_injuries = " Injuries: " + for injury in range(0, 10): + try: + visitor_injuries = visitor_injuries + NFL_event_data_json['injuries'][1]['injuries'][injury]['athlete']['fullName'] + "--" + NFL_event_data_json['injuries'][1]['injuries'][injury]['status'] + ", " + except IndexError: + pass + visitor_injuries = visitor_injuries[:-2] + + home_injuries = " Injuries: " + for injury in range(0, 10): + try: + home_injuries = home_injuries + NFL_event_data_json['injuries'][0]['injuries'][injury]['athlete']['fullName'] + "--" + NFL_event_data_json['injuries'][0]['injuries'][injury]['status'] + ", " + except IndexError: + pass + home_injuries = home_injuries[:-2] + + home_previous_games = " Previous Games: " + for game in range(0,5): + try: + home_previous_games = home_previous_games + NFL_event_data_json['lastFiveGames'][0]['events'][game]['atVs'] + " " + NFL_event_data_json['lastFiveGames'][0]['events'][game]['opponent']['abbreviation'] + " " + NFL_event_data_json['lastFiveGames'][0]['events'][game]['gameResult'] + " " + NFL_event_data_json['lastFiveGames'][0]['events'][game]['score'] + home_previous_games = home_previous_games[:-1] + ", " + except IndexError: + continue + if home_previous_games != " Previous Games: ": + home_previous_games = home_previous_games[:-2] + + visitor_previous_games = " Previous Games: " + for game in range(0,5): + try: + visitor_previous_games = visitor_previous_games + NFL_event_data_json['lastFiveGames'][1]['events'][game]['atVs'] + " " + NFL_event_data_json['lastFiveGames'][1]['events'][game]['opponent']['abbreviation'] + " " + NFL_event_data_json['lastFiveGames'][1]['events'][game]['gameResult'] + " " + NFL_event_data_json['lastFiveGames'][1]['events'][game]['score'] + visitor_previous_games = visitor_previous_games[:-1] + ", " + except IndexError: + continue + if visitor_previous_games != " Previous Games: ": + visitor_previous_games = visitor_previous_games[:-2] + + print(visitor, "("+visitor_record+")", "at", home, "("+home_record+")", "\n", game_status+",", stadium) + misc_status = " " + if weather != "" and temperature != "": + misc_status = misc_status+weather+", "+str(temperature)+", " + if broadcast != "": + misc_status = misc_status+broadcast+", " + if odds != "" and over_under != "": + misc_status = misc_status+"LINE O/U: "+odds+", "+str(over_under) + if misc_status != " ": + print(misc_status) + print() + if visitor_stats != "": + print(visitor_stats) + if visitor_leaders != " ": + print(visitor_leaders) + if visitor_injuries != " Injuries: ": + print(visitor_injuries) + if visitor_previous_games != " Previous Games: ": + print(visitor_previous_games) + print() + if home_stats != "": + print(home_stats) + if home_leaders != " ": + print(home_leaders) + if home_injuries != " Injuries: ": + print(home_injuries) + if home_previous_games != " Previous Games: ": + print(home_previous_games) + print() + +#Mainline + +if len(sys.argv) == 2: + date_arg = str(sys.argv[1]) + url = "http://site.api.espn.com/apis/site/v2/sports/football/nfl/scoreboard?dates=" + date_arg + "-" + date_arg + try: + game_date = datetime.datetime(int(date_arg[0:4]), int(date_arg[4:6]), int(date_arg[6:8])) + except: + print("Incorrect date format, use YYYYMMDD format.") + exit() + print("----------------------------------------------------------------------") + print("Games of " + game_date.strftime("%B %-d, %Y")) + print() +else: + url = "http://site.api.espn.com/apis/site/v2/sports/football/nfl/scoreboard" + +try: + NFL_today = urlopen(url) +except: + print("No games on this date.") + exit() + +NFL_data_json = json.loads(NFL_today.read()) + +for game in range(0, 20): + try: + game_state = NFL_data_json['events'][game]['status']['type']['state'] + if game_state == "post": + NFL_post_game(game) + elif game_state == "in": + NFL_in_progress(game) + else: + NFL_pre_game(game) + except IndexError: + continue \ No newline at end of file diff --git a/deathclock/__pycache__/news.cpython-311.pyc b/deathclock/__pycache__/news.cpython-311.pyc index 17bcb666168019bff77c0ab10084a601e91f56eb..85fadbcffbc606fd2f95fd9c508093efba24d8c6 100644 GIT binary patch delta 314 zcmZ22azcc6IWI340|NuYf1i7))*E>>nHeunHfOeE+&a0CS)5U8awoIdWNQ|FK5+(y zWTtpFkWvN)hRJ)F9Vc6}>^0ohbEQNcD#*aVkixNyk%3_~BTR&mp@t!g8^#M}(Bz!V z&FUvm#gms>UaU}Bkdj!EnxZK%Ihr+{{T6FMQD$DrjLRmAvwai1Afk0eL~BLj zMG<`nbFvb9m+)6L22Q??yo(&NS2$!ZaLC@^7oNP4-Gfnk@-KEhvRZ_9IWI340|NuYev5;tDjRtwawoIdAeBgBdhACUdj;F=_Ho&SXuWe4RCfan58Nwr`?S{I82>T@uk+VY0^R zqKMfQ5wi;-W|NKCyI4P{F$joEzQFFms5M!V!&X#=RsI75Ix#t$V=cE90|Ub?)`FtU wypqX^oa&4QlRY^T*t8iK7>e{JujjPVP-m3?z<^171c`kC5fIss$%0(w00j*|&;S4c diff --git a/deathclock/__pycache__/weather.cpython-311.pyc b/deathclock/__pycache__/weather.cpython-311.pyc index d2dd72c43c2351baee5c6bf10ad4d5848391bf98..cc8ca3fa6955294eff127f2b95e2dd9770fe07b3 100644 GIT binary patch delta 1520 zcmca7zgv=TIWI340|Ntt>$6j-JnR$sBpB-^s)y>OFr={O@a6JH@iQ_oF}O3NaI`R_ zaHg^@V`gAj%?#22!chV#EWr$#ToZSs)@w4}5)BN@&2cO!$jMAjEXmBzbInW7%u7uM zsf1ye*3S+M3=HiI(-~43q8L*cqL`Q%Qkhd(mN7CgtY(BMj$-X#NMlT4Y~hGvOJQnZ zh+9fb=C{FXqG29|X znv8y$Ot)BzOAAtqZgIrNXXa&=#K&tg-C`+D%}Kk(86TgVlUQ6FA72d8tkCewda@z2 zVSPEoc)fzkA^`>lhAIK5eR?nxco-NMiscy?7=AP`Jmui+Wba|W&LMG$L*gQb)D;e? z3o!H<mZ=2E6DdqY$puVeLN)B@iYCusl4Gf1T);WmgIkHKmZOHfmJ`M`sO6~PSO88*C{{5rFr;wR zaH6^oY~KYYwTKcygyIx#bo*);vOu8=ROra4qoEUo8gBdh=CjVi2u6TP0cIL z$S;X6NG!>?1#?4uGSouWOpx1daVM7+#Y1f<=4N1EP(XkpVFm_>6l)WavU zv8u5PffAh%<78vj@_H$=4*nY)!q++EE^)}ssK3aee}zN;0*C%x4&DoViWfPQu5c(_ z;81!XrEpzJ=aQ7pMJc^2QhFWy4+P{pSZ|<<-rx|w&Y^XQLu-ZI4%3Sqj#oGwFK{^C z;Na`$?&9v`?cwd<1sg1Xkwf7Mhr$I81%(?NJXbiRuX89|;!s#1dXYo@3Wxdy4)q)S zau+z{ibN*AW?jcr?~c3BQs{+evS zF2<-gIi1~`O$4NaYw}KZ)p|BiSTGlt6cwp~f*F)0iwr<4bC3itG!rMM=H$f3Ycdvr z!wHn99KfMi1WH6;0+djTK?T!~1_l_sAu2r~Y=-m1=qb?+ejk{aSfxKOpb;VOnFsx<*DFNXq zKCldD3quN5D%Ub*28PwlAaM|m;!j}-X3*rGxGFV186*J1j8MjBDFz0H=?tk1QH&`J zQA{a}Eeui2DNHR4Q7kFU!3>%#x7f>56H78ui;`hlKss3%7#Kj7d~RU`X-{FSWt@C~ zNuH5u@&hJSX66#+$qzV0C7EiN*RY^Eww9%ac>&AhL}ua1p3EZ5EDKn{?9&{AY>W&w zEDPAc+_}smtgJPx3)n$CVUUj*85mZ>9Z<_Q`2n+>R0>B8Ll!5knpvXB zaf_umH7D&Bb7@gd5kCV1Ly-Uj1H&!0l%mYC)S_G5xrqhwsX3{+sd**0SivUU;!Z9t ziid_zF$V(!g8~#xmS?hMx+Oo^kzJm-O1*rt6}uWc4+8^3@fL>3>Fni>0@Bw7)Gi6A zT~K$vDByBMz@>xrE(h-gKE;b1N>@0PE^sK_P<8BJxxyiRg+u892VXyT7k4Lb4{rzW z4Stahp3e-EYdO|2{c@PB$fPzom@`01l7WFilc`7+Q2J0%C{muhms6Ip zeDZBhSw_XlKRLbGRT&r<{4`l7dvU2ctAM-i&Q#9&EO_Lnuwp7mVQXQC;_hIm zV2t7kX3%86B@zxv)1IL85CBaMRj$yOQ~*b=0xX#*B&~Xm!TwO zMurr|8isgSNHL@^1T$zd`Q2jBWWB{&Tw0J?bc-WCJ~J<~BtE_f6dku%!H&Mg9uG;p zut?{Oj|aOmJ{}VD4UnibXJBBcl11`veJaeqdN6bKK?zfffq~&i1H)Yo-cI%&_UjxH zmpCM@O6pvZG`h%Pe1*gK0*CPpamfyr9-a=K4jyn~(PX^EmX}|WnO2EXHh{7zxNHDr zpXm%W3|ZjV1rfmvE9)8kG#QI5LCKX7oLq}R>J=cal?J(18p*W?$3lE-400+ct{WI0 z@C*0UT;PxfJ0%&E+CeseFo+FyKmxdILv}z7qj)w*ilIoU1{CffOpz(Sq1EHS4Pk=H<(hoB!oQBn*FfCh#K z-26Q@GfXdWD_r1KxFN03;nI`tbAw0V3Xj}%9_33s$`^T5ukff|fT0hp3_OY#xD_CN z273hTdPrdm;(rbR`?&-Zs8FdCM${x%%Ur{}fDu%(PQJy+Uth~q!(79Z#sp4xMd~1r zGZk@y%aP*Ds#HxDa4Z!Gg8b$TA{0S!07|f+vJMT@i@tV7G74g3~Y;yBcN^?@}iu@QD7(kvczA^bTcWv?q7I{X^4-A;ZN08VT5CM^OVH9JO W{=k4qT#(lL2onARBG43o-3b6XG!$w8 diff --git a/deathclock/main.py b/deathclock/main.py index b8c1d4a..960da9b 100644 --- a/deathclock/main.py +++ b/deathclock/main.py @@ -83,7 +83,7 @@ def main(): news_obj = news.news() news_ticker = news_obj.get_news() #print(news_obj._news_dict) - print(news_ticker) + #print(news_ticker) news_context = engine.rootContext() news_context.setContextProperty("news", str(news_ticker)) diff --git a/deathclock/news.py b/deathclock/news.py index bca3851..fc2fd04 100644 --- a/deathclock/news.py +++ b/deathclock/news.py @@ -26,7 +26,7 @@ class news(): for post in d.entries: if self._news_list_length == 10: self._news_list.pop(0) - self._news_list.append(post.title) + self._news_list_length -= 1 self._news_list.append(post.title) self._news_list_length += 1 diff --git a/deathclock/sports.py b/deathclock/sports.py new file mode 100644 index 0000000..e69de29