Skip to content

Instantly share code, notes, and snippets.

@saagarjha
Created January 18, 2021 23:01
Show Gist options
  • Save saagarjha/6ec9241b06a7bf56c140d58005601904 to your computer and use it in GitHub Desktop.
Save saagarjha/6ec9241b06a7bf56c140d58005601904 to your computer and use it in GitHub Desktop.
Add people to lists on the UTR website
#!/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