Created
January 18, 2021 23:01
-
-
Save saagarjha/6ec9241b06a7bf56c140d58005601904 to your computer and use it in GitHub Desktop.
Add people to lists on the UTR website
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env python3 | |
import getpass | |
import json | |
import pathlib | |
import sys | |
import urllib.parse | |
import urllib.request | |
class List: | |
def __init__(self, id, name): | |
self.id = id | |
self.name = name | |
def __str__(self): | |
return self.name | |
class Player: | |
def __init__(self, id, name, location): | |
self.id = id | |
self.name = name | |
self.location = location | |
def __str__(self): | |
return f"{self.name} ({self.location})" | |
class Session: | |
def __init__(self, email, password): | |
request = urllib.request.Request( | |
"https://app.myutr.com/api/v1/auth/login", | |
data=json.dumps({"email": email, "password": password}).encode(), | |
headers={"Content-Type": "application/json;charset=utf-8"} | |
) | |
response = urllib.request.urlopen(request) | |
# print(response.read().decode()) | |
cookies = [] | |
for cookie in filter(lambda header: header[0] == "Set-Cookie", response.getheaders()): | |
cookies.append(cookie[1].split(";")[0]) | |
self.cookies = "; ".join(cookies) | |
def authenticated_request(self, url, data=None): | |
headers = {"Cookie": self.cookies} | |
if data: | |
headers["Content-Type"] = "application/json;charset=utf-8" | |
return urllib.request.Request( | |
url, | |
data=data, | |
headers=headers | |
) | |
def lists(self): | |
request = self.authenticated_request("https://agw-prod.myutr.com/v1/saved") | |
lists = [] | |
for list in json.loads(urllib.request.urlopen(request).read().decode())["players"]: | |
lists.append(List(list["id"], list["name"])) | |
return lists | |
def find_players(self, query): | |
request = self.authenticated_request(f"https://agw-prod.myutr.com/v2/search/players?query={urllib.parse.quote_plus(query)}&top=10&skip=0") | |
players = [] | |
for player in json.loads(urllib.request.urlopen(request).read().decode())["hits"]: | |
players.append(Player(player["id"], player["source"]["displayName"], player["source"]["location"]["display"])) | |
return players | |
def add_player_to_list(self, list, player): | |
request = self.authenticated_request( | |
"https://agw-prod.myutr.com/v1/saved/addplayertolist", | |
json.dumps({"playerId": player.id, "listId": list.id}).encode(), | |
) | |
urllib.request.urlopen(request) | |
if __name__ == "__main__": | |
if len(sys.argv) != 2: | |
sys.stderr.write(f"Usage: {sys.argv[0]} [newline seperated name file]\n") | |
sys.exit(1) | |
names = pathlib.Path(sys.argv[1]).read_text().split("\n") | |
email = input("Email: ") | |
password = getpass.getpass("Password: ") | |
session = Session(email, password) | |
lists = session.lists() | |
if not len(lists): | |
raise AssertionError("Could not find any lists!") | |
if len(lists) == 1: | |
list = lists[0] | |
else: | |
print(f"Found {len(lists)} lists. Pick one:") | |
for i in range(len(lists)): | |
print(f"\t{i}) {lists[i]}") | |
list = lists[int(input("List number: "))] | |
print(f"Using list {list}...") | |
for name in names: | |
if not name: | |
continue | |
players = session.find_players(name) | |
if not len(players): | |
sys.stderr.write(f"Could not find player {name}\n") | |
continue | |
if len(players) == 1: | |
player = players[0] | |
else: | |
print(f"Found multiple results for {name}. Pick one:") | |
for i in range(len(players)): | |
print(f"\t{i}) {players[i]})") | |
player = players[int(input("Player number: "))] | |
session.add_player_to_list(list, player) | |
print(f"Added {player} to list") |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment