diff --git a/steam/webauth.py b/steam/webauth.py index d81ce13..dd128c9 100644 --- a/steam/webauth.py +++ b/steam/webauth.py @@ -66,6 +66,8 @@ from steam.steamid import SteamID from steam.utils.web import make_requests_session, generate_session_id from steam.core.crypto import rsa_publickey, pkcs1v15_encrypt +from steam.webrequests import BrowserRequests + if six.PY2: intBase = long _cli_input = raw_input @@ -74,7 +76,7 @@ else: _cli_input = input -class WebAuth(object): +class WebAuth(BrowserRequests): key = None logged_on = False #: whether authentication has been completed successfully session = None #: :class:`requests.Session` (with auth cookies after auth is completed) @@ -85,6 +87,7 @@ class WebAuth(object): def __init__(self, username, password=''): self.__dict__.update(locals()) + super().__init__() self.session = make_requests_session() self._session_setup() diff --git a/steam/webrequests.py b/steam/webrequests.py new file mode 100644 index 0000000..c9ea825 --- /dev/null +++ b/steam/webrequests.py @@ -0,0 +1,75 @@ +import requests +from bs4 import BeautifulSoup + +class BrowserRequests(object): + def __init__(self): + self.session = None + self.steam_id = None + self.session_id = None + + def get_avatar_url(self, size=2): + """Get URL to avatar picture + + :param size: possible values are ``0``, ``1``, or ``2`` corresponding to small, medium, large + :type size: :class:`int` + :return: url to avatar + :rtype: :class:`str` + :raises HTTPError: any problem with http request, timeouts, 5xx, 4xx etc + """ + self.url = "https://steamcommunity.com/profiles/%s/edit/avatar" + try: + self.resp = self.session.get(self.url % self.steam_id, + timeout=15, + ) + self.req_bs = BeautifulSoup(self.resp.text) + self.avatar_url = str(self.req_bs.find('div', {'class':'playerAvatar'}).find('img')['src'].split('.jpg')[0]) + sizes = { # размеры картинок + 0: '', + 1: '_medium', + 2: '_full', + } + except requests.exceptions.RequestException as e: + raise HTTPError(str(e)) + + return self.avatar_url+sizes[size]+'.jpg' + + def set_avatar(self, avatar): + """Set image to avatar picture + + :param avatar: bytes image + :type avatar: :class:`bytes` + :return: json response + :rtype: :class:`dict` + :raises HTTPError: any problem with http request, timeouts, 5xx, 4xx etc + :raises AvatarRequiredNoSend: any problem with the format of the file being sent + """ + self.url = "https://steamcommunity.com/actions/FileUploader/" + try: + self.resp = self.session.post(self.url, + timeout=15, + data={ + 'type': 'player_avatar_image', + 'sId': self.steam_id, + 'sessionid': self.session_id, + 'doSub': 1, + 'json': 1 + }, + files={'avatar':avatar} + ).json() + except requests.exceptions.RequestException as e: + raise HTTPError(str(e)) + if self.resp['success'] != True: + raise AvatarRequiredNoSend + return self.resp + +class WebAuthException(Exception): + pass + +class HTTPError(WebAuthException): + pass + +class AvatarRequired(Exception): + pass + +class AvatarRequiredNoSend(AvatarRequired): + pass \ No newline at end of file