-
Notifications
You must be signed in to change notification settings - Fork 0
/
SteamUser.py
47 lines (41 loc) · 1.42 KB
/
SteamUser.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
import re
import requests
import xmltodict
from BetterLogger import logger
class InvalidSteamURLException(Exception):
pass
class PrivateProfileException(Exception):
pass
class PrivateGameListException(Exception):
pass
class SteamUser:
def __init__(self, steam_url: str):
self.steam_url = steam_url
self.games_set = set()
self.validate_steam_url()
self.get_game_list()
def validate_steam_url(self):
"""
Validates the Steam URL to see if it matches a basic regex
"""
match = re.search("^https:\/\/steamcommunity.com\/", self.steam_url)
if match is None:
raise InvalidSteamURLException(f"Invalid SteamURL `{self.steam_url}`")
def get_game_list(self):
try:
games_url = self.steam_url + "/games?tab=all&xml=1"
response = requests.get(games_url).content.decode()
parsed_dict = xmltodict.parse(response)
for game in parsed_dict["gamesList"]["games"]["game"]:
game_name = game["name"]
self.games_set.add(game_name)
except KeyError as err:
logger.error(f"KeyError: {err}")
logger.exception(err)
error_message = f"ERROR: The user {self.steam_url} seems to have their profile set to private!"
raise PrivateProfileException(error_message)
except TypeError as err:
logger.error(f"TypeError: {err}")
logger.exception(err)
error_message = f"ERROR: The user {self.steam_url} seems to have the games list on their profile set to private!"
raise PrivateGameListException(error_message)