-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathtoken_pool.py
More file actions
56 lines (47 loc) · 1.97 KB
/
Copy pathtoken_pool.py
File metadata and controls
56 lines (47 loc) · 1.97 KB
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
import json
import requests
class TokenPool:
def __init__(self):
self.tokens = [
# PUT GITHUB TOKENS HERE
]
self.token_queues = self.init_token_queue()
def generate_headers(self, token):
headers = {
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 \
# (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36',
"Accept": "application/vnd.github+json",
"Authorization": f"Bearer {token}",
"X-GitHub-Api-Version": "2022-11-28",
}
return headers
def init_token_queue(self):
# (token, remaining number of queries)
print("init queue")
queue = []
for token in self.tokens:
headers = self.generate_headers(token)
html_response = requests.get(url="https://api.github.com/rate_limit", headers=headers)
html_response = json.loads(html_response.text)
remaining = html_response["resources"]["core"]["remaining"]
queue.append([token, remaining])
print(token, remaining)
return queue
def get_next_token(self):
# always use first token
# keep rotating if first token has no remaining
while self.token_queues[0][1] == 0:
self.token_queues.append(self.token_queues.pop(0))
# finish finding a token with non-zero remaining
print("using token", self.token_queues[0])
headers = self.generate_headers(self.token_queues[0][0])
# update token count
self.token_queues[0][1] -= 1
return headers
def check_limits(self):
for t in self.tokens:
headers = self.generate_headers(t)
html_response = requests.get(url="https://api.github.com/rate_limit", headers=headers)
html_response = json.loads(html_response.text)
print(html_response["resources"]["core"])
pass