mirror of
https://github.com/Death916/deathclock.git
synced 2026-04-10 03:04:40 -07:00
updates
This commit is contained in:
parent
22a6091f18
commit
af0eb3466c
8 changed files with 1775 additions and 2 deletions
655
deathclock/ESPNMLBAPIBoxScores.py
Normal file
655
deathclock/ESPNMLBAPIBoxScores.py
Normal 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
|
||||
446
deathclock/ESPNNBAAPIBoxScores.py
Normal file
446
deathclock/ESPNNBAAPIBoxScores.py
Normal 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
|
||||
672
deathclock/ESPNNFLAPIBoxScores.py
Normal file
672
deathclock/ESPNNFLAPIBoxScores.py
Normal 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
|
||||
Binary file not shown.
Binary file not shown.
|
|
@ -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))
|
||||
|
||||
|
|
|
|||
|
|
@ -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
0
deathclock/sports.py
Normal file
Loading…
Add table
Add a link
Reference in a new issue