-
Notifications
You must be signed in to change notification settings - Fork 1
/
pull_data.py
121 lines (82 loc) · 3.87 KB
/
pull_data.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
import requests
import json
league_code = 38606
class Pull_Data():
payload = {}
headers = {
'authority': 'draft.premierleague.com',
'pragma': 'no-cache',
'cache-control': 'no-cache',
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.121 Safari/537.36',
'accept': '*/*',
'sec-fetch-site': 'same-origin',
'sec-fetch-mode': 'cors',
'sec-fetch-dest': 'empty',
'referer': 'https://draft.premierleague.com/league',
'accept-language': 'en-US,en;q=0.9',
'cookie': '_fbp=fb.1.1591974378630.1388117418; csrftoken=o0HBg1soXqEfafytSpwUfJn4zlPLE375mzYTzfkasL73943bKWlUpTniP9JXOIHi; _gid=GA1.2.543120220.1601327503; pl_profile=eyJzIjogIld6SXNORGMwT1RJME5sMDoxa04wUkU6Qkl5V0xfZE1ScmZUa202MWdCNFlNVE13SEIwIiwgInUiOiB7ImlkIjogNDc0OTI0NiwgImZuIjogIkphbWllIiwgImxuIjogIlN0cm9uYWNoIiwgImZjIjogbnVsbH19; sessionid=i3kql0dtznsk8uu4nf2ree1qy0lbo8z9; activeEntry=150310; _ga_NREXP8D25C=GS1.1.1601551710.68.0.1601551710.0; _ga=GA1.2.864881373.1589897324'
}
def __init__(self, league_code = league_code):
self.league_code = str(league_code)
self.url = "https://draft.premierleague.com/api/league/" + self.league_code + "/details"
self.scores = self.get_scores()
self.num_players = self.get_number_players()
self.player_names = self.get_player_names()
self.team_names = self.get_team_names()
self.player_id = self.get_player_id()
self.last_active_gameweek = self.get_last_active_gameweek()
def get_response(self):
response = requests.request("GET", self.url, headers=self.headers, data = self.payload)
return response
def get_json(self):
json_object = self.get_response().json()
try:
json_object["league_entries"]
return json_object
except KeyError:
print("Error processing league data. Please check league code.")
raise
def get_number_players(self):
return len(self.get_json()["league_entries"])
def get_player_id(self):
ids = {}
for player in self.get_json()["league_entries"]:
ids[player["id"]] = []
return ids
def get_player_names(self):
player_names = {}
for player in self.get_json()["league_entries"]:
if player["player_first_name"]:
player_names[player["id"]] = player["player_first_name"] + " " + player["player_last_name"]
else:
player_names[player["id"]] = "Average"
return player_names
def get_team_names(self):
team_names = {}
for player in self.get_json()["league_entries"]:
team_names[player["id"]] = player["entry_name"]
return team_names
def _get_player_scores(self):
ids = self.get_player_id()
for game in self.get_json()["matches"]:
for player in ["1", "2"]:
if game[f"league_entry_{player}"] in ids:
ids[game[f"league_entry_{player}"]].append(game[f"league_entry_{player}_points"])
return ids
def get_last_active_gameweek(self):
names = self._get_player_scores()
for week in range(38):
inactive_players = 0
for player in names.keys():
if names[player][week] == 0:
inactive_players += 1
if inactive_players >= 2:
return week
def _remove_blank_weeks(self):
last_GW = self.get_last_active_gameweek()
names = self._get_player_scores()
for player in names.keys():
names[player] = names[player][: last_GW]
return names
def get_scores(self):
return self._remove_blank_weeks()