예제 #1
0
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()
예제 #2
0
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()
예제 #3
0
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()
예제 #4
0
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']
예제 #5
0
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()
예제 #6
0
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()
예제 #7
0
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()
예제 #8
0
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()
예제 #9
0
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()
예제 #10
0
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()
예제 #11
0
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()
예제 #12
0
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()
예제 #13
0
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()
예제 #14
0
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()
예제 #15
0
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()
예제 #16
0
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()
예제 #17
0
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()
예제 #18
0
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()
예제 #19
0
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()
예제 #20
0
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()