32-битная ошибка с Dota 2 Steam Web API

Это касается следующего запроса:

https://api.steampowered.com/IDOTA2Match_570/GetMatchHistory/V001/?key=<MY KEY>&account_id=<MY ID>

Ответ, который я получил, выглядит следующим образом:

 ...

"players":[
    {
        "account_id": 4294967295
        ...
    },
    {
        "account_id": 4294967295
        ...
    }

 ...

account_id должен возвращать 32-битный идентификатор учетной записи пользователя (документация здесь). Некоторые из них содержат действительные идентификаторы, но в большинстве из них указано 4294967295. Поскольку 4294967295 появлялось так часто, я предположил, что это результат ошибки, поэтому я погуглил и нашел это в Википедии:

Число 4 294 967 295, эквивалентное шестнадцатеричному значению FFFF,FFFF16, является максимальным значением для 32-разрядного целого числа без знака в вычислениях.

Означает ли это, что это ошибка на стороне Steam? Является ли этот API прослушиваемым и непригодным для использования? Есть ли способ исправить это?


person Jim    schedule 13.08.2017    source источник
comment
Не могу сказать, что API нестабилен, но вы мало что можете сделать, чтобы исправить account_id , вы можете либо принять ответ как действительные данные и продолжить, либо вызвать ошибку или исключение. Единственное, что вы можете сделать, это поднять этот вопрос с их техподдержкой.   -  person Ankit    schedule 13.08.2017


Ответы (1)


Я знаю, что уже слишком поздно отвечать на этот вопрос, но если кто-то все еще задается вопросом и хочет знать, почему API Steam DOTA 2 возвращает одно и то же число 4294967295для многих IDs.

В API Steam DOTA 2 нет ничего плохого, и в нем нет ошибок. Если вы видите это у многих IDs, это совершенно нормально.

Причина этого в том, что ваш идентификатор учетной записи в Steam — это 32-битный Unsigned INT. И если вы используете DOTA 2 API для получения истории матчей игрока Он/Она должен быть включен параметр ОТОБРАЖАТЬ ДАННЫЕ МАТЧА ДЛЯ ОБЩЕСТВЕННОСТИ в клиенте Dota 2 (внутри параметра настройки в игре). По умолчанию он отключен.

Таким образом, если пользователь еще не включил эту опцию, и если вы попытаетесь получить доступ к данным соответствия этого пользователя, API вернет статус «Отрицательный». Поскольку Steam ID 32-битный, он вернет MAXINT (2^32-1 или 4294967295). В результате вы получаете тот же идентификатор номера во многих случаях, когда пользователь не раскрывает данные публично.

Решение заключается в том, что либо пользователь предоставляет данные, либо всякий раз, когда вы видите, что идентификатор не хранится в базе данных, считая его реальной учетной записью, дайте ему имя, например Anonymous, или по вашему выбору.

person Na-In Hae    schedule 26.07.2018