From e40b432169aa249c4e41ee260d0fb6e33fef6f36 Mon Sep 17 00:00:00 2001 From: Justin Date: Mon, 9 Jan 2023 17:41:52 +0800 Subject: [PATCH] live nfl --- live_nfl.py | 189 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 189 insertions(+) create mode 100644 live_nfl.py diff --git a/live_nfl.py b/live_nfl.py new file mode 100644 index 0000000..774d2e1 --- /dev/null +++ b/live_nfl.py @@ -0,0 +1,189 @@ +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_nfl.json', 'r') +all_settings = json.load(f) +f.close() + +nfl_url = "https://site.api.espn.com/apis/site/v2/sports/football/nfl/scoreboard" + +time_now = datetime.now(pytz.utc) +time_now2 = time_now.strftime("%Y-%m-%dT%H:%MZ") + +nfl_live_now = False +nfl_games_today = False +nfl_events = [] +nfl_fifteenmin = False + +games_happened = False + +try: + nfl_response = requests.get(nfl_url) + nfl_data = nfl_response.json() +except: + sleep(120) + nfl_response = requests.get(nfl_url) + nfl_data = nfl_response.json() + +for event in nfl_data['events']: + if event['status']['type']['state'] == 'in': + nfl_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]: + nfl_events.append(event['date']) + nfl_games_today = True + if nfl_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")): + nfl_fifteenmin = True + + +while True: + f = open('csv/live_nfl.json', 'r') + all_settings = json.load(f) + f.close() + + if nfl_live_now: + try: + nfl_response = requests.get(nfl_url) + nfl_data = nfl_response.json() + nfl_sorted = sortevents(nfl_data, 'NFL') + all_settings['leagues']['NFL'] = nfl_sorted + games_happened = True + + if nfl_sorted[1]: + nfl_live_now = True + else: + nfl_live_now = False + + f = open('csv/live_nfl.json', 'w+') + json.dump(all_settings, f) + f.close() + sleep(120) + except: + sleep(120) + + elif nfl_fifteenmin: + for _ in range (10): + try: + nfl_response = requests.get(nfl_url) + nfl_data = nfl_response.json() + nfl_sorted = sortevents(nfl_data, 'NFL') + all_settings['leagues']['NFL'] = nfl_sorted + + f = open('csv/live_nfl.json', 'w+') + json.dump(all_settings, f) + f.close() + sleep(120) + + except: + sleep(120) + + if nfl_sorted[1]: + nfl_live_now = True + nfl_fifteenmin = False + games_happened = True + else: + nfl_live_now = False + nfl_fifteenmin = False + + else: + nfl_events2 = [] + + try: + for event in nfl_events: + if event >= datetime.now(pytz.utc).strftime("%Y-%m-%dT%H:%MZ"): + nfl_events2.append(event) + nfl_games_today = True + next_nfl = min(nfl_events2) + d = datetime.strptime(next_nfl, "%Y-%m-%dT%H:%MZ") + nfl_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']['NFL'][3] = next_nfl + + f = open('csv/live_nfl.json', 'w+') + json.dump(all_settings, f) + f.close() + + except: + nfl_games_today = False + next_nfl = [] + all_settings['leagues']['NFL'][3] = 'no_upcoming' + + f = open('csv/live_nfl.json', 'w+') + json.dump(all_settings, f) + f.close() + pass + + + if nfl_games_today: + sleep(nfl_time_left) + nfl_fifteenmin = True + + + if nfl_live_now is False and nfl_games_today is False and games_happened is True: + sleep(7200) + + all_settings['leagues']['NFL'][2] = 'no_live' + all_settings['leagues']['NFL'][3] = 'no_upcoming' + + f = open('csv/live_nfl.json', 'w+') + json.dump(all_settings, f) + f.close() + + break + + + if nfl_live_now is False and nfl_games_today is False and games_happened is False: + + all_settings['leagues']['NFL'][2] = 'no_live' + all_settings['leagues']['NFL'][3] = 'no_upcoming' + + f = open('csv/live_nfl.json', 'w+') + json.dump(all_settings, f) + f.close() + + break