Exemple #1
0
    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"]))
Exemple #2
0
    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"]))
Exemple #3
0
    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()
Exemple #4
0
    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()
Exemple #5
0
    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
Exemple #6
0
    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")
Exemple #7
0
    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")
Exemple #8
0
    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
Exemple #9
0
    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("")
Exemple #10
0
    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("")
Exemple #11
0
 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("")
Exemple #12
0
    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()