Browse Source
Added new class BrowserRequests. It is planned to add the functionality of the steam site to it. Added now "get_avatar_url" and "set_avatar"pull/290/head
2 changed files with 79 additions and 1 deletions
@ -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 |
Loading…
Reference in new issue