This commit is contained in:
Death916 2024-03-11 20:12:38 -07:00
parent 22a6091f18
commit af0eb3466c
8 changed files with 1775 additions and 2 deletions

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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))

View file

@ -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

0
deathclock/sports.py Normal file
View file