def updatePlPlayers(): session = CreateSession() p = session.query(Players).delete() bootstrapData = GetBootstrapData() playerData = bootstrapData['elements'] for i in playerData: plyr = Players(jfpl=i['id'], event_points=i['event_points'], first_name=i['first_name'], second_name=i['second_name'], web_name=i['web_name'], team=i['team'], team_code=i['team_code'], goals_scored=i['goals_scored'], assists=i['assists'], goals_conceded=i['goals_conceded'], pen_saved=i['penalties_saved'], pen_missed=i['penalties_missed'], yellow_cards=i['yellow_cards'], red_cards=i['red_cards'], saves=i['saves'], element_type=i['element_type']) session.add(plyr) session.commit() session.close()
def updateTeamsFinalBench(): session = CreateSession() m = session.query(Managers).all() gw = GetGameweek(session) for i in m: fplid = i.fplId r = requests.get( f"https://fantasy.premierleague.com/api/entry/{fplid}/event/{gw}/picks/" ) team = r.json() for p in team['picks']: if p['is_captain']: cap = 1 else: cap = 0 if not BenchBoost(session, i.id, gw): if p['position'] > 11: bench = 1 else: bench = 0 else: bench = 0 plyr = session.query(Teams).filter_by( playerId=p['element']).filter_by(managerId=i.id).filter_by( gameweek=gw).first() plyr.is_bench = bench session.add(plyr) session.commit() session.close()
def checkReefs(): session = CreateSession() gw = GetGameweek(session) drafted = session.query(DraftedPlayers).all() managers = session.query(Managers).all() for m in managers: thisWeeksTeams = session.query(Teams).filter( Teams.managerId == m.id).filter_by(gameweek=gw).all() thisWeeksTeams = [p.playerId for p in thisWeeksTeams] drafted = session.query(DraftedPlayers).filter( DraftedPlayers.managerId != m.id).all() drafted = [p.playerId for p in drafted] for d in drafted: if d in thisWeeksTeams: playerName = session.query( Players.web_name).filter_by(jfpl=d).first() managerName = m.name reefedFrom = session.query( DraftedPlayers.managerId).filter_by(playerId=d).first() reefedFrom = session.query( Managers.name).filter_by(id=reefedFrom[0]).first() reefString = f'{managerName} has reefed {playerName[0]} from {reefedFrom[0]}' sendMsg(reefString) r = session.query(Teams).filter( Teams.managerId == m.id).filter_by(playerId=d).filter_by( gameweek=gw).first() r.reefed = 1 session.add(r) session.commit() session.close()
def populateFixtures(): Next = True page = 0 while Next: page += 1 print(Next) print(page) r = requests.get( f"https://fantasy.premierleague.com/api/leagues-h2h-matches/league/{config.LeagueCode}/?page={page}" ) data = r.json() fixtureData = data['results'] session = CreateSession() for f in fixtureData: teamfplid = f['entry_1_entry'] opponentId = f['entry_2_entry'] m = session.query(Managers).filter_by(fplId=teamfplid).first() o = session.query(Managers).filter_by(fplId=opponentId).first() fxtr = Fixtures(gameweek=f['event'], managerId=m.id, opponentId=o.id) rvrsfxtr = Fixtures(gameweek=f['event'], managerId=o.id, opponentId=m.id) session.add(fxtr) session.add(rvrsfxtr) session.commit() session.close() Next = data['has_next']
def populateFixtures(): for i in range(1, 5): r = requests.get( f"https://fantasy.premierleague.com/api/leagues-h2h-matches/league/326910/?page={i}" ) data = r.json() fixtureData = data['results'] session = CreateSession() for f in fixtureData: teamfplid = f['entry_1_entry'] opponentId = f['entry_2_entry'] m = session.query(Managers).filter_by(fplId=teamfplid).first() o = session.query(Managers).filter_by(fplId=opponentId).first() fxtr = Fixtures(gameweek=f['event'], managerId=m.id, opponentId=o.id) rvrsfxtr = Fixtures(gameweek=f['event'], managerId=o.id, opponentId=m.id) session.add(fxtr) session.add(rvrsfxtr) session.commit() session.close()
def updateGameweekPlayers(): session = CreateSession() gw = GetGameweek(session) players = session.query(Teams.playerId).filter_by(gameweek=gw).all() players = {p[0] for p in players} urls = [ f"https://fantasy.premierleague.com/api/element-summary/{i}/" for i in players ] pool = ThreadPoolExecutor(len(urls)) futures = [pool.submit(requests.get, url) for url in urls] results = [r.result() for r in as_completed(futures)] for r in results: player = r.json() #this can be cleaned up but it works for now for x in player['history']: if x['round'] == gw: for i in players: if x['element'] == i: playerName = session.query( Players.web_name).filter_by(jfpl=i).first() myscore = int(x['total_points']) #j = update(Teams).where(Teams.playerId==i).values(points=myscore) j = session.query(Teams).filter_by( playerId=i).filter_by(gameweek=gw).all() for entries in j: h = entries if reefed(session, entries.managerId, entries.playerId, entries.gameweek): h.points = -myscore else: h.points = myscore session.add(h) session.commit() session.close()
def updateTeams(): session = CreateSession() m = session.query(Managers).all() gw = GetGameweek(session) for i in m: fplid = i.fplId r = requests.get( f"https://fantasy.premierleague.com/api/entry/{fplid}/event/{gw}/picks/" ) team = r.json() for p in team['picks']: if p['is_captain']: cap = 1 else: cap = 0 if not BenchBoost(session, i.id, gw): if p['position'] > 11: bench = 1 else: bench = 0 else: print("ay") bench = 0 plyr = Teams(gameweek=gw, managerId=i.id, playerId=int(p['element']), points=0, is_captain=cap, is_bench=bench) session.add(plyr) session.commit() session.close()
def produceTable(): session = CreateSession() p = session.query(Table).delete() session.commit() managers = session.query(Managers).all() for m in managers: f = session.query(Fixtures).filter_by(managerId=m.id).all() score = sum([i.score for i in f if i.score is not None]) points = sum([i.points for i in f if i.score is not None]) tb = Table(managerId=m.id, score=score, points=points) session.add(tb) session.commit() t = session.query(Table).order_by(desc(Table.points)).order_by( desc(Table.score)).all() p = session.query(Table).delete() session.commit() x = 0 for i in t: x += 1 tb = Table(position=x, managerId=i.managerId, score=i.score, points=i.points) session.add(tb) session.commit() session.close()
def updateGameweekPlayers(gw): session = CreateSession() players = session.query(Teams.playerId).filter_by(gameweek=gw).all() players = {p[0] for p in players} urls = [ f"https://fantasy.premierleague.com/api/element-summary/{i}/" for i in players ] pool = ThreadPoolExecutor(len(urls)) futures = [pool.submit(requests.get, url) for url in urls] results = [r.result() for r in as_completed(futures)] for r in results: done = True player = r.json() #this can be cleaned up but it works for now dgw = [p['element'] for p in player['history'] if p['round'] == gw] if len(dgw) > 1: dwg = True else: dgw = False for x in player['history']: if x['round'] == gw: for i in players: if x['element'] == i: if dgw: done = not done if not done: GameOneScore = int(x['total_points']) if done: myscore = int(x['total_points']) + GameOneScore #j = update(Teams).where(Teams.playerId==i).values(points=myscore) j = session.query(Teams).filter_by( playerId=i).filter_by(gameweek=gw).all() for entries in j: h = entries if reefed(session, entries.managerId, entries.playerId, entries.gameweek): h.points = -myscore else: h.points = myscore session.add(h) else: myscore = int(x['total_points']) #j = update(Teams).where(Teams.playerId==i).values(points=myscore) j = session.query(Teams).filter_by( playerId=i).filter_by(gameweek=gw).all() for entries in j: h = entries if reefed(session, entries.managerId, entries.playerId, entries.gameweek): h.points = -myscore else: h.points = myscore session.add(h) session.commit() session.close()
def populatePlTeams(): bootstrapData = GetBootstrapData() plTeamsData = bootstrapData['teams'] session = CreateSession() for i in plTeamsData: tm = PlTeams(id=i['id'], name=i['name'], shortname=i['short_name']) session.add(tm) session.commit() session.close()
def updateFixturesWithTablePoints(): session = CreateSession() gw = GetGameweek(session) fixtures = session.query(Fixtures).filter_by(gameweek=gw).all() for f in fixtures: scores = session.query(Teams).filter_by( managerId=f.managerId).filter_by(gameweek=gw).filter_by( is_bench=0).all() scoreList = [] for i in scores: if i.is_captain == 1: if TripleCaptain(session, f.managerId, gw): scoreList.append(i.points * 3) else: scoreList.append(i.points * 2) else: scoreList.append(i.points) points = sum(scoreList) ph = f.pointhit if ph is None: ph = 0 actualscore = points - ph f.score = actualscore scoresOpponent = session.query(Teams).filter_by( managerId=f.opponentId).filter_by(gameweek=gw).filter_by( is_bench=0).all() scoreOpponentList = [] for i in scoresOpponent: if i.is_captain == 1: if TripleCaptain(session, f.managerId, gw): scoreOpponentList.append(i.points * 3) else: scoreOpponentList.append(i.points * 2) else: scoreOpponentList.append(i.points) pointsOpponent = sum(scoreOpponentList) oph = session.query(Fixtures).filter_by(gameweek=gw).filter_by( managerId=f.opponentId).first() oph = oph.pointhit if oph is None: oph = 0 pointsOpponent = pointsOpponent - oph if actualscore > pointsOpponent: f.points = 3 elif actualscore == pointsOpponent: f.points = 1 else: f.points = 0 session.add(f) session.commit() session.close()
def updateDeadlines(): bootstrapData = GetBootstrapData() gameweekData = bootstrapData['events'] for i in gameweekData: dbid = i['id'] deadline = i['deadline_time'] session = CreateSession() dl = session.query(Gameweeks).filter_by(id=dbid).first() dl.deadline = deadline session.add(dl) session.commit() session.close()
def populateGameweeks(): bootstrapData = GetBootstrapData() gameweekData = bootstrapData['events'] session = CreateSession() for i in gameweekData: gw = Gameweeks(id=i['id'], name=i['name'], deadline=i['deadline_time'], is_current=i['is_current'], is_next=i['is_next'], gameweek_start='test', gameweek_end='test') session.add(gw) session.commit() session.close()
def updatePlFixtures(): session = CreateSession() gw = GetGameweek(session) r = requests.get( f"https://fantasy.premierleague.com/api/fixtures/?event={gw}") fixtureData = r.json() for games in fixtureData: j = session.query(PlFixtures).filter_by( away_team=games['team_a']).filter_by(gameweek=gw).first() if games['started']: j.started = 1 if games['finished_provisional']: j.finished = 1 session.add(j) session.commit() session.close()
def populatePlFixtures(): session = CreateSession() session.query(PlFixtures).delete() r = requests.get(f"https://fantasy.premierleague.com/api/fixtures") fixtureData = r.json() for i in fixtureData: fxtr = PlFixtures(id=i['id'], kickoff_time=i['kickoff_time'], gameweek=i['event'], away_team=i['team_a'], home_team=i['team_h'], started=i['started'], finished=i['finished']) session.add(fxtr) session.commit() session.close()
def getNewPlFixtures(): session = CreateSession() gw = GetGameweek(session) r = requests.get( f"https://fantasy.premierleague.com/api/fixtures/?event={gw}") fixtureData = r.json() for i in fixtureData: fxtr = PlFixtures(id=i['id'], kickoff_time=i['kickoff_time'], gameweek=i['event'], away_team=i['team_a'], home_team=i['team_h'], started=i['started'], finished=i['finished']) session.add(fxtr) session.commit() session.close()
def updatedPointshit(gw): session = CreateSession() m = session.query(Managers).all() for i in m: fplid = i.fplId r = requests.get( f"https://fantasy.premierleague.com/api/entry/{fplid}/event/{gw}/picks/" ) team = r.json() hit = team['entry_history']['event_transfers_cost'] x = session.query(Fixtures).filter(Fixtures.managerId == i.id).filter( Fixtures.gameweek == gw).first() x.pointhit = hit session.add(x) session.commit() session.close()
def updateKOTM(): session = CreateSession() k = session.query(Managers).filter_by(KOTM=1).first() gw = GetGameweek(session) kotm = session.query(Fixtures).filter(Fixtures.gameweek == gw).filter( Fixtures.managerId == k.id).first() challenger = session.query(Fixtures).filter( Fixtures.gameweek == gw).filter( Fixtures.managerId == kotm.opponentId).first() if challenger.score > kotm.score: j = session.query(Managers).filter_by(id=kotm.opponentId).first() sendMsg(f'{j.teamName} is the new King of The Mountain!') j.KOTM = 1 k.KOTM = 0 session.add(j) session.add(k) session.commit() else: sendMsg(f'{k.teamName} retains King of The Mountain...for now.') session.close()
def updateGameweeks(): bootstrapData = GetBootstrapData() gameweekData = bootstrapData['events'] for i in gameweekData: if i['is_current']: thisWeek = i['id'] if thisWeek < 38: nextWeek = thisWeek + 1 break session = CreateSession() resetGameweeks(session) tw = session.query(Gameweeks).filter_by(id=thisWeek).first() tw.is_current = 1 session.add(tw) if nextWeek: nw = session.query(Gameweeks).filter_by(id=nextWeek).first() nw.is_next = 1 session.add(nw) session.commit() session.close()
def updateViceCaptain(): session = CreateSession() m = session.query(Managers).all() gw = GetGameweek(session) for i in m: fplid = i.fplId r = requests.get( f"https://fantasy.premierleague.com/api/entry/{fplid}/event/{gw}/picks/" ) team = r.json() for p in team['picks']: if not BenchBoost(session, i.id, gw): if p['is_captain'] and p['multiplier'] in [0, 1]: for q in team['picks']: if q['is_vice_captain']: plyr = session.query(Teams).filter_by( playerId=q['element']).filter_by( managerId=i.id).filter_by( gameweek=gw).first() plyr.is_captain = 1 session.add(plyr) session.commit() session.close()