-
Notifications
You must be signed in to change notification settings - Fork 0
/
api.py
139 lines (109 loc) · 3.77 KB
/
api.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
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
import json
import requests
import time
import pickle
import multiprocessing
from leagues import *
from tokens import *
MAX_TRIES = 10
def _get(url):
n = 0
while n < MAX_TRIES:
try:
response = requests.get(url)
if response.status_code == requests.codes.ok:
return response.json()
elif response.status_code == requests.codes.not_found:
return None
else:
print("[bot]", url, response.text)
except requests.exceptions.RequestException as e:
print("[bot] ", url, e)
except json.decoder.JSONDecodeError as e:
print("[bot] ", url, e)
time.sleep(10)
n += 1
return None
def player_info(nickname):
uri = "https://api.faceit.com/core/v1/nicknames/%s" % nickname
result = _get(uri)
if result is None or "result" not in result or "payload" not in result:
return None
return result["payload"]
def get_twitch(steam_id):
uri = "https://api.twitch.tv/api/steam/%s?client_id=%s" % (steam_id, TWITCH_CLIENT_ID)
result = _get(uri)
if result is None or "error" in result:
return None
print(result)
return "https://www.twitch.tv/%s" % result["name"]
def is_live(twitch_name):
uri = "https://api.twitch.tv/kraken/streams/%s?client_id=%s" % (twitch_name, TWITCH_CLIENT_ID)
result = _get(uri)
if result is None or "stream" not in result:
return False
else:
if result["stream"] is None:
return False
else:
return True
def get_members(league_id):
uri = "https://api.faceit.com/hubs/v1/hub/%s/membership/" % league_id
n = 0
ret = {}
while True:
result = _get(uri + "?limit=100&offset=%s" % (n * 100))
if result is None or "payload" not in result:
continue
payload = result["payload"]
items = payload["items"]
if len(items) == 0:
break
for item in items:
user = item["user"]
info = player_info(user["nickname"])
steam_id = info["dota2_id"]
steam_id = steam_id.split(":")[-1][:-1]
ret[steam_id] = (user["nickname"], get_twitch(info["steam_id_64"]))
n += 1
return ret
def get_faceit_matches():
uri = "https://api.steampowered.com/IDOTA2Match_570/GetLiveLeagueGames/v0001/?key=%s" % (STEAM_KEY)
result = _get(uri)
if result is None or "result" not in result:
return []
ret = []
for game in result["result"]["games"]:
if int(game["league_id"]) in LEAGUE_IDS:
ret.append(game)
return ret
def get_server_steam_id(lobby_id):
uri = "http://pub.prod.faceit.paral.in/activeMatches/all"
result = _get(uri)
if result is None or len(result) == 0:
return (None, None)
for match in result:
if "State" not in match:
continue
state = match['State']
if "LobbyId" in state and int(state["LobbyId"]) == int(lobby_id):
return (match["Config"]["name"], state["ServerSteamID"])
return (None, None)
def get_leaderboards(league_id):
uri = "http://api.faceit.com/leaderboard/v1/ranking/hub/%s?leaderboardType=hub_season&limit=5&offset=0&season=2" % league_id
result = _get(uri)
ret = []
if result is None or "payload" not in result:
return ret
rankings = result["payload"]["rankings"]
for player in rankings:
ret.append((player["placement"]["entity_name"], player["played"], player["won"], player["lost"], player["points"]))
return ret
"""
for league in LEAGUES:
members = str(get_members(LEAGUES[league]))
with open("%s.out" % league, 'w') as f:
f.write(members)
with open("%s.pkl" % league, 'wb') as f:
pickle.dump(members, f)
"""