added live sports

This commit is contained in:
Justin 2023-01-09 18:08:18 +08:00 committed by GitHub
parent dae81b2626
commit b3b5e5b842
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -74,7 +74,7 @@ class StockTicker():
'Stocks Prof': self.getStockProfessional, 'Crypto Prof': self.getCryptoProfessional, 'Forex Prof': self.getForexProfessional, 'Stocks Prof': self.getStockProfessional, 'Crypto Prof': self.getCryptoProfessional, 'Forex Prof': self.getForexProfessional,
'Current Weather Prof': self.getTodayWeatherProfessional, 'News Prof':self.getNewsProfessional, 'Commodities Prof':self.getCommoditiesProfessional, 'Indices Prof': self.getIndicesProfessional, 'Current Weather Prof': self.getTodayWeatherProfessional, 'News Prof':self.getNewsProfessional, 'Commodities Prof':self.getCommoditiesProfessional, 'Indices Prof': self.getIndicesProfessional,
'Daily Forecast Prof':self.getDailyWeatherProfessional, 'Sports (Team Stats) Prof':lambda : self.getLeagueTableProfessional('NHL'), 'Sports (Upcoming Games) Prof': lambda : self.getLeagueProfessional('NHL', 'future'), 'Daily Forecast Prof':self.getDailyWeatherProfessional, 'Sports (Team Stats) Prof':lambda : self.getLeagueTableProfessional('NHL'), 'Sports (Upcoming Games) Prof': lambda : self.getLeagueProfessional('NHL', 'future'),
'Sports (Past Games) Prof': lambda : self.getLeagueProfessional('NBA', 'past'), 'Custom Messages Prof': self.getUserMessagesProfessional, 'Custom Images Prof': self.getUserImagesProfessional, 'Movies Prof': self.getMoviesProfessional} 'Sports (Past Games) Prof': lambda : self.getLeagueProfessional('NBA', 'past'), 'Custom Messages Prof': self.getUserMessagesProfessional, 'Custom Images Prof': self.getUserImagesProfessional, 'Movies Prof': self.getMoviesProfessional, 'Sports (Live Games) Prof': lambda : self.getLeagueProfessional('NBA', 'live')}
self.JSONs = {'Stocks': 'csv/stocks_settings.json', 'Crypto': 'csv/crypto_settings.json', 'Forex': 'csv/forex_settings.json', self.JSONs = {'Stocks': 'csv/stocks_settings.json', 'Crypto': 'csv/crypto_settings.json', 'Forex': 'csv/forex_settings.json',
'Daily Forecast':'csv/daily_weather.json', 'Current Weather': 'csv/current_weather.json', 'Commodities':'csv/commodities_settings.json', 'Indices': 'csv/indices_settings.json', 'Daily Forecast':'csv/daily_weather.json', 'Current Weather': 'csv/current_weather.json', 'Commodities':'csv/commodities_settings.json', 'Indices': 'csv/indices_settings.json',
@ -83,7 +83,7 @@ class StockTicker():
'News':'csv/news_settings.json', 'Custom Images': 'csv/image_settings.json', 'Custom GIFs': 'csv/GIF_settings.json', 'Custom Messages': 'csv/message_settings.json', 'News':'csv/news_settings.json', 'Custom Images': 'csv/image_settings.json', 'Custom GIFs': 'csv/GIF_settings.json', 'Custom Messages': 'csv/message_settings.json',
'Stocks Prof': 'csv/stocks_settings.json', 'Crypto Prof': 'csv/crypto_settings.json', 'Forex Prof': 'csv/forex_settings.json', 'Stocks Prof': 'csv/stocks_settings.json', 'Crypto Prof': 'csv/crypto_settings.json', 'Forex Prof': 'csv/forex_settings.json',
'Current Weather Prof': 'csv/current_weather.json', 'News Prof':'csv/news_settings.json', 'Commodities Prof':'csv/commodities_settings.json', 'Indices Prof': 'csv/indices_settings.json', 'Current Weather Prof': 'csv/current_weather.json', 'News Prof':'csv/news_settings.json', 'Commodities Prof':'csv/commodities_settings.json', 'Indices Prof': 'csv/indices_settings.json',
'Daily Forecast Prof':'csv/daily_weather.json', 'Sports (Team Stats) Prof': 'csv/league_tables.json', 'Sports (Upcoming Games) Prof': 'csv/upcoming_games.json', 'Sports (Past Games) Prof': 'csv/past_games.json', 'Custom Messages Prof': 'csv/message_settings.json', 'Custom Images Prof': 'csv/image_settings.json', 'Movies Prof': 'csv/movie_settings.json'} 'Daily Forecast Prof':'csv/daily_weather.json', 'Sports (Team Stats) Prof': 'csv/league_tables.json', 'Sports (Upcoming Games) Prof': 'csv/upcoming_games.json', 'Sports (Past Games) Prof': 'csv/past_games.json', 'Custom Messages Prof': 'csv/message_settings.json', 'Custom Images Prof': 'csv/image_settings.json', 'Movies Prof': 'csv/movie_settings.json', 'Sports (Live Games) Prof': 'csv/live_games.json'}
def openImage(self, image_file): def openImage(self, image_file):
@ -2000,6 +2000,7 @@ class StockTicker():
return news_image return news_image
def getLeagueImage(self, league=False, time = 'past'): def getLeagueImage(self, league=False, time = 'past'):
if time in ['past', 'live']: if time in ['past', 'live']:
@ -2162,6 +2163,421 @@ class StockTicker():
return self.stitchImage(imgs) return self.stitchImage(imgs)
def getLeagueImage(self, league=False, time = 'past'):
if time in ['past', 'live']:
filepath = 'csv/{}_games.json'.format(time)
else:
filepath = 'csv/upcoming_games.json'
f = open(filepath, 'r')
all_settings = json.load(f)
f.close()
title_img = self.openImage('feature_titles/sports_'+ time + '.png')
if all_settings['title']:
title_img = self.openImage('feature_titles/sports_{}.png'.format(time))
imgs = [title_img, self.blank]
else:
imgs = []
leagues_info = all_settings['leagues']
leagues = list(leagues_info.keys())
if time == 'live':
for league in leagues:
try:
x_offset = 0
if league == 'NFL':
f = open('csv/live_nfl.json', 'r')
all_settings = json.load(f)
f.close()
league_info = all_settings['leagues']['NFL'][0]
elif league == 'NHL':
f = open('csv/live_nhl.json', 'r')
all_settings = json.load(f)
f.close()
league_info = all_settings['leagues']['NHL'][0]
elif league == 'NBA':
f = open('csv/live_nba.json', 'r')
all_settings = json.load(f)
f.close()
league_info = all_settings['leagues']['NBA'][0]
elif league == 'MLB':
f = open('csv/live_mlb.json', 'r')
all_settings = json.load(f)
f.close()
league_info = all_settings['leagues']['MLB'][0]
elif league == 'MLS':
f = open('csv/live_mls.json', 'r')
all_settings = json.load(f)
f.close()
league_info = all_settings['leagues']['MLS'][0]
elif league == 'PREMIERLEAGUE':
f = open('csv/live_pl.json', 'r')
all_settings = json.load(f)
f.close()
league_info = all_settings['leagues']['PREMIERLEAGUE'][0]
img = Image.new('RGB', (10000, 32))
try:
league_logo = Image.open('logos/sports/league_logos/{}.png'.format(league)).convert('RGB')
img.paste(league_logo, (x_offset,0))
x_offset += league_logo.size[0] +self.blank.size[0]
except:
pass
slight_large_font = ImageFont.load("./fonts/9x15.pil")
small_font = ImageFont.load("./fonts/5x7.pil")
med_font = ImageFont.load("./fonts/7x14B.pil")
large_font = ImageFont.load("./fonts/9x18B.pil")
extra_small_font = ImageFont.load("./fonts/4x6.pil")
try:
sports_info = self.readSportsCSV(league)
except:
pass
buff_size = 25
if all_settings['leagues'][league][2] == 'no_live' and all_settings['leagues'][league][3] == 'no_upcoming':
no_match = self.textImage(('No live games').upper(), slight_large_font, r = 255, g = 255 , b = 255)
img.paste(no_match, (x_offset,10))
x_offset += no_match.size[0] + buff_size
elif all_settings['leagues'][league][3] != 'no_upcoming':
next_match = self.textImage('Next game: ' + all_settings['leagues'][league][3], slight_large_font, r=255,g=255,b=255)
img.paste(next_match, (x_offset,10))
x_offset += next_match.size[0] + buff_size
else:
for match in league_info:
dateEvent = match['time']
date_timage = self.textImage(dateEvent, small_font, r=255, g=255, b=255)
strHomeTeam = match['home_team']
strAwayTeam = match['away_team']
intHomeScore = str(match['home_score'])
intAwayScore = str(match['away_score'])
try:
home_logo = Image.open('logos/sports/{}/{}'.format(league, sports_info[strHomeTeam]['logo']))
except Exception as e:
home_logo = self.textImage(strHomeTeam.replace(' ', '\n'), extra_small_font, r = 255, g = 255, b = 255)
try:
away_logo = Image.open('logos/sports/{}/{}'.format(league, sports_info[strAwayTeam]['logo']))
except Exception as e:
away_logo = self.textImage(strAwayTeam.replace(' ', '\n'), extra_small_font, r = 255, g = 255, b = 255)
img.paste(home_logo, (x_offset,0))
x_offset += home_logo.size[0] + 4
score_image = self.textImage(intHomeScore + '-' + intAwayScore, large_font, h_buff = 5, r = 255, g = 255, b = 255)
try:
h_colour = mcolors.to_rgb(sports_info[strHomeTeam]['colour'].replace(' ', ''))
except:
pass
try:
a_colour = mcolors.to_rgb(sports_info[strAwayTeam]['colour'].replace(' ', ''))
except:
pass
try:
hc_timage = self.textImage(sports_info[strHomeTeam]['code'], small_font, r = int(h_colour[0]*255), g = int(h_colour[1]*255), b = int(h_colour[2]*255))
except Exception as e:
hc_timage = self.textImage('.', extra_small_font, r = 255, g = 255, b = 255)
try:
ac_timage = self.textImage(sports_info[strAwayTeam]['code'], small_font, r = int(a_colour[0]*255), g = int(a_colour[1]*255), b = int(a_colour[2]*255))
except Exception as e:
ac_timage = self.textImage('.', extra_small_font, r = 255, g = 255, b = 255)
vs_timage = self.textImage('VS', extra_small_font, r = 255, g = 255, b = 255)
vs_size = hc_timage.size[0] + ac_timage.size[0] + vs_timage.size[0]
main_offset = x_offset + int(max(vs_size, date_timage.size[0], score_image.size[0])/2)
img.paste(date_timage,(main_offset - int(date_timage.size[0]/2),0))
img.paste(vs_timage, (main_offset - int(vs_timage.size[0]/2),10))
img.paste(hc_timage, (main_offset - int(vs_timage.size[0]/2) - hc_timage.size[0], 9))
img.paste(score_image, (main_offset - int(score_image.size[0]/2), 15))
if match['isLive'] == 'post':
if intHomeScore > intAwayScore or intHomeScore == intAwayScore:
u_image = Image.new("RGB", (hc_timage.size[0] -2, 1))
u_image1 = ImageDraw.Draw(u_image)
u_image1.line((0,0,hc_timage.size[0]-2,0), fill="red", width = 0)
img.paste(u_image, (main_offset - int(vs_timage.size[0]/2)-hc_timage.size[0], hc_timage.size[1]+7))
img.paste(ac_timage, (main_offset + int(vs_timage.size[0]/2),9))
if match['isLive'] == 'post':
if intHomeScore < intAwayScore or intHomeScore == intAwayScore:
ua_image = Image.new("RGB", (ac_timage.size[0] -2, 1))
ua_image1 = ImageDraw.Draw(ua_image)
ua_image1.line((0,0,ac_timage.size[0]-2,0), fill="red", width = 0)
img.paste(ua_image, (main_offset + int(vs_timage.size[0]/2), ac_timage.size[1]+7))
x_offset = (main_offset + max(int(date_timage.size[0]/2), int(vs_timage.size[0]/2) + ac_timage.size[0], int(score_image.size[0]/2)) + 4)
img.paste(away_logo, (x_offset,0))
x_offset += away_logo.size[0] + buff_size
img = img.crop((0,0,x_offset,32))
imgs.append(img)
except Exception as e:
pass
else:
for league in leagues:
try:
x_offset = 0
if (league =='PGA') or (league == 'LPGA') or (league == 'PGA_EU'):
img = Image.new('RGB', (10000, 32))
else:
img = Image.new('RGB', (10000, 32))
league_info = leagues_info[league]
try:
league_logo = Image.open('logos/sports/league_logos/{}.png'.format(league)).convert('RGB')
if (league == 'PGA') or (league == 'LPGA') or (league == 'PGA_EU'):
x_offset += self.blank.size[0]
else:
img.paste(league_logo, (x_offset,0))
x_offset += league_logo.size[0] +self.blank.size[0]
except:
pass
small_font = ImageFont.load("./fonts/5x7.pil")
med_font = ImageFont.load("./fonts/7x14B.pil")
large_font = ImageFont.load("./fonts/9x18B.pil")
extra_small_font = ImageFont.load("./fonts/4x6.pil")
try:
sports_info = self.readSportsCSV(league)
except:
pass
buff_size = 25
for match in league_info:
dateEvent = match['date'].replace('-', '.')
date_timage = self.textImage(dateEvent, small_font, r=255, g=255, b=255)
if (league == 'PGA') or (league == 'LPGA') or (league == 'PGA_EU'):
event = match['event']
venue = match['venue']
city = match['city']
country = match['country']
season = match['season']
if time != 'future':
golf_standings1 = match['golf_standings'][::2]
golf_standings2 = match['golf_standings'][1::2]
img.paste(league_logo, (x_offset, 0))
x_offset += league_logo.size[0] + 2
if time == 'future':
event_timage = self.textImage(event, med_font, r=255, g=255, b=0)
venue_timage = self.textImage(venue, small_font, r=0, g=255, b=0)
city_timage = self.textImage(city, small_font, r=255, g=255, b=255)
country_timage = self.textImage(country, small_font, r=255, g=255, b=255)
date1_timage = self.textImage('Date:', small_font, r=255, g=0, b=171)
season1_timage = self.textImage('Season:', small_font, r=0, g=170, b=255)
season_timage = self.textImage(season, small_font, r=255, g=255, b=255)
#date
img.paste(date1_timage, (x_offset + 2, 26))
img.paste(date_timage, (x_offset + date1_timage.size[0] + 3, 26))
#event
img.paste(event_timage, (x_offset + 2, 0))
#venue
img.paste(venue_timage,(x_offset + 2, 16))
#country
img.paste(country_timage,(x_offset + event_timage.size[0] + 5,5))
#city
img.paste(city_timage,(x_offset + 15 + venue_timage.size[0], 16))
#season
img.paste(season1_timage,(x_offset + 2 + date1_timage.size[0] + date_timage.size[0] + 20,26))
img.paste(season_timage,(x_offset + 2 + date1_timage.size[0] + date_timage.size[0] + 20 + season1_timage.size[0],26))
x_offset += max(2 + event_timage.size[0] + country_timage.size[0] + 5, 2 + venue_timage.size[0] + city_timage.size[0] + 15, 2 + date1_timage.size[0] + date_timage.size[0] + 20 + season1_timage.size[0] + season_timage.size[0] + 3)
x_offset += buff_size
else:
event_timage = self.textImage(event, med_font, r=255, g=255, b=0)
venue_timage = self.textImage(venue, small_font, r=0, g=255, b=0)
city_timage = self.textImage(city, small_font, r=255, g=255, b=255)
country_timage = self.textImage(country, small_font, r=255, g=255, b=255)
date1_timage = self.textImage('Date:', small_font, r=255, g=0, b=171)
season1_timage = self.textImage('Season:', small_font, r=0, g=170, b=255)
season_timage = self.textImage(season, small_font, r=255, g=255, b=255)
#date
img.paste(date1_timage, (x_offset + 2, 26))
img.paste(date_timage, (x_offset + date1_timage.size[0] + 3, 26))
#event
img.paste(event_timage, (x_offset + 2, 0))
#venue
img.paste(venue_timage,(x_offset + 2, 16))
#country
img.paste(country_timage,(x_offset + event_timage.size[0] + 5,5))
#city
img.paste(city_timage,(x_offset + 15 + venue_timage.size[0], 16))
#season
img.paste(season1_timage,(x_offset + 2 + date1_timage.size[0] + date_timage.size[0] + 20,26))
img.paste(season_timage,(x_offset + 2 + date1_timage.size[0] + date_timage.size[0] + 20 + season1_timage.size[0],26))
x_offset += max(2 + event_timage.size[0] + country_timage.size[0] + 5, 2 + venue_timage.size[0] + city_timage.size[0] + 15, 2 + date1_timage.size[0] + date_timage.size[0] + 20 + season1_timage.size[0] + season_timage.size[0] + 3)
x_offset2 = x_offset
for each_player in golf_standings1:
symbol1_timage = self.textImage('|', small_font, r=255, g=255, b=0)
img.paste(symbol1_timage, (x_offset + 5, 7))
golf_standings1_timage = self.textImage(each_player, small_font, r=255, g=255, b=255)
img.paste(golf_standings1_timage, (x_offset + symbol1_timage.size[0] + 7, 7))
x_offset += (golf_standings1_timage.size[0] + symbol1_timage.size[0] + 7)
for each_player2 in golf_standings2:
symbol2_timage = self.textImage('|', small_font, r=255, g=255, b=0)
img.paste(symbol2_timage, (x_offset2 + 5, 20))
golf_standings2_timage = self.textImage(each_player2, small_font, r=255, g=255, b=255)
img.paste(golf_standings2_timage, (x_offset2 + symbol2_timage.size[0] + 7, 20))
x_offset2 += (golf_standings2_timage.size[0] + symbol2_timage.size[0] + 7)
if x_offset >= x_offset2:
x_offset += buff_size
else:
x_offset = x_offset2
x_offset += buff_size
else:
strHomeTeam = match['home_team']
strAwayTeam = match['away_team']
if time != 'future':
intHomeScore = str(match['home_score'])
intAwayScore = str(match['away_score'])
try:
home_logo = Image.open('logos/sports/{}/{}'.format(league, sports_info[strHomeTeam]['logo']))
except Exception as e:
home_logo = self.textImage(strHomeTeam.replace(' ', '\n'), extra_small_font, r = 255, g = 255, b = 255)
try:
away_logo = Image.open('logos/sports/{}/{}'.format(league, sports_info[strAwayTeam]['logo']))
except Exception as e:
away_logo = self.textImage(strAwayTeam.replace(' ', '\n'), extra_small_font, r = 255, g = 255, b = 255)
img.paste(home_logo, (x_offset,0))
x_offset += home_logo.size[0] + 4
if time == 'future':
#img.paste(date_timage, (x_offset+5, 0))
try:
h_colour = mcolors.to_rgb(sports_info[strHomeTeam]['colour'].replace(' ', ''))
except:
pass
try:
a_colour = mcolors.to_rgb(sports_info[strAwayTeam]['colour'].replace(' ', ''))
except:
pass
vs_timage = self.textImage('vs', med_font, r = 255, g = 255, b = 255, h_buff = 5)
try:
hc_timage = self.textImage(sports_info[strHomeTeam]['code'], med_font, r = int(h_colour[0]*255), g = int(h_colour[1]*255), b = int(h_colour[2]*255))
except Exception as e:
hc_timage = self.textImage('.', extra_small_font, r = 255, g = 255, b = 255)
try:
ac_timage = self.textImage(sports_info[strAwayTeam]['code'], med_font, r = int(a_colour[0]*255), g = int(a_colour[1]*255), b = int(a_colour[2]*255))
except Exception as e:
ac_timage = self.textImage('.', extra_small_font, r = 255, g = 255, b = 255)
vs_size = vs_timage.size[0] + ac_timage.size[0] + hc_timage.size[0]
main_offset = 5 + x_offset + int(max(vs_size, date_timage.size[0])/2)
img.paste(date_timage, (main_offset - int(date_timage.size[0]/2), 0))
img.paste(vs_timage, (main_offset - int(vs_timage.size[0]/2),9))
img.paste(hc_timage, (main_offset - int(vs_timage.size[0]/2) - hc_timage.size[0], 9))
img.paste(ac_timage, (main_offset + int(vs_timage.size[0]/2),9))
x_offset = (main_offset + max(int(date_timage.size[0]/2), int(vs_timage.size[0]/2) + ac_timage.size[0]) + 6)
else:
score_image = self.textImage(intHomeScore + '-' + intAwayScore, large_font, h_buff = 5, r = 255, g = 255, b = 255)
try:
h_colour = mcolors.to_rgb(sports_info[strHomeTeam]['colour'].replace(' ', ''))
except:
pass
try:
a_colour = mcolors.to_rgb(sports_info[strAwayTeam]['colour'].replace(' ', ''))
except:
pass
try:
hc_timage = self.textImage(sports_info[strHomeTeam]['code'], small_font, r = int(h_colour[0]*255), g = int(h_colour[1]*255), b = int(h_colour[2]*255))
except Exception as e:
hc_timage = self.textImage('.', extra_small_font, r = 255, g = 255, b = 255)
try:
ac_timage = self.textImage(sports_info[strAwayTeam]['code'], small_font, r = int(a_colour[0]*255), g = int(a_colour[1]*255), b = int(a_colour[2]*255))
except Exception as e:
ac_timage = self.textImage('.', extra_small_font, r = 255, g = 255, b = 255)
vs_timage = self.textImage('VS', extra_small_font, r = 255, g = 255, b = 255)
vs_size = hc_timage.size[0] + ac_timage.size[0] + vs_timage.size[0]
main_offset = x_offset + int(max(vs_size, date_timage.size[0], score_image.size[0])/2)
img.paste(date_timage,(main_offset - int(date_timage.size[0]/2),0))
img.paste(vs_timage,(main_offset - int(vs_timage.size[0]/2),10))
img.paste(hc_timage, (main_offset - int(vs_timage.size[0]/2) - hc_timage.size[0], 9))
img.paste(score_image, (main_offset - int(score_image.size[0]/2), 15))
if intHomeScore > intAwayScore or intHomeScore == intAwayScore:
u_image = Image.new("RGB", (hc_timage.size[0] -2, 1))
u_image1 = ImageDraw.Draw(u_image)
u_image1.line((0,0,hc_timage.size[0]-2,0), fill="red", width = 0)
img.paste(u_image, (main_offset - int(vs_timage.size[0]/2)-hc_timage.size[0], hc_timage.size[1]+7))
img.paste(ac_timage, (main_offset + int(vs_timage.size[0]/2),9))
if intHomeScore < intAwayScore or intHomeScore == intAwayScore:
ua_image = Image.new("RGB", (ac_timage.size[0] -2, 1))
ua_image1 = ImageDraw.Draw(ua_image)
ua_image1.line((0,0,ac_timage.size[0]-2,0), fill="red", width = 0)
img.paste(ua_image, (main_offset + int(vs_timage.size[0]/2), ac_timage.size[1]+7))
x_offset = (main_offset + max(int(date_timage.size[0]/2), int(vs_timage.size[0]/2) + ac_timage.size[0], int(score_image.size[0]/2)) + 4)
img.paste(away_logo, (x_offset,0))
x_offset += away_logo.size[0]
x_offset += buff_size
img = img.crop((0,0,x_offset ,32))
imgs.append(img)
except Exception as e:
pass
# logf = open('log.txt', "a")
# 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.close()
return self.stitchImage(imgs)
def getLeagueTableImage(self, league = False): def getLeagueTableImage(self, league = False):
f = open('csv/league_tables.json', 'r') f = open('csv/league_tables.json', 'r')
@ -2371,9 +2787,7 @@ class StockTicker():
if time in ['past', 'live']: if time in ['past', 'live']:
filepath = 'csv/{}_games.json'.format(time) filepath = 'csv/{}_games.json'.format(time)
else: else:
filepath = 'csv/upcoming_games.json' filepath = 'csv/upcoming_games.json'
f = open(filepath, 'r') f = open(filepath, 'r')
@ -2381,17 +2795,204 @@ class StockTicker():
f.close() f.close()
title_img = self.openImage('feature_titles/sports_'+ time + '.png') title_img = self.openImage('feature_titles/sports_'+ time + '.png')
imgs = []
if all_settings['title']: if all_settings['title']:
title_img = self.openImage('feature_titles/small_feature_titles/sports_{}.png'.format(time)) title_img = self.openImage('feature_titles/small_feature_titles/sports_{}.png'.format(time))
imgs = [title_img, self.blank] imgs = [title_img, self.blank]
else: else:
imgs = [] imgs = []
leagues_info = all_settings['leagues'] leagues_info = all_settings['leagues']
leagues = list(leagues_info.keys()) leagues = list(leagues_info.keys())
if time == 'live':
for league in leagues:
try:
x_offset = 0
if league == 'NFL':
f = open('csv/live_nfl.json', 'r')
all_settings = json.load(f)
f.close()
league_info = all_settings['leagues']['NFL'][0]
elif league == 'NHL':
f = open('csv/live_nhl.json', 'r')
all_settings = json.load(f)
f.close()
league_info = all_settings['leagues']['NHL'][0]
elif league == 'NBA':
f = open('csv/live_nba.json', 'r')
all_settings = json.load(f)
f.close()
league_info = all_settings['leagues']['NBA'][0]
elif league == 'MLB':
f = open('csv/live_mlb.json', 'r')
all_settings = json.load(f)
f.close()
league_info = all_settings['leagues']['MLB'][0]
elif league == 'MLS':
f = open('csv/live_mls.json', 'r')
all_settings = json.load(f)
f.close()
league_info = all_settings['leagues']['MLS'][0]
elif league == 'PREMIERLEAGUE':
f = open('csv/live_pl.json', 'r')
all_settings = json.load(f)
f.close()
league_info = all_settings['leagues']['PREMIERLEAGUE'][0]
img = Image.new('RGB', (10000, 32))
try:
league_logo = Image.open('logos/sports/league_logos/{}.png'.format(league)).convert('RGB')
width, height = league_logo.size
league_logo2 = league_logo.resize((int(width/2), int(height/2)))
img.paste(league_logo2, (x_offset,0))
x_offset += (league_logo2.size[0]+10)
except:
pass
font = ImageFont.load("./fonts/6x10.pil")
small_font = ImageFont.load("./fonts/4x6.pil")
try:
sports_info = self.readSportsCSV(league)
except:
pass
buff_size = 20
if all_settings['leagues'][league][2] == 'no_live' and all_settings['leagues'][league][3] == 'no_upcoming':
no_match = self.textImage(('No live games').upper(), font, r = 255, g = 255 , b = 255)
img.paste(no_match, (x_offset,4))
x_offset += no_match.size[0]
elif all_settings['leagues'][league][3] != 'no_upcoming':
next_match = self.textImage('Next game: ' + all_settings['leagues'][league][3], font, r=255,g=255,b=255)
img.paste(next_match, (x_offset,4))
x_offset += next_match.size[0]
else:
for match in league_info:
dateEvent = match['time']
date_timage = self.textImage(dateEvent, small_font, r = 255, g = 255, b = 255)
strHomeTeam = match['home_team']
strAwayTeam = match['away_team']
intHomeScore = str(match['home_score'])
intAwayScore = str(match['away_score'])
try:
home_logo = Image.open('logos/sports/{}/{}'.format(league, sports_info[strHomeTeam]['logo']))
width1, height1 = home_logo.size
home_logo1 = home_logo.resize((int(width1/2), int(height1/2)))
except Exception as e:
home_logo1 = self.textImage(strHomeTeam, small_font, r = 255, g = 255, b = 255)
try:
away_logo = Image.open('logos/sports/{}/{}'.format(league, sports_info[strAwayTeam]['logo']))
width2, height2 = away_logo.size
away_logo1 = away_logo.resize((int(width2/2), int(height2/2)))
except Exception as e:
away_logo1 = self.textImage(strAwayTeam, small_font, r = 255, g = 255, b = 255)
error = False
img.paste(home_logo1, (x_offset,0))
x_offset += (home_logo1.size[0] + 2)
score_image = self.textImage(intHomeScore + '-' + intAwayScore, font, h_buff = 5, r = 255, g = 255, b = 255)
try:
h_colour = mcolors.to_rgb(sports_info[strHomeTeam]['colour'].replace(' ', ''))
except:
pass
try:
a_colour = mcolors.to_rgb(sports_info[strAwayTeam]['colour'].replace(' ', ''))
except:
pass
try:
hc_timage = self.textImage(sports_info[strHomeTeam]['code'], font, r = int(h_colour[0]*255), g = int(h_colour[1]*255), b = int(h_colour[2]*255))
except:
hc_timage = self.textImage('.', small_font, r = 255, g = 255, b = 255)
error = True
try:
ac_timage = self.textImage(sports_info[strAwayTeam]['code'], font, r = int(a_colour[0]*255), g = int(a_colour[1]*255), b = int(a_colour[2]*255))
except:
ac_timage = self.textImage('.', small_font, r = 255, g = 255, b = 255)
error = True
if date_timage.size[0] > (hc_timage.size[0] + 2 + score_image.size[0] + ac_timage.size[0]):
x_offset10 = x_offset + int((date_timage.size[0]/2)-(score_image.size[0]/2)-hc_timage.size[0])
img.paste(date_timage,(x_offset, 0))
img.paste(score_image, (x_offset + int((date_timage.size[0]/2)-(score_image.size[0]/2)), 5))
x_offset += date_timage.size[0]
img.paste(hc_timage,(x_offset10, 5))
if match['isLive'] == 'post':
if intHomeScore > intAwayScore or intHomeScore == intAwayScore:
u_image = Image.new("RGB", (hc_timage.size[0] -3, 1))
u_image1 = ImageDraw.Draw(u_image)
u_image1.line((0,0,hc_timage.size[0]-3,0), fill="red", width = 0)
img.paste(u_image, (x_offset10, hc_timage.size[1]+4))
x_offset10 += hc_timage.size[0] + score_image.size[0]
img.paste(ac_timage,(x_offset10, 5))
if match['isLive'] == 'post':
if intHomeScore < intAwayScore or intHomeScore == intAwayScore:
ua_image = Image.new("RGB", (ac_timage.size[0] -3, 1))
ua_image1 = ImageDraw.Draw(ua_image)
ua_image1.line((0,0,ac_timage.size[0]-3,0), fill="red", width = 0)
img.paste(ua_image, (x_offset10, ac_timage.size[1]+4))
x_offset10 += ac_timage.size[0]
if error:
img.paste(away_logo1, (max(x_offset + date_timage.size[0], x_offset10),0))
x_offset += (away_logo1.size[0] + date_timage.size[0])
else:
img.paste(away_logo1, (max(x_offset,x_offset10),0))
x_offset += away_logo1.size[0]
else:
x_offset_date = (x_offset + hc_timage.size[0] + int(score_image.size[0]/2) - int(date_timage.size[0]/2))
img.paste(date_timage, (x_offset_date,0))
#img.paste(date_timage, (x_offset+20+int((score_image.size[0] - date_timage.size[0])/2),0))
img.paste(hc_timage, (x_offset, 5))
if match['isLive'] == 'post':
if intHomeScore > intAwayScore or intHomeScore == intAwayScore:
u_image = Image.new("RGB", (hc_timage.size[0] -3, 1))
u_image1 = ImageDraw.Draw(u_image)
u_image1.line((0,0,hc_timage.size[0]-3,0), fill="red", width = 0)
img.paste(u_image, (x_offset, hc_timage.size[1]+4))
x_offset += hc_timage.size[0]
img.paste(score_image, (x_offset, 5))
x_offset += score_image.size[0]
img.paste(ac_timage, (x_offset, 5))
if match['isLive'] == 'post':
if intHomeScore < intAwayScore or intHomeScore == intAwayScore:
ua_image = Image.new("RGB", (ac_timage.size[0] -3, 1))
ua_image1 = ImageDraw.Draw(ua_image)
ua_image1.line((0,0,ac_timage.size[0]-3,0), fill="red", width = 0)
img.paste(ua_image, (x_offset, ac_timage.size[1]+4))
x_offset += ac_timage.size[0]
x_offset_date += date_timage.size[0]
if error:
img.paste(away_logo1, (max(x_offset + date_timage.size[0], x_offset_date),0))
x_offset += (away_logo1.size[0] + date_timage.size[0])
else:
img.paste(away_logo1, (max(x_offset,x_offset_date),0))
x_offset += away_logo1.size[0]
x_offset += buff_size
x_offset += 20
img = img.crop((0,0,x_offset ,16))
imgs.append(img)
except:
pass
else:
for league in leagues: for league in leagues:
try: try:
x_offset = 0 x_offset = 0
@ -2403,6 +3004,10 @@ class StockTicker():
league_logo = Image.open('logos/sports/league_logos/{}.png'.format(league)).convert('RGB') league_logo = Image.open('logos/sports/league_logos/{}.png'.format(league)).convert('RGB')
width, height = league_logo.size width, height = league_logo.size
league_logo2 = league_logo.resize((int(width/2), int(height/2))) league_logo2 = league_logo.resize((int(width/2), int(height/2)))
if (league == 'PGA') or (league == 'LPGA') or (league == 'PGA_EU'):
x_offset += 10
else:
img.paste(league_logo2, (x_offset,0)) img.paste(league_logo2, (x_offset,0))
x_offset += (league_logo2.size[0]+10) x_offset += (league_logo2.size[0]+10)
except: except:
@ -2412,12 +3017,110 @@ class StockTicker():
font = ImageFont.load("./fonts/6x10.pil") font = ImageFont.load("./fonts/6x10.pil")
small_font = ImageFont.load("./fonts/4x6.pil") small_font = ImageFont.load("./fonts/4x6.pil")
try:
sports_info = self.readSportsCSV(league) sports_info = self.readSportsCSV(league)
except:
pass
buff_size = 20 buff_size = 20
for match in league_info: for match in league_info:
dateEvent = match['date'].replace('-', '.')
date_timage = self.textImage(dateEvent, small_font, r = 255, g = 255, b = 255)
if (league == 'PGA') or (league == 'LPGA') or (league == 'PGA_EU'):
event = match['event']
venue = match['venue']
city = match['city']
country = match['country']
season = match['season']
if time != 'future':
golf_standings1 = match['golf_standings'][::2]
golf_standings2 = match['golf_standings'][1::2]
img.paste(league_logo2, (x_offset, 0))
x_offset += league_logo2.size[0] + 5
if time == 'future':
event_timage = self.textImage(event, small_font, r=255, g=255, b=0)
venue_timage = self.textImage(venue, small_font, r=0, g=255, b=0)
city_timage = self.textImage(city, small_font, r=255, g=255, b=255)
country_timage = self.textImage(country, small_font, r=255, g=255, b=255)
season1_timage = self.textImage('Season:', small_font, r=0, g=170, b=255)
season_timage = self.textImage(season, small_font, r=255, g=255, b=255)
date1_timage = self.textImage('Date:', small_font, r=255, g=0, b=171)
#event
img.paste(event_timage, (x_offset, 1))
#venue
img.paste(venue_timage,(x_offset, 9))
x_offset += (max(event_timage.size[0], venue_timage.size[0]) + 5)
#date
img.paste(date1_timage, (x_offset, 1))
img.paste(date_timage, (x_offset + date1_timage.size[0] + 2, 1))
#city
img.paste(city_timage,(x_offset, 9))
#country
img.paste(country_timage,(x_offset + city_timage.size[0] + 7,9))
#season
img.paste(season1_timage,(x_offset + date1_timage.size[0] + 2 + date_timage.size[0] + 5,1))
img.paste(season_timage,(x_offset + date1_timage.size[0] + 2 + date_timage.size[0] + season1_timage.size[0] + 5,1))
x_offset += max(date1_timage.size[0] + 2 + date_timage.size[0] + season1_timage.size[0] + 5 + season_timage.size[0], city_timage.size[0] + 7 + country_timage.size[0])
x_offset += (buff_size - 10)
else:
event_timage = self.textImage(event, small_font, r=255, g=255, b=0)
venue_timage = self.textImage(venue, small_font, r=0, g=255, b=0)
city_timage = self.textImage(city, small_font, r=255, g=255, b=255)
country_timage = self.textImage(country, small_font, r=255, g=255, b=255)
season1_timage = self.textImage('Season:', small_font, r=0, g=170, b=255)
season_timage = self.textImage(season, small_font, r=255, g=255, b=255)
date1_timage = self.textImage('Date:', small_font, r=255, g=0, b=171)
#event
img.paste(event_timage, (x_offset, 1))
#venue
img.paste(venue_timage,(x_offset, 9))
x_offset += (max(event_timage.size[0], venue_timage.size[0]) + 5)
#date
img.paste(date1_timage, (x_offset, 1))
img.paste(date_timage, (x_offset + date1_timage.size[0] + 2, 1))
#city
img.paste(city_timage,(x_offset, 9))
#country
img.paste(country_timage,(x_offset + city_timage.size[0] + 7,9))
#season
img.paste(season1_timage,(x_offset + date1_timage.size[0] + 2 + date_timage.size[0] + 5,1))
img.paste(season_timage,(x_offset + date1_timage.size[0] + 2 + date_timage.size[0] + season1_timage.size[0] + 5,1))
x_offset += max(date1_timage.size[0] + 2 + date_timage.size[0] + season1_timage.size[0] + 5 + season_timage.size[0], city_timage.size[0] + 7 + country_timage.size[0])
x_offset2 = x_offset
for each_player in golf_standings1:
symbol1_timage = self.textImage('|', small_font, r=255, g=255, b=0)
img.paste(symbol1_timage, (x_offset + 5, 1))
golf_standings1_timage = self.textImage(each_player, small_font, r=255, g=255, b=255)
img.paste(golf_standings1_timage, (x_offset + symbol1_timage.size[0] + 7, 1))
x_offset += (golf_standings1_timage.size[0] + symbol1_timage.size[0] + 7)
for each_player2 in golf_standings2:
symbol2_timage = self.textImage('|', small_font, r=255, g=255, b=0)
img.paste(symbol2_timage, (x_offset2 + 5, 9))
golf_standings2_timage = self.textImage(each_player2, small_font, r=255, g=255, b=255)
img.paste(golf_standings2_timage, (x_offset2 + symbol2_timage.size[0] + 7, 9))
x_offset2 += (golf_standings2_timage.size[0] + symbol2_timage.size[0] + 7)
if x_offset >= x_offset2:
x_offset += (buff_size - 10)
else:
x_offset = x_offset2
x_offset += (buff_size - 10)
else:
strHomeTeam = match['home_team'] strHomeTeam = match['home_team']
strAwayTeam = match['away_team'] strAwayTeam = match['away_team']
@ -2425,16 +3128,13 @@ class StockTicker():
intHomeScore = str(match['home_score']) intHomeScore = str(match['home_score'])
intAwayScore = str(match['away_score']) intAwayScore = str(match['away_score'])
dateEvent = match['date'].replace('-', '.')
try: try:
home_logo = Image.open('logos/sports/{}/{}'.format(league, sports_info[strHomeTeam]['logo'])) home_logo = Image.open('logos/sports/{}/{}'.format(league, sports_info[strHomeTeam]['logo']))
width1, height1 = home_logo.size width1, height1 = home_logo.size
home_logo1 = home_logo.resize((int(width1/2), int(height1/2))) home_logo1 = home_logo.resize((int(width1/2), int(height1/2)))
except Exception as e: except Exception as e:
home_logo1 = self.textImage(strHomeTeam.replace(' ', '\n'), font, r = 255, g = 255, b = 255) home_logo1 = self.textImage(strHomeTeam, small_font, r = 255, g = 255, b = 255)
try: try:
@ -2443,27 +3143,38 @@ class StockTicker():
width2, height2 = away_logo.size width2, height2 = away_logo.size
away_logo1 = away_logo.resize((int(width2/2), int(height2/2))) away_logo1 = away_logo.resize((int(width2/2), int(height2/2)))
except Exception as e: except Exception as e:
away_logo1 = self.textImage(strAwayTeam.replace(' ', '\n'), font, r = 255, g = 255, b = 255) away_logo1 = self.textImage(strAwayTeam, small_font, r = 255, g = 255, b = 255)
date_timage = self.textImage(dateEvent, small_font, r = 255, g = 255, b = 255)
error = False
img.paste(home_logo1, (x_offset,0)) img.paste(home_logo1, (x_offset,0))
x_offset += (home_logo1.size[0] + 2) x_offset += (home_logo1.size[0] + 2)
if time == 'future': if time == 'future':
img.paste(date_timage, (x_offset+5, 0)) try:
h_colour = mcolors.to_rgb(sports_info[strHomeTeam]['colour'].replace(' ', '')) h_colour = mcolors.to_rgb(sports_info[strHomeTeam]['colour'].replace(' ', ''))
except:
pass
try:
a_colour = mcolors.to_rgb(sports_info[strAwayTeam]['colour'].replace(' ', '')) a_colour = mcolors.to_rgb(sports_info[strAwayTeam]['colour'].replace(' ', ''))
except:
pass
try:
hc_timage = self.textImage(sports_info[strHomeTeam]['code'], font, r = int(h_colour[0]*255), g = int(h_colour[1]*255), b = int(h_colour[2]*255)) hc_timage = self.textImage(sports_info[strHomeTeam]['code'], font, r = int(h_colour[0]*255), g = int(h_colour[1]*255), b = int(h_colour[2]*255))
except:
hc_timage = self.textImage('.', small_font, r = 255, g = 255, b = 255)
error = True
try:
ac_timage = self.textImage(sports_info[strAwayTeam]['code'], font, r = int(a_colour[0]*255), g = int(a_colour[1]*255), b = int(a_colour[2]*255)) ac_timage = self.textImage(sports_info[strAwayTeam]['code'], font, r = int(a_colour[0]*255), g = int(a_colour[1]*255), b = int(a_colour[2]*255))
vs_timage = self.textImage('vs', font, r = 255, g = 255, b = 255, h_buff = 5) except:
ac_timage = self.textImage('.', small_font, r = 255, g = 255, b = 255)
error = True
vs_timage = self.textImage('vs', font, r = 255, g = 255, b = 255, h_buff = 5)
x_offsetdate2 = x_offset + int((hc_timage.size[0] + vs_timage.size[0] + ac_timage.size[0])/2)- int(date_timage.size[0]/2)
img.paste(date_timage, (x_offsetdate2,0))
x_offsetdate2 += date_timage.size[0]
img.paste(hc_timage, (x_offset, 5)) img.paste(hc_timage, (x_offset, 5))
x_offset += hc_timage.size[0] x_offset += hc_timage.size[0]
img.paste(vs_timage, (x_offset, 5)) img.paste(vs_timage, (x_offset, 5))
@ -2472,20 +3183,46 @@ class StockTicker():
x_offset += ac_timage.size[0] x_offset += ac_timage.size[0]
#x_offset += max(date_timage.size[0], (hc_timage.size[0] + vs_timage.size[0] + ac_timage.size[0])) #x_offset += max(date_timage.size[0], (hc_timage.size[0] + vs_timage.size[0] + ac_timage.size[0]))
else: else:
score_image = self.textImage(intHomeScore + '-' + intAwayScore, font, h_buff = 5, r = 255, g = 255, b = 255) score_image = self.textImage(intHomeScore + '-' + intAwayScore, font, h_buff = 5, r = 255, g = 255, b = 255)
try:
h_colour = mcolors.to_rgb(sports_info[strHomeTeam]['colour'].replace(' ', '')) h_colour = mcolors.to_rgb(sports_info[strHomeTeam]['colour'].replace(' ', ''))
except:
pass
try:
a_colour = mcolors.to_rgb(sports_info[strAwayTeam]['colour'].replace(' ', '')) a_colour = mcolors.to_rgb(sports_info[strAwayTeam]['colour'].replace(' ', ''))
except:
pass
try:
hc_timage = self.textImage(sports_info[strHomeTeam]['code'], font, r = int(h_colour[0]*255), g = int(h_colour[1]*255), b = int(h_colour[2]*255)) hc_timage = self.textImage(sports_info[strHomeTeam]['code'], font, r = int(h_colour[0]*255), g = int(h_colour[1]*255), b = int(h_colour[2]*255))
except:
hc_timage = self.textImage('.', small_font, r = 255, g = 255, b = 255)
error = True
try:
ac_timage = self.textImage(sports_info[strAwayTeam]['code'], font, r = int(a_colour[0]*255), g = int(a_colour[1]*255), b = int(a_colour[2]*255)) ac_timage = self.textImage(sports_info[strAwayTeam]['code'], font, r = int(a_colour[0]*255), g = int(a_colour[1]*255), b = int(a_colour[2]*255))
except:
ac_timage = self.textImage('.', small_font, r = 255, g = 255, b = 255)
error = True
img.paste(date_timage, (x_offset+20+int((score_image.size[0] - date_timage.size[0])/2),0)) x_offsetdate2 = x_offset + hc_timage.size[0] + int(score_image.size[0]/2)- int(date_timage.size[0]/2)
img.paste(date_timage, (x_offsetdate2,0))
x_offsetdate2 += date_timage.size[0]
#img.paste(date_timage, (x_offset+20+int((score_image.size[0] - date_timage.size[0])/2),0))
img.paste(hc_timage, (x_offset, 5)) img.paste(hc_timage, (x_offset, 5))
if intHomeScore > intAwayScore or intHomeScore == intAwayScore:
u_image = Image.new("RGB", (hc_timage.size[0] -3, 1))
u_image1 = ImageDraw.Draw(u_image)
u_image1.line((0,0,hc_timage.size[0]-3,0), fill="red", width = 0)
img.paste(u_image, (x_offset, hc_timage.size[1]+4))
x_offset += hc_timage.size[0] x_offset += hc_timage.size[0]
img.paste(score_image, (x_offset, 5)) img.paste(score_image, (x_offset, 5))
x_offset += score_image.size[0] x_offset += score_image.size[0]
img.paste(ac_timage, (x_offset, 5)) img.paste(ac_timage, (x_offset, 5))
if intHomeScore < intAwayScore or intHomeScore == intAwayScore:
ua_image = Image.new("RGB", (ac_timage.size[0] -3, 1))
ua_image1 = ImageDraw.Draw(ua_image)
ua_image1.line((0,0,ac_timage.size[0]-3,0), fill="red", width = 0)
img.paste(ua_image, (x_offset, ac_timage.size[1]+4))
x_offset += ac_timage.size[0] x_offset += ac_timage.size[0]
# if date_timage.size[0] > score_image.size[0]: # if date_timage.size[0] > score_image.size[0]:
@ -2505,16 +3242,20 @@ class StockTicker():
# x_offset += max( date_timage.size[0]+4, hc_timage.size[0] + vs_timage.size[0] + ac_timage.size[0]+4, 2 + int(score_image.size[0])) # x_offset += max( date_timage.size[0]+4, hc_timage.size[0] + vs_timage.size[0] + ac_timage.size[0]+4, 2 + int(score_image.size[0]))
img.paste(away_logo1, (x_offset,0)) if error:
img.paste(away_logo1, (max(x_offset + date_timage.size[0], x_offsetdate2),0))
x_offset += (away_logo1.size[0] + date_timage.size[0])
else:
img.paste(away_logo1, (max(x_offset, x_offsetdate2),0))
x_offset += away_logo1.size[0] x_offset += away_logo1.size[0]
x_offset += buff_size x_offset += buff_size
x_offset += 20 x_offset += 20
img = img.crop((0,0,x_offset ,16)) img = img.crop((0,0,x_offset ,16))
imgs.append(img) imgs.append(img)
except: except:
pass pass
return self.stitchImage(imgs) return self.stitchImage(imgs)
@ -3679,6 +4420,7 @@ class StockTicker():
sports_stats = self.getLeagueTableProfessional() sports_stats = self.getLeagueTableProfessional()
sports_upcoming = self.getLeagueProfessional() sports_upcoming = self.getLeagueProfessional()
sports_past = self.getLeagueProfessional() sports_past = self.getLeagueProfessional()
sports_live = self.getLeagueProfessional()
movies = self.getMoviesProfessional() movies = self.getMoviesProfessional()
messages = self.getUserMessagesProfessional() messages = self.getUserMessagesProfessional()
images = self.getUserImagesProfessional() images = self.getUserImagesProfessional()
@ -3704,6 +4446,8 @@ class StockTicker():
x_offset += sports_upcoming.size[0] x_offset += sports_upcoming.size[0]
news.paste(sports_past, (x_offset, 16)) news.paste(sports_past, (x_offset, 16))
x_offset += sports_past.size[0] x_offset += sports_past.size[0]
news.paste(sports_live, (x_offset, 16))
x_offset += sports_live.size[0]
news.paste(movies, (x_offset, 16)) news.paste(movies, (x_offset, 16))
x_offset += movies.size[0] x_offset += movies.size[0]
news.paste(messages, (x_offset, 16)) news.paste(messages, (x_offset, 16))