- import clr
- clr.AddReference("Wtvision.Sports.Tools.UefaDigitalAPIImporter")
- from Wtvision.Sports import UefaDigitalApiProxy
- from System.Collections import Hashtable
- from System import Array, DateTime
- from System.Threading.Tasks import Task
- from Wtvision.Sports.Uefa import EventTypes
- import smartpaging
- import helper
- Stats = ["ball_possession", "attempts_on_target", "attempts", "corners", "fouls_suffered"]
- def __beforeProgram(graphicOnAirItem, momentExecution):
- extradata = graphicOnAirItem.ExtraData
- helper.GraphicTakeIn("ScoreWithScorers_OtherMatches", GraphicTemplatesManager, OutputManager, IntelliflowController, extradata = extradata)
- graphicOnAirItem.Scene.Show("Substitutes_to_Statistics")
- def updateGames(extradata):
- matches = UefaDigitalApiProxy.GetMatches(offset= "0",limit = "500",competitionId = Array[str]([Game.Competition.IdCompetition]),matchDayId = Array[str]([matchDayId]))
- matches = sorted(matches, key=lambda match: match.KickOffTime.DateTime)
- matches = [match for match in matches if match.Type.ToString().upper() == leg] ## ONLY LEG GAMES
- # current_date = DateTime.Today.AddDays(-3)
- current_date = __getMyMatch()
- matches = matches = [match for match in matches if match.KickOffTime.Date == current_date.KickOffTime.Date] # JUST FOR TODAY GAMES
- #matches = filter(lambda match: match.Id != Game.ExternalId, matches) # REMOVE THE ATIVE GAME
- #matches_live = [match for match in matches if match.Status.ToString().upper() == "LIVE"] # JUST FOR LIVE GAMES
- matches_live = matches
- matches_finished = [match for match in matches if match.Status.ToString().upper() == "FINISHED"]
- matches_upcoming = [match for match in matches if match.Status.ToString().upper() == "UPCOMING"]
- #games_to_show = smartpaging.NonUniformPaging(len(matches_live), 9)
- ##ONLY FOR 18 GAMES LIVE
- games=[]
- games.append(matches[0:9])
- games.append(matches[9:18])
- len_matches = len(matches)# if len(matches) <= 9 else 9
- helper.SetExtraData(extradata, "total", len_matches)#len(matches_live) + len(matches_finished))
- helper.SetExtraData(extradata, "index", 0)#len(matches_finished))
- helper.SetExtraData(extradata, "pageIndex", 0)#len(matches) - (len(matches_live) + len(matches_upcoming)))
- helper.SetExtraData(extradata, "pages", (smartpaging.NonUniformPaging(len_matches, 1)))
- helper.SetExtraData(extradata, "allMatches", matches)
- helper.SetExtraData(extradata, "matchesToBottom", matches)
- helper.SetExtraData(extradata, "allMatchesLive", matches_live)
- helper.SetExtraData(extradata, "games", games)
- def __onStart(graphicOnAirItem, momentExecution, workFlowtype):
- extradata = graphicOnAirItem.ExtraData
- if not extradata.ContainsKey("ExternalTake"):
- helper.SetExtraData(extradata, "ExternalTake", "True")
- competitionId = Game.Competition.IdCompetition
- matchDayId = Game.Attributes["MatchDayId"]
- ### METHOD TO GET ACTUAL LEG
- matchId = Game.ExternalId
- active_game_events = UefaDigitalApiProxy.GetMatch(matchId = matchId)
- leg = active_game_events.Type.ToString().upper()
- ### END
- if extradata["ExternalTake"] == "True":
- updateGames(graphicOnAirItem.ExtraData)
- if len(matches) == 0:
- momentExecution.MessageType = momentExecution.MessageType.Info
- momentExecution.Message = "LINEUP AND STATS OTHER MATCHES: No matches found!"
- momentExecution.Cancel = True
- return
- if len(matches) == 1:
- momentExecution.MessageType = momentExecution.MessageType.Info
- momentExecution.Message = "LINEUP AND STATS OTHER MATCHES: Only 1 match live!"
- momentExecution.Cancel = True
- return
- return
- def __getMyMatch():
- """Get My Match
- Parameters:
- team: Wtvision.Sports.Team
- Returns:
- bool:Returns match array for Today
- """
- competitionId = Game.Competition.IdCompetition
- matchDayId = Game.Attributes["MatchDayId"]
- matches = UefaDigitalApiProxy.GetMatches(offset= "0",limit = "500",competitionId = Array[str]([Game.Competition.IdCompetition]),matchDayId = Array[str]([matchDayId]))
- matchId = Game.ExternalId
- mygame = next(iter([match for match in matches if match.Id == matchId]), None) # Get myGame
- if not mygame:
- #No Data
- return None
- #matches = sorted(matches, key=lambda match: match.KickOffTime.DateTime)# No need just games for today
- return mygame # JUST GAMES IN THE SAME DAY OF MY GAME
- def __getCards(matchId):
- game_events = UefaDigitalApiProxy.GetMatchEvents(matchId = matchId, filter = EventTypes.CARDS, offset= "0",limit = "500")
- result = {}
- for event in game_events:
- if hasattr(event.PrimaryActor.Person, "Id"):
- result[event.PrimaryActor.Person.Id] = str(event.Type)
- return result
- def __getData(graphicOnAirItem, viewBag, momentExecution):
- #try:
- __clearTags(viewBag)
- extradata = graphicOnAirItem.ExtraData
- competitionId = Game.Competition.IdCompetition
- matchDayId = Game.Attributes["MatchDayId"]
- index = extradata["index"]
- pageIndex = extradata["pageIndex"]
- pages = extradata["pages"]
- if pageIndex > len(pages):
- momentExecution.MessageType = momentExecution.MessageType.Info
- momentExecution.Message = "No RESULTS to show."
- momentExecution.Cancel = True
- return
- pageEnd = pages[pageIndex]
- allMatches = extradata["allMatches"]
- matchesToBottom = extradata["matchesToBottom"]
- allMatchesLive = extradata["allMatchesLive"]
- match = allMatches[pageIndex]
- helper.SetExtraData(extradata, "match", match) ## info for score with scorers
- matchId = match.Id
- lineUp = UefaDigitalApiProxy.GetMatchLineups(matchId = match.Id)
- print "---------------------------------------- /START FILL/ --------------------------------------------------------------------------------"
- for tagName in ["Home", "Away"]:
- if tagName == "Home":
- __FillTeamData(lineUp.HomeTeam, viewBag,tagName,matchId)
- viewBag.SetString("t{TeamTag}BottomTeamHighlight".format(TeamTag=tagName), match.HomeTeam.TeamCode.ToString().upper())
- else:
- __FillTeamData(lineUp.AwayTeam, viewBag,tagName,matchId)
- viewBag.SetString("t{TeamTag}BottomTeamHighlight".format(TeamTag=tagName), match.AwayTeam.TeamCode.ToString().upper())
- print "---------------------------------------- /END FILL/ --------------------------------------------------------------------------------"
- ########## FILL BOTTOM INFORMATION
- viewBag.SetFloat("vBottomGames", len(matchesToBottom))
- __fillBottomInformation(graphicOnAirItem, viewBag, matchesToBottom)
- #print "teste"
- game_stats = UefaDigitalApiProxy.GetTeamStatistic(matchId = match.Id)
- __fill_stats(viewBag, game_stats)
- ########### FILL LINEUPS
- lineUp = UefaDigitalApiProxy.GetMatchLineups(matchId = match.Id)
- helper.SetExtraData(extradata, "ExternalTake", "True")
- helper.SetExtraData(extradata, "index", index + int(pageEnd))
- helper.SetExtraData(extradata, "pageIndex", pageIndex+1)
- helper.SetExtraData(extradata, "lenAllMatchesLive", len(allMatchesLive))
- __updateSubstitutions(viewBag, matchId,lineUp)
- # except Exception as e:
- # momentExecution.Message ="ERROR LINEUP_STATS_ALLMATCHES: %s" % str(e)
- # momentExecution.MessageType = momentExecution.MessageType.Warning
- # momentExecution.Cancel = True
- # return
- def __FillTeamData(team, viewBag,tagName,matchId):
- ##GET Cards For Match
- cards = __getCards(matchId)
- print "TagName --> %s"%tagName
- print "team--->%s"%team
- ## HOME LINEUP
- if hasattr(team, "Coaches") and len(team.Coaches) > 0:
- viewBag.SetTranslatedText("t{teamTag}CoachFunction".format(teamTag=tagName), "{{%s}}.{{LineUp}}|filter:ToUpper " % team.Coaches[0].Role)
- if "EN" in team.Coaches[0].Person.Translations.ShortName:
- # viewBag.SetString("tHomeCoachFirstName", lineUp.HomeTeam.Coaches[0].Person.Translations.FirstName["EN"].ToString().upper())
- viewBag.SetString("t{teamTag}CoachLastName".format(teamTag=tagName) , team.Coaches[0].Person.Translations.ShortName["EN"].ToString().upper())
- viewBag.SetString("v{teamTag}CoachCard".format(teamTag=tagName), 0)
- for enum,player in enumerate(team.Field):
- viewBag.SetVisibility("v{teamTag}SubstitutionVisibility%02d".format(teamTag=tagName) % (enum+1), False)
- viewBag.SetString("t{teamTag}Number%02d".format(teamTag=tagName) % (enum+1), player.JerseyNumber.ToString())
- if player.Player.Id in cards.keys():
- viewBag.SetVisibility("v{teamTag}AtRiskVisibility%02d".format(teamTag=tagName) % (enum+1), True)
- viewBag.SetFloat("v{teamTag}Card%02d".format(teamTag=tagName) % (enum+1), 1 if cards[player.Player.Id]=="YELLOW_CARD" else 2)
- else:
- viewBag.SetFloat("v{teamTag}Card%02d".format(teamTag=tagName) % (enum+1), 0)
- # if "EN" in player.Player.Translations.FirstName:
- # viewBag.SetString("tHomeName%02d" % (enum+1), player.Player.Translations.FirstName["EN"].ToString().upper())
- if hasattr(player.Player.Translations, "ShortName"):
- viewBag.SetString("t{teamTag}LastName%02d".format(teamTag=tagName) % (enum+1), player.Player.Translations.ShortName["EN"].ToString().upper())
- def __updateSubstitutions(viewBag, matchId, lineUp):
- home_team_id = lineUp.HomeTeam.Team.Id.ToString()
- away_team_id = lineUp.AwayTeam.Team.Id.ToString()
- substitution_events_home = []
- substitution_events_away = []
- game_events = UefaDigitalApiProxy.GetMatchEvents(matchId = matchId, filter = EventTypes.LINEUP, offset= "0",limit = "500")
- substitution_events = filter(lambda sub_event: sub_event.Type.ToString().upper() == "SUBSTITUTION", game_events) # FILTER TO SHOW ONLY SUBSTITUTION EVENTS
- substitution_events_home = filter(lambda sub: sub.PrimaryActor.Team.Id.ToString() == home_team_id, substitution_events)
- substitution_events_away = filter(lambda sub: sub.PrimaryActor.Team.Id.ToString() == away_team_id, substitution_events)
- if len(substitution_events_home) >= 5:
- viewBag.SetFloat("vHomeSubstitutes", 5)
- else:
- viewBag.SetFloat("vHomeSubstitutes", len(substitution_events_home))
- if len(substitution_events_away) >= 5:
- viewBag.SetFloat("vAwaySubstitutes", 5)
- else:
- viewBag.SetFloat("vAwaySubstitutes", len(substitution_events_away))
- if substitution_events_home > 0:
- for enum, sub_event in enumerate(substitution_events_home):
- player_home_id = sub_event.PrimaryActor.Person.Id
- index = next((i for i,x in enumerate(lineUp.HomeTeam.Field,1) if player_home_id == x.Player.Id), None)
- if index:
- viewBag.SetVisibility("vHomeSubstitutionVisibility%02d" % index, True)
- if "EN" in sub_event.SecondaryActor.Person.Translations.ShortName:
- # viewBag.SetString("tHomeSubstitutionName%02d" % (enum+1), sub_event.SecondaryActor.Person.Translations.FirstName["EN"].ToString().upper())
- viewBag.SetString("tHomeSubstitutionLastName%02d" % (enum+1), sub_event.SecondaryActor.Person.Translations.ShortName["EN"].ToString().upper())
- if substitution_events_away > 0:
- for enum, sub_event in enumerate(substitution_events_away):
- player_away_id = sub_event.PrimaryActor.Person.Id
- index = next((i for i,x in enumerate(lineUp.AwayTeam.Field,1) if player_away_id == x.Player.Id), None)
- if index:
- viewBag.SetVisibility("vAwaySubstitutionVisibility%02d" % index, True)
- if "EN" in sub_event.SecondaryActor.Person.Translations.ShortName:
- # viewBag.SetString("tAwaySubstitutionName%02d" % (enum+1), sub_event.SecondaryActor.Person.Translations.FirstName["EN"].ToString().upper())
- viewBag.SetString("tAwaySubstitutionLastName%02d" % (enum+1), sub_event.SecondaryActor.Person.Translations.ShortName["EN"].ToString().upper())
- def __fillBottomInformation(graphicOnAirItem, viewBag, allMatches):
- extradata = graphicOnAirItem.ExtraData
- index = extradata["index"]
- games = extradata["games"]
- #print index
- if int(index) <= 8:
- allMatches = games[0]
- highlightIndex = index
- else:
- highlightIndex = int(index) - 9
- allMatches = games[1]
- for enum, matchBottom in enumerate(allMatches):
- viewBag.SetString("tHomeBottomTeam%02d" % (enum+1), matchBottom.HomeTeam.TeamCode.ToString().upper())
- viewBag.SetString("tAwayBottomTeam%02d" % (enum+1), matchBottom.AwayTeam.TeamCode.ToString().upper())
- status = matchBottom.Status.ToString().upper()
- if status == "FINISHED":
- if hasattr(matchBottom.Score, "Total"):
- result = "%s - %s" % (matchBottom.Score.Total.Home, matchBottom.Score.Total.Away)
- viewBag.SetString("tBottomTime%02d" % (enum+1), result)
- else:
- result = "%s - %s" % (matchBottom.Score.Regular.Home, matchBottom.Score.Regular.Away)
- viewBag.SetString("tBottomTime%02d" % (enum+1), result)
- elif status == "LIVE":
- if hasattr(matchBottom.Score, "Total"):
- result = "(%s - %s)" % (matchBottom.Score.Total.Home, matchBottom.Score.Total.Away)
- viewBag.SetString("tBottomTime%02d" % (enum+1), result)
- else:
- result = "(%s - %s)" % (matchBottom.Score.Regular.Home, matchBottom.Score.Regular.Away)
- viewBag.SetString("tBottomTime%02d" % (enum+1), result)
- elif status == "UPCOMING":
- date = matchBottom.KickOffTime.DateTime.ToLocalTime()
- hour_minute = "%sH%02d" % (date.Hour, date.Minute)
- viewBag.SetTranslatedText("tGameInfo%02d" % enum, "{{%s}}.{{AggregateSummaryResults}}" % date)
- viewBag.SetString("tBottomTime%02d" % (enum+1), "%s" % hour_minute)
- match_to_highlight = allMatches[highlightIndex]
- viewBag.SetVisibility("vHighlightVisibility", True)
- viewBag.SetFloat("vBottomHighlight", highlightIndex+1)
- viewBag.SetString("tHomeBottomTeamHighlight", match_to_highlight.HomeTeam.TeamCode.ToString().upper())
- viewBag.SetString("tAwayBottomTeamHighlight", match_to_highlight.AwayTeam.TeamCode.ToString().upper())
- if hasattr(match_to_highlight.Score, "Total"):
- result = "(%s - %s)" % (match_to_highlight.Score.Total.Home, match_to_highlight.Score.Total.Away)
- viewBag.SetString("tBottomTimeHighlight", result)
- elif hasattr(match_to_highlight.Score, "Score"):
- result = "(%s - %s)" % (match_to_highlight.Score.Regular.Home, match_to_highlight.Score.Regular.Away)
- viewBag.SetString("tBottomTimeHighlight", result)
- else:
- viewBag.SetString("tBottomTimeHighlight", "(%s - %s)"%(0,0))
- def __fill_stats(viewBag, game_stats):
- ### HOME STATS
- filtered_stats_home = []
- if not len(game_stats):
- for tag in range(1,6):
- viewBag.SetString("tHomeStatName%02d" % (tag), "")
- viewBag.SetString("tHomeStatValue%02d" % (tag), "")
- viewBag.SetString("tAwayStatName%02d" % (tag), "")
- viewBag.SetString("tAwayStatValue%02d" % (tag),"")
- return;
- for stat in game_stats[1].Statistics:
- if stat.Name in Stats:
- stat_name = stat.Name
- stat_value = stat.Value
- filtered_stats_home.append((stat_name, stat_value))
- for enum, stat in enumerate(filtered_stats_home):
- if stat[0].ToString().lower() == "ball_possession":
- viewBag.SetTranslatedText("tHomeStatName%02d" % (enum+1), "{{%s}}.{{LineUp_Stat}}|filter:ToUpper " % "possession")
- viewBag.SetString("tHomeStatValue%02d" % (enum+1), "%s%%" % stat[1])
- else:
- viewBag.SetTranslatedText("tHomeStatName%02d" % (enum+1), "{{%s}}.{{LineUp_Stat}}|filter:ToUpper " % stat[0])
- viewBag.SetString("tHomeStatValue%02d" % (enum+1), stat[1])
- ### AWAY STATS
- filtered_stats_away = []
- for stat in game_stats[0].Statistics:
- if stat.Name in Stats:
- stat_name = stat.Name
- stat_value = stat.Value
- filtered_stats_away.append((stat_name, stat_value))
- for enum, stat in enumerate(filtered_stats_away):
- if stat[0].ToString().lower() == "ball_possession":
- viewBag.SetTranslatedText("tAwayStatName%02d" % (enum+1), "{{%s}}.{{LineUp_Stat}}|filter:ToUpper " % "possession")
- viewBag.SetString("tAwayStatValue%02d" % (enum+1), "%s%%" % stat[1])
- else:
- viewBag.SetTranslatedText("tAwayStatName%02d" % (enum+1), "{{%s}}.{{LineUp_Stat}}|filter:ToUpper " % stat[0])
- viewBag.SetString("tAwayStatValue%02d" % (enum+1), stat[1])
- def __afterProgram(graphicOnAirItem, momentExecution):
- #extradata = graphicOnAirItem.ExtraData
- updateGames(graphicOnAirItem.ExtraData)
- pages = extradata["pages"]
- lenAllMatchesLive = extradata["lenAllMatchesLive"]
- delay = int(Project.ProjectSettings["OnAirTimeOtherMatches (ms)"]) / int(lenAllMatchesLive)
- Task.Delay(int(delay)).ContinueWith(lambda x: __continueGraphic(graphicOnAirItem, momentExecution))
- helper.SetExtraData(extradata, "ExternalTake", "False")
- def __continueGraphic(graphicOnAirItem, momentExecution):
- extradata = graphicOnAirItem.ExtraData
- index = extradata["index"]
- total = extradata["total"]
- pages = extradata["pages"]
- if index < total:
- helper.SetExtraData(extradata, "NextPage", "True")
- IntelliflowController.TakeInNextPage(graphicOnAirItem.Graphic, OutputManager.ActiveChannelOutput, workflowType=IntelliflowController.EWorkflowType.Program, )
- else:
- Scheduler.ClearScheduler("LineUp")
- Scheduler.Add(Script.RefName, "__takeOut", Project.Name, graphicOnAirItem, 0, owner = "LineUp")
- def __takeOut(graphicOnAirItem):
- helper.GraphicTakeOut("ScoreWithScorers_OtherMatches", GraphicTemplatesManager, OutputManager, IntelliflowController)
- IntelliflowController.TakeOut(graphicOnAirItem.Graphic, OutputManager.ActiveChannelOutput)
- graphic = GraphicTemplatesManager.GetGraphicByName("LINEUP_STATS_ACTIVEMATCH")
- Task.Run(action = lambda : IntelliflowController.TakeIn(graphic, OutputManager.ActiveChannelOutput, IntelliflowController.EWorkflowType.Program))
- def __beforeProgramOut(graphicOnAirItem, momentExecution):
- Scheduler.ClearScheduler("LineUp")
- #helper.GraphicTakeOut("ScoreWithScorers_OtherMatches", GraphicTemplatesManager, OutputManager, IntelliflowController)
- def __afterPanic(graphicOnAirItem, momentExecution):
- Scheduler.ClearScheduler("LineUp")
- def __clearTags(viewBag):
- for i in range(1,25):
- viewBag.SetString("tHomeName%02d" % i, "")
- viewBag.SetString("tHomeLastName%02d" % i, "")
- viewBag.SetString("tHomeNumber%02d" % i, "")
- viewBag.SetString("tHomeSubstitutionName%02d" % i, "")
- viewBag.SetString("tHomeSubstitutionLastName%02d" % i, "")
- viewBag.SetString("tHomeSubstitutionNumber%02d" % i, "")
- viewBag.SetString("tHomeStatName%02d" % i, "")
- viewBag.SetString("tHomeStatValue%02d" % i, "")
- viewBag.SetFloat("vAwayCard%02d" % i,0)
- viewBag.SetFloat("vHomeCard%02d" % i,0)
- viewBag.SetVisibility("vHomeAtRiskVisibility%02d" % i, False)
- viewBag.SetVisibility("vHomeSubstitutionAtRisk%02d" % i, False)
- viewBag.SetString("tAwayName%02d" % i, "")
- viewBag.SetString("tAwayLastName%02d" % i, "")
- viewBag.SetString("tAwayNumber%02d" % i, "")
- viewBag.SetString("tAwaySubstitutionName%02d" % i, "")
- viewBag.SetString("tAwaySubstitutionLastName%02d" % i, "")
- viewBag.SetString("tAwaySubstitutionNumber%02d" % i, "")
- viewBag.SetString("tAwayStatName%02d" % i, "")
- viewBag.SetString("tAwayStatValue%02d" % i, "")
- viewBag.SetVisibility("vAwayAtRiskVisibility%02d" % i, False)
- viewBag.SetVisibility("vAwaySubstitutionAtRisk%02d" % i, False)
- viewBag.SetFloat("vHomeSubstitutes", 0)
- viewBag.SetFloat("vAwaySubstitutes", 0)
- viewBag.SetVisibility("vHighlightVisibility", False)
- viewBag.SetTranslatedText("tHomeCoachFunction", "")
- viewBag.SetString("tHomeCoachFirstName", "")
- viewBag.SetString("tHomeCoachLastName", "")
- viewBag.SetVisibility("vHomeCoachAtRiskVisibility", False)
- viewBag.SetTranslatedText("tAwayCoachFunction", "")
- viewBag.SetString("tAwayCoachFirstName", "")
- viewBag.SetString("tAwayCoachLastName", "")
- viewBag.SetVisibility("vAwayCoachAtRiskVisibility", False)