Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
def _fetch_rsa_params(self, current_number_of_repetitions: int = 0) -> dict:
maximal_number_of_repetitions = 5
key_response = self.session.post(SteamUrl.STORE_URL + '/login/getrsakey/',
data={'username': self.username}).json()
try:
rsa_mod = int(key_response['publickey_mod'], 16)
rsa_exp = int(key_response['publickey_exp'], 16)
rsa_timestamp = key_response['timestamp']
return {'rsa_key': rsa.PublicKey(rsa_mod, rsa_exp),
'rsa_timestamp': rsa_timestamp}
except KeyError:
if current_number_of_repetitions < maximal_number_of_repetitions:
return self._fetch_rsa_params(current_number_of_repetitions + 1)
else:
raise ValueError('Could not obtain rsa-key')
n_showing = int(text_between(response.text, '<span id="tabContentsMyActiveMarketListings_end">', '</span>'))
n_total = int(text_between(response.text, '<span id="tabContentsMyActiveMarketListings_total">', '</span>').replace(',',''))
if n_showing < n_total < 1000:
url = "%s/market/mylistings/render/?query=&start=%s&count=%s" % (SteamUrl.COMMUNITY_URL, n_showing, -1)
response = self._session.get(url)
if response.status_code != 200:
raise ApiException("There was a problem getting the listings. http code: %s" % response.status_code)
jresp = response.json()
listing_id_to_assets_address = get_listing_id_to_assets_address_from_html(jresp.get("hovers"))
listings_2 = get_market_sell_listings_from_api(jresp.get("results_html"))
listings_2 = merge_items_with_descriptions_from_listing(listings_2, listing_id_to_assets_address,
jresp.get("assets"))
listings["sell_listings"] = {**listings["sell_listings"], **listings_2["sell_listings"]}
else:
for i in range(0, n_total, 100):
url = "%s/market/mylistings/?query=&start=%s&count=%s" % (SteamUrl.COMMUNITY_URL, n_showing + i, 100)
response = self._session.get(url)
if response.status_code != 200:
raise ApiException("There was a problem getting the listings. http code: %s" % response.status_code)
jresp = response.json()
listing_id_to_assets_address = get_listing_id_to_assets_address_from_html(jresp.get("hovers"))
listings_2 = get_market_sell_listings_from_api(jresp.get("results_html"))
listings_2 = merge_items_with_descriptions_from_listing(listings_2, listing_id_to_assets_address,
jresp.get("assets"))
listings["sell_listings"] = {**listings["sell_listings"], **listings_2["sell_listings"]}
return listings
offer = self._create_offer_dict(items_from_me, items_from_them)
session_id = self._get_session_id()
url = SteamUrl.COMMUNITY_URL + '/tradeoffer/new/send'
server_id = 1
params = {
'sessionid': session_id,
'serverid': server_id,
'partner': partner_steam_id,
'tradeoffermessage': message,
'json_tradeoffer': json.dumps(offer),
'captcha': '',
'trade_offer_create_params': '{}'
}
partner_account_id = steam_id_to_account_id(partner_steam_id)
headers = {'Referer': SteamUrl.COMMUNITY_URL + '/tradeoffer/new/?partner=' + partner_account_id,
'Origin': SteamUrl.COMMUNITY_URL}
response = self._session.post(url, data=params, headers=headers).json()
if response.get('needs_mobile_confirmation'):
response.update(self._confirm_transaction(response['tradeofferid']))
return response
def fetch_price(self, item_hash_name: str, game: GameOptions, currency: str = Currency.USD) -> dict:
url = SteamUrl.COMMUNITY_URL + '/market/priceoverview/'
params = {'country': 'PL',
'currency': currency,
'appid': game.app_id,
'market_hash_name': item_hash_name}
response = self._session.get(url, params=params)
if response.status_code == 429:
raise TooManyRequests("You can fetch maximum 20 prices in 60s period")
return response.json()
def logout(self) -> None:
url = SteamUrl.STORE_URL + '/logout/'
data = {'sessionid': self._get_session_id()}
self._session.post(url, data=data)
if self.is_session_alive():
raise Exception("Logout unsuccessful")
self.was_login_executed = False
def _fetch_home_page(self, session: requests.Session) -> requests.Response:
return session.post(SteamUrl.COMMUNITY_URL + '/my/home/')
Canceled = 6
Declined = 7
InvalidItems = 8
ConfirmationNeed = 9
CanceledBySecondaryFactor = 10
StateInEscrow = 11
class SteamUrl:
API_URL = "https://api.steampowered.com"
COMMUNITY_URL = "https://steamcommunity.com"
STORE_URL = 'https://store.steampowered.com'
class Endpoints:
CHAT_LOGIN = SteamUrl.API_URL + "/ISteamWebUserPresenceOAuth/Logon/v1"
SEND_MESSAGE = SteamUrl.API_URL + "/ISteamWebUserPresenceOAuth/Message/v1"
CHAT_LOGOUT = SteamUrl.API_URL + "/ISteamWebUserPresenceOAuth/Logoff/v1"
CHAT_POLL = SteamUrl.API_URL + "/ISteamWebUserPresenceOAuth/Poll/v1"