Что такое таймер повторного запуска на торговой площадке Steam? - PullRequest
0 голосов
/ 08 мая 2019

Я работаю над сценарием Python, который собирает цены на товары с рынка Steam.

Моя проблема в том, что если я позволю ему работать слишком долго, он получит ошибку HTTP 429.

Я хочу избежать этого, но заголовок retry-after не найден в ответе сервера.

Вот пример заголовков ответов

('Server', 'nginx')
('Content-Type', 'application/json; charset=utf-8')
('X-Frame-Options', 'DENY')
('Expires', 'Mon, 26 Jul 1997 05:00:00 GMT')
('Cache-Control', 'no-cache')
('Vary', 'Accept-Encoding')
('Date', 'Wed, 08 May 2019 03:58:30 GMT')
('Content-Length', '6428')
('Connection', 'close')
('Set-Cookie', 'sessionid=14360f3a5309bb1531932884; path=/; secure')
('Set-Cookie', 'steamCountry=CA%7C2020e87b713c54ddc925e4c38b0bf705; path=/; secure')

РЕДАКТИРОВАТЬ: вот код и пример вывода. обратите внимание, что для этого примера ничего внутри инструкции try не будет выполнено

def getPrice(card, game):
    url = 'https://steamcommunity.com/market/search/render/?query='
    url = url+card+" "+game
    url = url.replace(" ", "+")
    print(url)
    try:
        data = urllib.request.urlopen(url)
        h = data.getheaders()
        for item in h:
            print(item)
        #print(data.getheaders())
        #k = data.headers.keys()
        json_data = json.loads(data.read())
        pprint.pprint(json_data)
    except Exception as e:
        print(e.headers)
    return 0

Пример вывода на 3 разных вызова:

https://steamcommunity.com/market/search/render/?query=Glub+Crawl
Server: nginx
Content-Type: application/json; charset=utf-8
X-Frame-Options: DENY
Expires: Mon, 26 Jul 1997 05:00:00 GMT
Cache-Control: no-cache
Content-Encoding: gzip
Vary: Accept-Encoding
Content-Length: 24
Date: Wed, 08 May 2019 04:24:49 GMT
Connection: close
Set-Cookie: sessionid=5d1ea46f5095d9c28e141dd5; path=/; secure
Set-Cookie: steamCountry=CA%7C2020e87b713c54ddc925e4c38b0bf705; path=/; secure


https://steamcommunity.com/market/search/render/?query=Qaahl+Crawl
Server: nginx
Content-Type: application/json; charset=utf-8
X-Frame-Options: DENY
Expires: Mon, 26 Jul 1997 05:00:00 GMT
Cache-Control: no-cache
Content-Encoding: gzip
Vary: Accept-Encoding
Content-Length: 24
Date: Wed, 08 May 2019 04:24:49 GMT
Connection: close
Set-Cookie: sessionid=64e7956224b18e6d89cc45c0; path=/; secure
Set-Cookie: steamCountry=CA%7C2020e87b713c54ddc925e4c38b0bf705; path=/; secure


https://steamcommunity.com/market/search/render/?query=Odshan+Crawl
Server: nginx
Content-Type: application/json; charset=utf-8
X-Frame-Options: DENY
Expires: Mon, 26 Jul 1997 05:00:00 GMT
Cache-Control: no-cache
Content-Encoding: gzip
Vary: Accept-Encoding
Content-Length: 24
Date: Wed, 08 May 2019 04:24:50 GMT
Connection: close
Set-Cookie: sessionid=a7acd1023b4544809914dc6e; path=/; secure
Set-Cookie: steamCountry=CA%7C2020e87b713c54ddc925e4c38b0bf705; path=/; secure

1 Ответ

0 голосов
/ 08 мая 2019

Попробуйте это.

def getPrice(card, game):
    url = 'https://steamcommunity.com/market/search/render/?query='
    url = url+card+" "+game
    url = url.replace(" ", "+")
    print(url)
    while True:
        try:
            data = urllib.request.urlopen(url)
            h = data.getheaders()
            for item in h:
                print(item)
            json_data = json.loads(data.read())
            pprint.pprint(json_data)
        except Exception as e:
            import time
            milliseconds = 10000
            time.sleep(milliseconds)

Используйте ваше значение в миллисекундах.

...