def fill_results_from_api(gw_start, gw_end, season, dbsession): fetcher = FPLDataFetcher() matches = fetcher.get_fixture_data() for m in matches: if not m["finished"]: continue gameweek = m["event"] if gameweek < gw_start or gameweek > gw_end: continue home_id = m["team_h"] away_id = m["team_a"] home_team = None away_team = None for k, v in alternative_team_names.items(): if str(home_id) in v: home_team = k elif str(away_id) in v: away_team = k if not home_team: raise ValueError("Unable to find team with id {}".format(home_id)) if not away_team: raise ValueError("Unable to find team with id {}".format(away_id)) home_score = m["team_h_score"] away_score = m["team_a_score"] f = _find_fixture(season, home_team, away_team, dbsession) res = Result() res.fixture = f res.home_score = int(home_score) res.away_score = int(away_score) dbsession.add(res) dbsession.commit()
def fill_fixtures_from_api(season, dbsession=session): """ Use the FPL API to get a list of fixures. """ tag = str(uuid.uuid4()) fetcher = FPLDataFetcher() fixtures = fetcher.get_fixture_data() for fixture in fixtures: try: f = find_fixture( fixture["team_h"], was_home=True, other_team=fixture["team_a"], season=season, dbsession=dbsession, ) update = True except ValueError: f = Fixture() update = False f.date = fixture["kickoff_time"] f.gameweek = fixture["event"] f.season = season f.tag = tag home_id = fixture["team_h"] away_id = fixture["team_a"] found_home = False found_away = False for k, v in alternative_team_names.items(): if str(home_id) in v: f.home_team = k found_home = True elif str(away_id) in v: f.away_team = k found_away = True if found_home and found_away: break error_str = "Can't find team(s) with id(s): {}." if not found_home and found_away: raise ValueError(error_str.format(home_id + ", " + away_id)) elif not found_home: raise ValueError(error_str.format(home_id)) elif not found_away: raise ValueError(error_str.format(away_id)) else: pass if not update: dbsession.add(f) dbsession.commit() return True