@lovinprogram

Как обойти ошибку 400?

Пишу бота для Steam на Python с помощью библиотеки steampy:
https://github.com/leoramme/steampy
Хочу получить словарь активных ордеров, используя метод get_my_market_listings()
Однако возвращается пустой словарь, а иногда и вовсе ошибка с кодом 400:
There was a problem getting the listings. http code: 400

НО:
Иногда он получает весь словарь с предметами, работает отлично, а иногда он выдаёт пустой словарь, хотя по факту там есть предметы на торговой площадке.
Сама реализация метода get_my_market_listings() в steampy/market:
@login_required
    def get_my_market_listings(self) -> dict:
        response = self._session.get("%s/market" % SteamUrl.COMMUNITY_URL)
        if response.status_code != 200:
            raise ApiException("There was a problem getting the listings. http code: %s" % response.status_code)
        assets_descriptions = json.loads(text_between(response.text, "var g_rgAssets = ", ";\r\n"))
        listing_id_to_assets_address = get_listing_id_to_assets_address_from_html(response.text)
        listings = get_market_listings_from_html(response.text)
        listings = merge_items_with_descriptions_from_listing(listings, listing_id_to_assets_address,
                                                              assets_descriptions)
        if '<span id="tabContentsMyActiveMarketListings_end">' in response.text:
            n_showing = int(text_between(response.text, '<span id="tabContentsMyActiveMarketListings_end">', '</span>'))
            n_total = int(text_between(response.text, '<span id="tabContentsMyActiveMarketListings_total">', '</span>'))
            if n_total > n_showing:
                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"]}

        return listings

В файле models.py есть класс SteamUrl:
class SteamUrl:
    API_URL = "https://api.steampowered.com"
    COMMUNITY_URL = "http://steamcommunity.com"
    STORE_URL = 'https://store.steampowered.com'

В интернете увидел, как кто-то избавился от ошибки, заменив протокол с https на http, но мне это не помогло.
Пробовал вызывать метод каждые 30 секунд, если не получилось расспарсить страницу, но он всё время возвращает пустой словарь.
Алгоритм работы метода: предварительно авторизовавшись в аккаунт переходит по ссылке https://steamcommunity.com/market/
на этой странице отображается первые 10 ордеров и кол-во страниц.
После того, как он прошелся по первым 10 предметам, он переходит по ссылкам вида
https://steamcommunity.com/market/mylistings/?quer...
(на этой странице отображается 100 ордеров)
Следующая страница открывается с параметром start=110 и count = 100
Я авторизован, поэтому, переходя по ссылке, мне отображается информация о предметах.
62ae48642b40d275858537.png
Когда он переходит по ссылке с параметром start = 1510 и выше, то вылетает ошибка 400
А бывает, что он дойдёт до конца и выведет целиком словарь предметов
Но ведёт он себя не предсказуемо

62ae495c48787205809378.png
Кто знает как избавиться от ошибки 400 в стиме?
  • Вопрос задан
  • 167 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
25 апр. 2024, в 12:20
15000 руб./за проект
25 апр. 2024, в 12:08
300 руб./за проект
25 апр. 2024, в 11:49
25000 руб./за проект