From 55e921898a613b8f43dd2e4115a4fbe6fe60ca34 Mon Sep 17 00:00:00 2001 From: Your Name Date: Sat, 29 Jan 2022 09:26:55 +0000 Subject: [PATCH] sport api and bugfixes --- database_caller.py | 247 +++++++----------- .../sports/{Premier League => PL}/Arsenal.png | Bin .../{Premier League => PL}/Aston Villa.png | Bin .../{Premier League => PL}/Brentford.png | Bin .../{Premier League => PL}/Brighton.png | Bin .../sports/{Premier League => PL}/Burnley.png | Bin .../sports/{Premier League => PL}/Chelsea.png | Bin .../{Premier League => PL}/Crystal Palace.png | Bin .../sports/{Premier League => PL}/Everton.png | Bin logos/sports/{Premier League => PL}/Leeds.png | Bin .../{Premier League => PL}/Leicester.png | Bin .../{Premier League => PL}/Liverpool.png | Bin .../{Premier League => PL}/Man City.png | Bin .../{Premier League => PL}/Man United.png | Bin .../{Premier League => PL}/Newcastle.png | Bin .../sports/{Premier League => PL}/Norwich.png | Bin .../{Premier League => PL}/Southampton.png | Bin .../{Premier League => PL}/Tottenham.png | Bin .../sports/{Premier League => PL}/Watford.png | Bin .../{Premier League => PL}/West Ham.png | Bin .../sports/{Premier League => PL}/Wolves.png | Bin .../{Premier League.png => PL.png} | Bin logos/startup_logo.gif | Bin 0 -> 20556 bytes logos/startup_logo_1.gif | Bin 51493 -> 0 bytes static/app.js | 1 + stockTicker.py | 15 +- templates/index.html | 2 +- 27 files changed, 106 insertions(+), 159 deletions(-) rename logos/sports/{Premier League => PL}/Arsenal.png (100%) rename logos/sports/{Premier League => PL}/Aston Villa.png (100%) rename logos/sports/{Premier League => PL}/Brentford.png (100%) rename logos/sports/{Premier League => PL}/Brighton.png (100%) rename logos/sports/{Premier League => PL}/Burnley.png (100%) rename logos/sports/{Premier League => PL}/Chelsea.png (100%) rename logos/sports/{Premier League => PL}/Crystal Palace.png (100%) rename logos/sports/{Premier League => PL}/Everton.png (100%) rename logos/sports/{Premier League => PL}/Leeds.png (100%) rename logos/sports/{Premier League => PL}/Leicester.png (100%) rename logos/sports/{Premier League => PL}/Liverpool.png (100%) rename logos/sports/{Premier League => PL}/Man City.png (100%) rename logos/sports/{Premier League => PL}/Man United.png (100%) rename logos/sports/{Premier League => PL}/Newcastle.png (100%) rename logos/sports/{Premier League => PL}/Norwich.png (100%) rename logos/sports/{Premier League => PL}/Southampton.png (100%) rename logos/sports/{Premier League => PL}/Tottenham.png (100%) rename logos/sports/{Premier League => PL}/Watford.png (100%) rename logos/sports/{Premier League => PL}/West Ham.png (100%) rename logos/sports/{Premier League => PL}/Wolves.png (100%) rename logos/sports/league_logos/{Premier League.png => PL.png} (100%) create mode 100644 logos/startup_logo.gif delete mode 100644 logos/startup_logo_1.gif diff --git a/database_caller.py b/database_caller.py index 6373832..25f1b24 100755 --- a/database_caller.py +++ b/database_caller.py @@ -127,23 +127,6 @@ def updateCrypto(): try: - url = 'https://bm7p954xoh.execute-api.us-east-2.amazonaws.com/default/ScriptsAPI/crypto?symbols=ETH-BTC' - - - response = requests.get(url) - data = response.json() - print(data) - - - - stock_info = {} - - for stock in data: - stock_info[stock['symbol']] = {'current': stock['price'], 'opening': float(stock['price']) - float(stock['change_since'])} - - - coingecko_client = CoinGeckoAPI() - f = open('csv/crypto_settings.json', 'r') all_crypto_settings = json.load(f) f.close() @@ -154,43 +137,28 @@ def updateCrypto(): symbols = [sb.split(',')[0] for sb in symbol_base] bases = [sb.split(',')[1] for sb in symbol_base] unique_bases = list(set(bases)) - - - coins = [] + url = 'https://bm7p954xoh.execute-api.us-east-2.amazonaws.com/default/ScriptsAPI/crypto?symbols=' - # coingecko rate limited me from calling this too often - #coin_list = coingecko_client.get_coins_list() - #json.dump(coin_list, open('csv/coin_list.json', 'w+')) - - f = open('coin_list.json', 'r') - coin_list = json.load(f) - f.close() - - # this might be super slow as coin_list is large - for s in symbols: - for c in coin_list: - if c['symbol'].upper() == s and c['id'] != 'binance-peg-cardano': # hackaround for two coins with symbol ada: - coins.append(c['id']) - - crypto_info = {} - print(coins) - response = coingecko_client.get_price(ids=','.join(coins), vs_currencies = unique_bases, include_24hr_change=True) - - #print(response) + for i,s in enumerate(symbols): + url += bases[i] + '-' + s + ',' + url = url[:-1] #remove last comma + print(url) + response = requests.get(url) + data = response.json() + print(data) + - for i,sb in enumerate(symbol_base): - #coin_info[name] = [symbol, base] - #info = coin_info[coin] - #CSV.write(info[0] + ',' + coin + ',' + info[1] + ',' +str(response[coin][info[1]]) + ',' + str(response[coin]['usd_24h_change']) + '\n') - crypto_info[sb] = {'current':response[coins[i]][bases[i].lower()], '24hr_change':response[coins[i]]['usd_24h_change']} - - all_crypto_settings['symbols'] = crypto_info + for i,d in enumerate(data): #TODO get base from the server + coin_info[symbol_base[i]] = {'current': d['price'], '24hr_change': d['percent_over_24hr']} + + all_crypto_settings['symbols'] = coin_info json.dump(all_crypto_settings, open('csv/crypto_settings.json', 'w+')) except Exception as e: + raise e exc_type, exc_obj, exc_tb = sys.exc_info() fname = os.path.split(exc_tb.tb_frame.f_code.co_filename)[1] logf.write(str(e)) @@ -218,24 +186,24 @@ def updateForex(): targets = ','.join(symbols) - data = [] - for base in unique_bases: - url = 'https://bm7p954xoh.execute-api.us-east-2.amazonaws.com/default/ScriptsAPI/forex?base={}&targets='.format(base)+targets - response = requests.get(url) - data.extend(response.json()) + url = 'https://bm7p954xoh.execute-api.us-east-2.amazonaws.com/default/ScriptsAPI/forex?symbols=' + for i,s in enumerate(symbols): + url += s + '-' + bases[i] + ',' + url = url[:-1] #remove last comma + + response = requests.get(url) + data = response.json() + + c_dict = {} - for i, sb in enumerate(symbol_base): - - # check symbol base has data and if so add it to c_dict - for d in data: - - if d['uid'] == bases[i] + '/' + symbols[i]: - c_dict[sb] = {'current': d['rate'], '24hr_change': d['rate_over_24hr']} + for d in data: + + c_dict[d['uid'].replace('/',',')] = {'current': d['rate'], '24hr_change': d['rate_over_24hr']} @@ -243,6 +211,7 @@ def updateForex(): all_forex_settings['symbols'] = c_dict json.dump(all_forex_settings, open( "csv/forex_settings.json", 'w+' )) except Exception as e: + exc_type, exc_obj, exc_tb = sys.exc_info() fname = os.path.split(exc_tb.tb_frame.f_code.co_filename)[1] logf.write(str(e)) @@ -408,9 +377,9 @@ def updateWeather(): logf.write('\n ' + "".join(traceback.format_exception(sys.exc_info()[0], sys.exc_info()[1], sys.exc_info()[2]))) -def updateLeagueTables(api_key, league_ids): - +def updateLeagueTables(): + url = 'https://bm7p954xoh.execute-api.us-east-2.amazonaws.com/default/ScriptsAPI/sports?stats=' try: f = open('csv/league_tables.json', 'r') all_settings = json.load(f) @@ -418,48 +387,40 @@ def updateLeagueTables(api_key, league_ids): leagues = all_settings['leagues'].keys() leagues_info = {} + for league in leagues: - league_id = league_ids[league] - url = 'https://www.thesportsdb.com/api/v1/json/{}/lookuptable.php?l={}&s=2020-2021'.format(api_key, league_id) + url += league + ',' + url = url[:-1] # remove last comma + r = requests.get(url) + + all_data = r.json() + + + for league in all_data[0].keys(): - r = requests.get(url) - try: - all_data = r.json() - except Exception as e: # there is no data available - exc_type, exc_obj, exc_tb = sys.exc_info() - fname = os.path.split(exc_tb.tb_frame.f_code.co_filename)[1] - logf.write(str(e)) - logf.write('. file: ' + fname) - logf.write('. line: ' + str(exc_tb.tb_lineno)) - logf.write('. type: ' + str(exc_type)) - logf.write('\n ' + "".join(traceback.format_exception(sys.exc_info()[0], sys.exc_info()[1], sys.exc_info()[2]))) - logf.write(url) - continue - - - - + teams = [] - for i in range(len(all_data['table'])): + for d in all_data[0][league]: team = {} - team['name'] = all_data['table'][i]['strTeam'] - team['wins'] = all_data['table'][i]['intWin'] - team['loss'] = all_data['table'][i]['intLoss'] - team['draw'] = all_data['table'][i]['intDraw'] - team['played'] = all_data['table'][i]['intPlayed'] - team['standing'] = all_data['table'][i]['intRank'] - team['points'] = all_data['table'][i]['intPoints'] + team['name'] = d['strTeam'] + team['wins'] = d['intWin'] + team['loss'] = d['intLoss'] + team['draw'] = d['intDraw'] + #team['played'] = d['intPlayed'] + team['standing'] = d['intRank'] + #team['points'] = d['intPoints'] teams.append(team) - leagues_info[league] = teams + leagues_info[league.upper()] = teams all_settings['leagues'] = leagues_info json.dump(all_settings, open( "csv/league_tables.json".format(league), 'w+' )) except Exception as e: + raise e exc_type, exc_obj, exc_tb = sys.exc_info() fname = os.path.split(exc_tb.tb_frame.f_code.co_filename)[1] logf.write(str(e)) @@ -469,17 +430,19 @@ def updateLeagueTables(api_key, league_ids): logf.write('\n ' + "".join(traceback.format_exception(sys.exc_info()[0], sys.exc_info()[1], sys.exc_info()[2]))) -def updateLeagueEvents(api_key, league_ids, time): +def updateLeagueEvents(time): + + url = 'https://bm7p954xoh.execute-api.us-east-2.amazonaws.com/default/ScriptsAPI/sports?{}='.format(time) if time == 'past': - url ='https://www.thesportsdb.com/api/v1/json/{}/eventspastleague.php?id={}' #last 15 events on the league (premium only) + f = open('csv/past_games.json') elif time == 'upcoming': - url ='https://www.thesportsdb.com/api/v1/json/{}/eventsnextleague.php?id={}' #next 15 events on the league (premium only) + f = open('csv/upcoming_games.json') - elif time == 'live': + elif time == 'livescore': f = open('csv/live_games.json') - url = 'https://thesportsdb.com/api/v2/json/{}/livescore.php?l={}' + @@ -488,52 +451,47 @@ def updateLeagueEvents(api_key, league_ids, time): f.close() leagues = all_settings['leagues'].keys() leagues_info = {} + for league in leagues: - league_id = league_ids[league] - url = url.format(api_key, league_id) - - r = requests.get(url) - try: - all_data = r.json() - except Exception as e: # there is no data available - exc_type, exc_obj, exc_tb = sys.exc_info() - fname = os.path.split(exc_tb.tb_frame.f_code.co_filename)[1] - logf.write(str(e)) - logf.write('. file: ' + fname) - logf.write('. line: ' + str(exc_tb.tb_lineno)) - logf.write('. type: ' + str(exc_type)) - logf.write('\n ' + "".join(traceback.format_exception(sys.exc_info()[0], sys.exc_info()[1], sys.exc_info()[2]))) - logf.write(url) - continue + url += league + ',' + url = url[:-1] # remove last comma + + r = requests.get(url) + + all_data = r.json() + + print(all_data['NFL'][0]) + + events = [] + + for league in all_data.keys(): + for d in all_data[league]: + event = {} + event['date'] = d['dateEvent'] - - - events = [] - - if not all_data['events'] is None: + if time == 'live': + + event['progess'] = d['strProgress'] + event['status'] = d['strStatus'] + else: + + event['round'] = d['intRound'] + event['time'] = d['strTime'] + event['home_team'] = d['strHomeTeam'] - for i in range(len(all_data['events'])): - event = {} - event['date'] = all_data['events'][i]['dateEvent'] - - if time == 'live': - event['time'] = all_data['events'][i]['strEventTime'] - event['progess'] = all_data['events'][i]['strProgress'] - event['status'] = all_data['events'][i]['strStatus'] - else: - event['time'] = all_data['events'][i]['strTime'] - event['round'] = all_data['events'][i]['intRound'] - event['home_team'] = all_data['events'][i]['strHomeTeam'] - event['home_score'] = all_data['events'][i]['intHomeScore'] - event['away_team'] = all_data['events'][i]['strAwayTeam'] - event['away_score'] = all_data['events'][i]['intAwayScore'] - - events.append(event) + event['away_team'] = d['strAwayTeam'] + + if time != 'upcoming': + event['away_score'] = d['intAwayScore'] + event['home_score'] = d['intHomeScore'] + + events.append(event) leagues_info[league] = events all_settings['leagues'] = leagues_info json.dump(all_settings, open( "csv/{}_games.json".format(time), 'w+' )) except Exception as e: + exc_type, exc_obj, exc_tb = sys.exc_info() fname = os.path.split(exc_tb.tb_frame.f_code.co_filename)[1] logf.write(str(e)) @@ -545,24 +503,14 @@ def updateLeagueEvents(api_key, league_ids, time): def updateSports(): #read user settings to decide which sprots to update - api_key = '97436974' + + updateLeagueTables() - - - league_ids = {'Premier League':'4328', 'NHL':'4380', 'NBA':'4387', 'NFL':'4391'} - updateLeagueTables(api_key, league_ids) - - updateLeagueEvents(api_key, league_ids, 'live') - updateLeagueEvents(api_key, league_ids, 'past') - updateLeagueEvents(api_key, league_ids, 'upcoming') + #updateLeagueEvents('livescore') + #updateLeagueEvents('past') + #updateLeagueEvents('upcoming') - - 'https://www.thesportsdb.com/api/v1/json/{}/eventsnext.php?id=133602'.format(api_key) # next five events by team ID (paid) use this for upcoming team games - - #url = 'https://www.thesportsdb.com/api/v1/json/{}/eventsseason.php?id=4328&s=2020-2021'.format(api_key) # all past events in premier league - - url = 'https://www.thesportsdb.com/api/v2/json/{}/livescore.php?l=4380'.format(api_key) #live scores def checkStocks(last_update, update_frequency): @@ -621,13 +569,6 @@ if __name__ == '__main__': t = time.time() - - updateNews() - sys.exit() - - - - newsapi = NewsApiClient(api_key='cf08652bd17647b89aaf469a1a8198a9') diff --git a/logos/sports/Premier League/Arsenal.png b/logos/sports/PL/Arsenal.png similarity index 100% rename from logos/sports/Premier League/Arsenal.png rename to logos/sports/PL/Arsenal.png diff --git a/logos/sports/Premier League/Aston Villa.png b/logos/sports/PL/Aston Villa.png similarity index 100% rename from logos/sports/Premier League/Aston Villa.png rename to logos/sports/PL/Aston Villa.png diff --git a/logos/sports/Premier League/Brentford.png b/logos/sports/PL/Brentford.png similarity index 100% rename from logos/sports/Premier League/Brentford.png rename to logos/sports/PL/Brentford.png diff --git a/logos/sports/Premier League/Brighton.png b/logos/sports/PL/Brighton.png similarity index 100% rename from logos/sports/Premier League/Brighton.png rename to logos/sports/PL/Brighton.png diff --git a/logos/sports/Premier League/Burnley.png b/logos/sports/PL/Burnley.png similarity index 100% rename from logos/sports/Premier League/Burnley.png rename to logos/sports/PL/Burnley.png diff --git a/logos/sports/Premier League/Chelsea.png b/logos/sports/PL/Chelsea.png similarity index 100% rename from logos/sports/Premier League/Chelsea.png rename to logos/sports/PL/Chelsea.png diff --git a/logos/sports/Premier League/Crystal Palace.png b/logos/sports/PL/Crystal Palace.png similarity index 100% rename from logos/sports/Premier League/Crystal Palace.png rename to logos/sports/PL/Crystal Palace.png diff --git a/logos/sports/Premier League/Everton.png b/logos/sports/PL/Everton.png similarity index 100% rename from logos/sports/Premier League/Everton.png rename to logos/sports/PL/Everton.png diff --git a/logos/sports/Premier League/Leeds.png b/logos/sports/PL/Leeds.png similarity index 100% rename from logos/sports/Premier League/Leeds.png rename to logos/sports/PL/Leeds.png diff --git a/logos/sports/Premier League/Leicester.png b/logos/sports/PL/Leicester.png similarity index 100% rename from logos/sports/Premier League/Leicester.png rename to logos/sports/PL/Leicester.png diff --git a/logos/sports/Premier League/Liverpool.png b/logos/sports/PL/Liverpool.png similarity index 100% rename from logos/sports/Premier League/Liverpool.png rename to logos/sports/PL/Liverpool.png diff --git a/logos/sports/Premier League/Man City.png b/logos/sports/PL/Man City.png similarity index 100% rename from logos/sports/Premier League/Man City.png rename to logos/sports/PL/Man City.png diff --git a/logos/sports/Premier League/Man United.png b/logos/sports/PL/Man United.png similarity index 100% rename from logos/sports/Premier League/Man United.png rename to logos/sports/PL/Man United.png diff --git a/logos/sports/Premier League/Newcastle.png b/logos/sports/PL/Newcastle.png similarity index 100% rename from logos/sports/Premier League/Newcastle.png rename to logos/sports/PL/Newcastle.png diff --git a/logos/sports/Premier League/Norwich.png b/logos/sports/PL/Norwich.png similarity index 100% rename from logos/sports/Premier League/Norwich.png rename to logos/sports/PL/Norwich.png diff --git a/logos/sports/Premier League/Southampton.png b/logos/sports/PL/Southampton.png similarity index 100% rename from logos/sports/Premier League/Southampton.png rename to logos/sports/PL/Southampton.png diff --git a/logos/sports/Premier League/Tottenham.png b/logos/sports/PL/Tottenham.png similarity index 100% rename from logos/sports/Premier League/Tottenham.png rename to logos/sports/PL/Tottenham.png diff --git a/logos/sports/Premier League/Watford.png b/logos/sports/PL/Watford.png similarity index 100% rename from logos/sports/Premier League/Watford.png rename to logos/sports/PL/Watford.png diff --git a/logos/sports/Premier League/West Ham.png b/logos/sports/PL/West Ham.png similarity index 100% rename from logos/sports/Premier League/West Ham.png rename to logos/sports/PL/West Ham.png diff --git a/logos/sports/Premier League/Wolves.png b/logos/sports/PL/Wolves.png similarity index 100% rename from logos/sports/Premier League/Wolves.png rename to logos/sports/PL/Wolves.png diff --git a/logos/sports/league_logos/Premier League.png b/logos/sports/league_logos/PL.png similarity index 100% rename from logos/sports/league_logos/Premier League.png rename to logos/sports/league_logos/PL.png diff --git a/logos/startup_logo.gif b/logos/startup_logo.gif new file mode 100644 index 0000000000000000000000000000000000000000..e6a2fb5ee29fb5d3525d1e588f5b4efddf0c7050 GIT binary patch literal 20556 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 literal 0 HcmV?d00001 diff --git a/logos/startup_logo_1.gif b/logos/startup_logo_1.gif deleted file mode 100644 index e3924a44e6df12121a9a25ad1e978a8453ebfc4b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 51493 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

;%}b9kQxhb;Ln!tP)xAR7-Jt9s4w+$OagPzdVI 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

*+_$l4PBC={C+J!K2B->)mlwV&EUrb*pVY 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 BVgdjF diff --git a/static/app.js b/static/app.js index 74c0055..fdc1a14 100755 --- a/static/app.js +++ b/static/app.js @@ -1103,6 +1103,7 @@ function getSportsSettings(page) { let title = page.querySelectorAll(".title-select")[0].checked; let leagues_el = page.querySelectorAll(".league-list")[0]; leagues = getListItems(leagues_el); + settings = { title: title, leagues: leagues }; return settings; diff --git a/stockTicker.py b/stockTicker.py index b1b95e8..6980c5b 100755 --- a/stockTicker.py +++ b/stockTicker.py @@ -1688,6 +1688,7 @@ class StockTicker(): img = img.crop((0,0,x_offset ,32)) imgs.append(img) except Exception as e: + exc_type, exc_obj, exc_tb = sys.exc_info() fname = os.path.split(exc_tb.tb_frame.f_code.co_filename)[1] self.logf.write(str(e)) @@ -1747,10 +1748,12 @@ class StockTicker(): logo = Image.open('logos/sports/{}/{}'.format(league, sports_info[team['name']]['logo'])) + img.paste(logo, (x_offset, 0)) x_offset += logo.size[0] + 2 except Exception as e: + print('no logo for:', team['name']) @@ -1758,7 +1761,7 @@ class StockTicker(): wins_timage = self.textImage('Wins:' + team['wins'], small_font, r = 0, g = 255, b = 0) loss_timage = self.textImage('Losses:' + team['loss'], small_font, r = 255, g = 0, b = 0) draw_timage = self.textImage('Draws:' + team['draw'], small_font, r = 0, g = 0, b = 255) - points_timage = self.textImage('Points:' + team['points'], small_font, r = 255, g = 255, b = 255) + #points_timage = self.textImage('Points:' + team['points'], small_font, r = 255, g = 255, b = 255) standing_timage = self.textImage('Standing:' + team['standing'], small_font, r = 255, g = 255, b = 255) @@ -1769,15 +1772,17 @@ class StockTicker(): img.paste(draw_timage, (x_offset, 26)) x_offset += max( wins_timage.size[0], loss_timage.size[0], draw_timage.size[0]) - img.paste(points_timage, (x_offset, 14)) + #img.paste(points_timage, (x_offset, 14)) img.paste(standing_timage, (x_offset, 22)) - x_offset += max(points_timage.size[0], standing_timage.size[0]) + buff_size + #x_offset += max(points_timage.size[0], standing_timage.size[0]) + buff_size + x_offset += standing_timage.size[0] + buff_size img = img.crop((0,0,x_offset ,32)) imgs.append(img) except Exception as e: + raise e exc_type, exc_obj, exc_tb = sys.exc_info() fname = os.path.split(exc_tb.tb_frame.f_code.co_filename)[1] self.logf.write(str(e)) @@ -2715,7 +2720,7 @@ if __name__ == '__main__': stock_ticker.logf = log start_image = Image.open('./logos/startup_logo.png') - start_GIF = Image.open('./logos/startup_logo_1.gif') + start_GIF = Image.open('./logos/startup_logo.gif') msg = getInput() if msg =='*': @@ -2735,7 +2740,7 @@ if __name__ == '__main__': #stock_ticker.process_msg('G') #stock_ticker.process_msg('f') #stock_ticker.process_msg('W') - #stock_ticker.process_msg('A') + stock_ticker.process_msg('A') diff --git a/templates/index.html b/templates/index.html index cdb1c9c..58eaf23 100755 --- a/templates/index.html +++ b/templates/index.html @@ -2177,7 +2177,7 @@ - +