def start(self): while (True): teamsList = self.loadTeams() team_id_list = self.genereateTeamIDList(teamsList) try: currentRelevantGames = self.getRelevantLiveLeagueGames( team_id_list) except ApiException: currentRelevantGames = self.oldRelevantGames new_finished_games = self.findFinishedGames( self.oldRelevantGames, currentRelevantGames) if len(new_finished_games) > 0: self.finishedGames.extend(new_finished_games) # process matches match_processor = MatchProcessor() processed_matches = [] to_remove_finished_games = [ ] # games not up after 2hrs, can remove for obj in self.finishedGames: if obj["countdown"] <= 0: match_details_obj = self.api_wrapper.getMatchDetails( obj["match_id"]) if match_details_obj.isEmpty(): # match data is not available yet obj["age"] = (obj["age"] + 1) if obj["age"] > 60: to_remove_finished_games.append(obj) obj["countdown"] = int( self.configMap["match_parser_countdown"]) continue match_processor.process(match_details_obj) processed_matches.append(obj) # delete finished games older than 2hrs for obj in to_remove_finished_games: HelperTools.log("gave up on match " + obj["match_id"]) self.finishedGames.remove(obj) # delete all parsed matches from finishedGames list for game in processed_matches: self.finishedGames.remove(game) # iterate cooldowns of finished gamess for obj in self.finishedGames: countdown = obj["countdown"] obj["countdown"] = countdown - int( self.configMap["crawler_sleep_time"]) for hook in self.hooks: hook.update() if self.stopBool: HelperTools.log("stop message received") break time.sleep(int(self.configMap["crawler_sleep_time"]))
def start(self): while(True): teamsList = self.loadTeams() team_id_list = self.genereateTeamIDList(teamsList) try: currentRelevantGames = self.getRelevantLiveLeagueGames(team_id_list) except ApiException: currentRelevantGames = self.oldRelevantGames new_finished_games = self.findFinishedGames(self.oldRelevantGames, currentRelevantGames) if len(new_finished_games) > 0: self.finishedGames.extend(new_finished_games) # process matches match_processor = MatchProcessor() processed_matches = [] to_remove_finished_games = [] # games not up after 2hrs, can remove for obj in self.finishedGames: if obj["countdown"] <= 0: match_details_obj = self.api_wrapper.getMatchDetails(obj["match_id"]) if match_details_obj.isEmpty(): # match data is not available yet obj["age"] = (obj["age"] + 1) if obj["age"] > 60: to_remove_finished_games.append(obj) obj["countdown"] = int(self.configMap["match_parser_countdown"]) continue match_processor.process(match_details_obj) processed_matches.append(obj) # delete finished games older than 2hrs for obj in to_remove_finished_games: HelperTools.log("gave up on match " + obj["match_id"]) self.finishedGames.remove(obj) # delete all parsed matches from finishedGames list for game in processed_matches: self.finishedGames.remove(game) # iterate cooldowns of finished gamess for obj in self.finishedGames: countdown = obj["countdown"] obj["countdown"] = countdown - int(self.configMap["crawler_sleep_time"]) for hook in self.hooks: hook.update() if self.stopBool: HelperTools.log("stop message received") break time.sleep(int(self.configMap["crawler_sleep_time"]))
def processPlayer(self, match_details_player, local_player): if local_player is None: return player_info = local_player.getTeamName() + "." + local_player.getPlayerName() player_info += " (" + local_player.getPlayerPosition() + ")" HelperTools.log(" processing player: " + player_info) avg_values = AverageValues(local_player.getPlayerPosition()) local_player.applyMatchDetails(match_details_player, avg_values) avg_values.applyMatchDetails(match_details_player) local_player.save() avg_values.save()
def processPlayer(self, match_details_player, local_player): if local_player is None: return player_info = local_player.getTeamName() + "." + local_player.getPlayerName() player_info += " (" + local_player.getPlayerPosition() + ")" HelperTools.log(" processing player: " + player_info) avg_values = AverageValues(local_player.getPlayerPosition()) local_player.applyMatchDetails(match_details_player, avg_values) avg_values.applyMatchDetails(match_details_player) local_player.save() avg_values.save()
def findFinishedGames(self, old_relevant_games, current_relevant_games): finished_games = [] for match_id in current_relevant_games: if match_id not in old_relevant_games: # relevant game just went live HelperTools.log("a relevant game just went live: " + str(match_id)) for match_id in old_relevant_games: if match_id not in current_relevant_games: # relevant game is finished, can be parsed obj = {"countdown": int(self.configMap["match_parser_countdown"]), "match_id": match_id, "age": 0} finished_games.append(obj) HelperTools.log("a relevant game just finished: " + str(match_id)) self.oldRelevantGames = current_relevant_games return finished_games
def __init__(self): self.hooks = [] self.hooks.append(PlayerListHook()) self.configMap = self.loadConfig() api_key = self.loadApiKey() self.api_wrapper = Dota2ApiWrapper(api_key) self.stopBool = False # list of match IDs self.oldRelevantGames = [] # contains list of {"countdown": <cd>, "match_id": <match_id>, "age": <age>s} self.finishedGames = [] HelperTools.log("crawler started")
def __init__(self): self.hooks = [] self.hooks.append(PlayerListHook()) self.configMap = self.loadConfig() api_key = self.loadApiKey() self.api_wrapper = Dota2ApiWrapper(api_key) self.stopBool = False # list of match IDs self.oldRelevantGames = [] # contains list of {"countdown": <cd>, "match_id": <match_id>, "age": <age>s} self.finishedGames = [] HelperTools.log("crawler started")
def findFinishedGames(self, old_relevant_games, current_relevant_games): finished_games = [] for match_id in current_relevant_games: if match_id not in old_relevant_games: # relevant game just went live HelperTools.log("a relevant game just went live: " + str(match_id)) for match_id in old_relevant_games: if match_id not in current_relevant_games: # relevant game is finished, can be parsed obj = { "countdown": int(self.configMap["match_parser_countdown"]), "match_id": match_id, "age": 0 } finished_games.append(obj) HelperTools.log("a relevant game just finished: " + str(match_id)) self.oldRelevantGames = current_relevant_games return finished_games
def process(self, match_details_instance): teams = match_details_instance.getRadiantTeamName() + " vs " + match_details_instance.getDireTeamName() HelperTools.log(" processing match: " + str(match_details_instance.getMatchID()) + ": " + teams) for match_details_player in match_details_instance.getPlayers(): # process player and average data self.processPlayer(match_details_player, self.loadLocalPlayer(str(match_details_player.getAccountID()))) self.processMatch(match_details_instance) HelperTools.log(" match processed.") HelperTools.log("")
def process(self, match_details_instance): teams = match_details_instance.getRadiantTeamName() + " vs " + match_details_instance.getDireTeamName() HelperTools.log(" processing match: " + str(match_details_instance.getMatchID()) + ": " + teams) for match_details_player in match_details_instance.getPlayers(): # process player and average data self.processPlayer(match_details_player, self.loadLocalPlayer(str(match_details_player.getAccountID()))) self.processMatch(match_details_instance) HelperTools.log(" match processed.") HelperTools.log("")
def applyRating(self, rating): rating_data = rating.getRatings() self.updateAverageWithName("average_kda_rating", rating_data["kda_rating"]) HelperTools.log(" kda_rating: " + str(rating_data["kda_rating"])) self.updateAverageWithName("average_gpm_rating", rating_data["gpm_rating"]) HelperTools.log(" gpm_rating: " + str(rating_data["gpm_rating"])) self.updateAverageWithName("average_lhpm_rating", rating_data["lhpm_rating"]) HelperTools.log(" lhpm_rating: " + str(rating_data["lhpm_rating"])) self.updateAverageWithName("average_xpm_rating", rating_data["xpm_rating"]) HelperTools.log(" xpm_rating: " + str(rating_data["xpm_rating"])) self.updateAverageWithName("average_hd_rating", rating_data["hd_rating"]) HelperTools.log(" hd_rating: " + str(rating_data["hd_rating"])) self.updateAverageWithName("average_td_rating", rating_data["td_rating"]) HelperTools.log(" td_rating: " + str(rating_data["td_rating"])) self.updateAverageWithName("average_fight_rating", rating_data["fight_rating"]) HelperTools.log(" fight_rating: " + str(rating_data["fight_rating"])) self.updateAverageWithName("average_push_rating", rating_data["push_rating"]) HelperTools.log(" push_rating: " + str(rating_data["push_rating"])) self.updateAverageWithName("average_farm_rating", rating_data["farm_rating"]) HelperTools.log(" farm_rating: " + str(rating_data["farm_rating"])) self.updateAverageWithName("average_total_rating", rating_data["total_rating"]) HelperTools.log(" total_rating: " + str(rating_data["total_rating"])) HelperTools.log("")
def applyMatchDetails(self, match_details_player, avg_values_instance): self.updateAverageWithName("average_kda", match_details_player.getKDA()) HelperTools.log(" kda: " + str(match_details_player.getKDA())) self.updateAverageWithName("average_gpm", match_details_player.getGPM()) HelperTools.log(" gpm: " + str(match_details_player.getGPM())) self.updateAverageWithName("average_lh_per_min", match_details_player.getLastHitsPerMinute()) HelperTools.log(" lhpm: " + str(match_details_player.getLastHitsPerMinute())) self.updateAverageWithName("average_xpm", match_details_player.getXPM()) HelperTools.log(" xpm: " + str(match_details_player.getXPM())) self.updateAverageWithName("average_hero_damage", match_details_player.getHeroDamage()) HelperTools.log(" hd: " + str(match_details_player.getHeroDamage())) self.updateAverageWithName("average_tower_damage", match_details_player.getTowerDamage()) HelperTools.log(" td: " + str(match_details_player.getTowerDamage())) rating = MatchDetailsPlayerRating(match_details_player, avg_values_instance) self.applyRating(rating) self.incrementCounter()