189 lines
6.2 KiB
Python
189 lines
6.2 KiB
Python
|
from datetime import datetime, timedelta
|
||
|
from time import sleep
|
||
|
import pytz
|
||
|
import json
|
||
|
import requests
|
||
|
import sys
|
||
|
|
||
|
def sortevents(leaguedata, league):
|
||
|
|
||
|
games = []
|
||
|
haslive = False
|
||
|
|
||
|
for event in leaguedata['events']:
|
||
|
|
||
|
event_desc = event['status']['type']['shortDetail'] # use this to display time and quarter on ticker
|
||
|
event_date = event['date'].split('T')[0]
|
||
|
event_liveOrNot = event['status']['type']['state'] # use this to determine if game has ended or not
|
||
|
if event_liveOrNot == 'in':
|
||
|
haslive = True
|
||
|
has_live = 'has_live'
|
||
|
no_upcoming = 'no_upcoming'
|
||
|
|
||
|
for home_away in event['competitions']:
|
||
|
for home_away2 in home_away['competitors']:
|
||
|
if home_away2['homeAway'] == 'away':
|
||
|
if home_away2['team']['displayName'] == 'Washington Commanders':
|
||
|
away_team = 'Washington'
|
||
|
else:
|
||
|
away_team = home_away2['team']['displayName']
|
||
|
away_score = home_away2['score']
|
||
|
else:
|
||
|
if home_away2['team']['displayName'] == 'Washington Commanders':
|
||
|
home_team = 'Washington'
|
||
|
else:
|
||
|
home_team = home_away2['team']['displayName']
|
||
|
home_score = home_away2['score']
|
||
|
|
||
|
if datetime.now(pytz.utc).strftime("%Y-%m-%d") == event['date'].split('T')[0] or event['date'].split('T')[0] <= (datetime.strptime(datetime.now(pytz.utc).strftime("%Y-%m-%dT%H:%MZ"), "%Y-%m-%dT%H:%MZ") + timedelta(days=1)).strftime("%Y-%m-%dT%H:%MZ").split('T')[0]:
|
||
|
games.append({
|
||
|
'home_team': home_team,
|
||
|
'home_score': home_score,
|
||
|
'away_team': away_team,
|
||
|
'away_score': away_score,
|
||
|
'time': event_desc,
|
||
|
'date': event_date,
|
||
|
'isLive': event_liveOrNot
|
||
|
})
|
||
|
return games, haslive, has_live, no_upcoming
|
||
|
|
||
|
|
||
|
f = open('csv/live_mls.json', 'r')
|
||
|
all_settings = json.load(f)
|
||
|
f.close()
|
||
|
|
||
|
mls_url = "https://site.api.espn.com/apis/site/v2/sports/soccer/usa.1/scoreboard"
|
||
|
|
||
|
time_now = datetime.now(pytz.utc)
|
||
|
time_now2 = time_now.strftime("%Y-%m-%dT%H:%MZ")
|
||
|
|
||
|
mls_live_now = False
|
||
|
mls_games_today = False
|
||
|
mls_events = []
|
||
|
mls_fifteenmin = False
|
||
|
games_happened = False
|
||
|
|
||
|
try:
|
||
|
mls_response = requests.get(mls_url)
|
||
|
mls_data = mls_response.json()
|
||
|
except:
|
||
|
sleep(120)
|
||
|
mls_response = requests.get(mls_url)
|
||
|
mls_data = mls_response.json()
|
||
|
|
||
|
for event in mls_data['events']:
|
||
|
if event['status']['type']['state'] == 'in':
|
||
|
mls_live_now = True
|
||
|
if time_now2.split('T')[0] <= event['date'].split('T')[0] and event['date'].split('T')[0] <= (datetime.strptime(time_now2, "%Y-%m-%dT%H:%MZ") + timedelta(days=1)).strftime("%Y-%m-%dT%H:%MZ").split('T')[0]:
|
||
|
mls_events.append(event['date'])
|
||
|
mls_games_today = True
|
||
|
if mls_live_now is False and ((datetime.strptime(event['date'], "%Y-%m-%dT%H:%MZ") + timedelta(minutes=20)).strftime("%Y-%m-%dT%H:%MZ") >= datetime.now(pytz.utc).strftime("%Y-%m-%dT%H:%MZ")) and (event['date'] <= datetime.now(pytz.utc).strftime("%Y-%m-%dT%H:%MZ")):
|
||
|
mls_fifteenmin = True
|
||
|
|
||
|
|
||
|
while True:
|
||
|
f = open('csv/live_mls.json', 'r')
|
||
|
all_settings = json.load(f)
|
||
|
f.close()
|
||
|
|
||
|
if mls_live_now:
|
||
|
try:
|
||
|
mls_response = requests.get(mls_url)
|
||
|
mls_data = mls_response.json()
|
||
|
mls_sorted = sortevents(mls_data, 'MLS')
|
||
|
all_settings['leagues']['MLS'] = mls_sorted
|
||
|
games_happened = True
|
||
|
|
||
|
if mls_sorted[1]:
|
||
|
mls_live_now = True
|
||
|
else:
|
||
|
mls_live_now = False
|
||
|
|
||
|
f = open('csv/live_mls.json', 'w+')
|
||
|
json.dump(all_settings, f)
|
||
|
f.close()
|
||
|
|
||
|
sleep(120)
|
||
|
except:
|
||
|
sleep(120)
|
||
|
|
||
|
|
||
|
elif mls_fifteenmin:
|
||
|
for _ in range (10):
|
||
|
try:
|
||
|
mls_response = requests.get(mls_url)
|
||
|
mls_data = mls_response.json()
|
||
|
mls_sorted = sortevents(mls_data, 'MLS')
|
||
|
all_settings['leagues']['MLS'] = mls_sorted
|
||
|
|
||
|
f = open('csv/live_mls.json', 'w+')
|
||
|
json.dump(all_settings, f)
|
||
|
f.close()
|
||
|
|
||
|
sleep(120)
|
||
|
except:
|
||
|
sleep(120)
|
||
|
|
||
|
if mls_sorted[1]:
|
||
|
mls_live_now = True
|
||
|
mls_fifteenmin = False
|
||
|
games_happened = True
|
||
|
else:
|
||
|
mls_live_now = False
|
||
|
mls_fifteenmin = False
|
||
|
|
||
|
else:
|
||
|
mls_events2 = []
|
||
|
|
||
|
try:
|
||
|
for event in mls_events:
|
||
|
if event >= datetime.now(pytz.utc).strftime("%Y-%m-%dT%H:%MZ"):
|
||
|
mls_events2.append(event)
|
||
|
mls_games_today = True
|
||
|
next_mls = min(mls_events2)
|
||
|
d = datetime.strptime(next_mls, "%Y-%m-%dT%H:%MZ")
|
||
|
mls_time_left = (d - (datetime.strptime(datetime.now(pytz.utc).strftime("%Y-%m-%dT%H:%MZ"), "%Y-%m-%dT%H:%MZ"))).total_seconds()
|
||
|
all_settings['leagues']['MLS'][3] = next_mls
|
||
|
|
||
|
f = open('csv/live_mls.json', 'w+')
|
||
|
json.dump(all_settings, f)
|
||
|
f.close()
|
||
|
|
||
|
except:
|
||
|
mls_games_today = False
|
||
|
next_mls = []
|
||
|
|
||
|
all_settings['leagues']['MLS'][3] = 'no_upcoming'
|
||
|
|
||
|
f = open('csv/live_mls.json', 'w+')
|
||
|
json.dump(all_settings, f)
|
||
|
f.close()
|
||
|
pass
|
||
|
|
||
|
if mls_games_today:
|
||
|
sleep(mls_time_left)
|
||
|
mls_fifteenmin = True
|
||
|
|
||
|
|
||
|
if mls_live_now is False and mls_games_today is False and games_happened is True:
|
||
|
sleep(7200)
|
||
|
all_settings['leagues']['MLS'][2] = 'no_live'
|
||
|
all_settings['leagues']['MLS'][3] = 'no_upcoming'
|
||
|
|
||
|
f = open('csv/live_mls.json', 'w+')
|
||
|
json.dump(all_settings, f)
|
||
|
f.close()
|
||
|
|
||
|
break
|
||
|
|
||
|
|
||
|
if mls_live_now is False and mls_games_today is False and games_happened is False:
|
||
|
all_settings['leagues']['MLS'][2] = 'no_live'
|
||
|
all_settings['leagues']['MLS'][3] = 'no_upcoming'
|
||
|
|
||
|
f = open('csv/live_mls.json', 'w+')
|
||
|
json.dump(all_settings, f)
|
||
|
f.close()
|
||
|
|
||
|
break
|