def start_crawler(self): """Starts the crawler after checking input values and inserting default values.""" if self.select_league.current() == -1: return_invalid(self.status_crawled) return league = self.list_leagues.get(self.select_league.get()) this_season = get_current_season(league) self.crd_from_season = self.select_crawl_from_season.get() self.crd_from_md = self.select_crawl_from_md.get() self.crd_to_season = self.select_crawl_to_season.get() self.crd_to_md = self.select_crawl_to_md.get() current_crawl = crawler_class.Crawler(league) # if no selection made default to current season if self.crd_to_season == '': self.crd_to_season = this_season elif self.select_crawl_to_season.current() == -1: return_invalid(self.status_crawled) return else: self.crd_to_season = int(self.crd_to_season) # if no selection made default to selected crd_to_season if self.crd_from_season == '': self.crd_from_season = self.crd_to_season elif self.select_crawl_from_season.current() == -1: return_invalid(self.status_crawled) return else: self.crd_from_season = int(self.crd_from_season) # if no selection made default to first matchday if self.crd_from_md == '': self.crd_from_md = 1 elif self.select_crawl_from_md.current() == -1: return_invalid(self.status_crawled) return else: self.crd_from_md = int(self.crd_from_md) # if no selection made default to last matchday if self.crd_to_md == '': self.crd_to_md = current_crawl.get_group_size(2018) elif self.select_crawl_to_md.current() == -1: return_invalid(self.status_crawled) return else: self.crd_to_md = int(self.crd_to_md) if (self.crd_from_season > self.crd_to_season or (self.crd_from_season == self.crd_to_season and self.crd_from_md > self.crd_to_md)): return_invalid(self.status_crawled) return current_crawl.get_match_data_interval(self.crd_from_season, self.crd_from_md, self.crd_to_season, self.crd_to_md) current_crawl.get_teams(self.crd_from_season, self.crd_to_season) self.status_crawled['text'] = 'Done' self.label_current_dataset[ 'text'] = "Current data: {}.{}.{}-{}.{}".format( league, self.crd_from_season, self.crd_from_md, self.crd_to_season, self.crd_to_md) self.button_training['state'] = 'normal'
def update_smd(self, s): """Updates matchday selection according to selected league.""" league = self.list_leagues.get(self.select_league.get()) crawler = crawler_class.Crawler(league) seasons = get_seasons(league) md = [x for x in range(1, crawler.get_group_size(2018) + 1)] self.select_crawl_from_season.config(values=seasons, width=cbb_width(seasons)) self.select_crawl_from_season.set(seasons[-2]) self.select_crawl_to_season.config(values=seasons, width=cbb_width(seasons)) self.select_crawl_to_season.set(seasons[-2]) self.select_crawl_from_md.config(values=md, width=cbb_width(md)) self.select_crawl_from_md.current(0) self.select_crawl_to_md.config(values=md, width=cbb_width(md)) self.select_crawl_to_md.set(md[-1])
def is_season_finished(league, year): """Checks if all matches in a season have finished""" data = { 'date': [], 'team1': [], 'team2': [], 'is_finished': [], 'play_day': [], 'goal1': [], 'goal2': [] } crawler = crawler_class.Crawler(league) max_md = crawler.get_group_size(year) last_match = crawler.get_data(year, data, 1, max_md) if last_match['is_finished'] and all(last_match['is_finished']): return True else: return False
def get_current_season(self): new = crawler_class.Crawler("bl1") return new.get_match_data_interval(self.year, 1, self.year, 34)
def test_group_size(crw, year, res): c = crawler_class.Crawler(crw) assert c.get_group_size(year) == res
def crawler(): c = crawler_class.Crawler("bl1") return c
def init_nmd_table(self): """Builds table displaying next matchday.""" year = get_current_season("bl1") nmd_data = CurrentGames(year) nmd_table = nmd_data.get_display[0] list_length = len(nmd_table) # get training data crawler_class.Crawler("bl1").get_match_data_interval( year - 9, 1, year - 1, 34) self.dict_algorithm.get('PoissonAlgorithm').train('matches.csv') crawler_class.Crawler("bl1").get_teams(year - 9, year - 1) valid_teams = [] with open('teams.csv', encoding='utf-8') as csvfile: reader = csv.DictReader(csvfile) for team in reader: valid_teams.append(team['name']) for a in range(list_length + 2): if list_length == 1 and isinstance(nmd_table[0], str): Label(self.frame_NMD, text=nmd_table[0]) else: if a == 0: Label(self.frame_NMD, text='Next Matches will be:').grid(row=a, columnspan=7) continue if a == 1: host = 'Host' guest = 'Guest' date = 'Date' time = 'Time' prediction_win = 'Win %' prediction_lose = 'Lose %' prediction_draw = 'Draw %' else: host = nmd_table[a - 2]['host'] guest = nmd_table[a - 2]['guest'] date = nmd_table[a - 2]['date'] time = nmd_table[a - 2]['time'] if (host in valid_teams) and (guest in valid_teams): match_request = dict(host=host, guest=guest) result = self.dict_algorithm[ 'PoissonAlgorithm'].request(match_request) prediction_win = "{:.2%}".format(result.get('win')) prediction_lose = "{:.2%}".format(result.get('lose')) prediction_draw = "{:.2%}".format(result.get('draw')) else: prediction_win = 'n/a' prediction_lose = 'n/a' prediction_draw = 'n/a' Label(self.frame_NMD, relief=GROOVE, text=date).grid(row=a, column=0, sticky=N + S + E + W) Label(self.frame_NMD, relief=GROOVE, text=time).grid(row=a, column=1, sticky=N + S + E + W) Label(self.frame_NMD, relief=GROOVE, text=host).grid(row=a, column=2, sticky=N + S + E + W) Label(self.frame_NMD, relief=GROOVE, text=guest).grid(row=a, column=3, sticky=N + S + E + W) Label(self.frame_NMD, relief=GROOVE, text=prediction_win).grid(row=a, column=4, sticky=N + S + E + W) Label(self.frame_NMD, relief=GROOVE, text=prediction_lose).grid(row=a, column=5, sticky=N + S + E + W) Label(self.frame_NMD, relief=GROOVE, text=prediction_draw).grid(row=a, column=6, sticky=N + S + E + W) self.frame_NMD.grid_columnconfigure(0, minsize=70) self.frame_NMD.grid_columnconfigure(1, minsize=50) self.frame_NMD.grid_columnconfigure(4, minsize=70) self.frame_NMD.grid_columnconfigure(5, minsize=70) self.frame_NMD.grid_columnconfigure(6, minsize=70)