. Значительные изменения в Steam WebAPI и работа с ним
Значительные изменения в Steam WebAPI и работа с ним

Значительные изменения в Steam WebAPI и работа с ним

Раньше для получения информации о пользовательских профилях Steam, мы просто дописывали в конец URL (конечно предварительно проверив его регулярным выражением) ?xml=1 и в результате получали XML с полной информацией, которая уже использовалась нашей системой проверки.

В последнее время такая система постоянно выдавала ошибки 503 Service Unavailable и, в конце концов, Valve решили полностью отказаться от данного функционала, объявив его устаревшим.

Теперь для проверки пользовательских профилей и получения информации нужно использовать полноценный WebAPI с авторизацией по токену. Токены доступа можно получить в разделе для разработчиков.

Один Steam аккаунт может запросить только один токен. Существует возможность аннулировать старый и получить новый.

Работа с WebAPI

Steam WebAPI работает посредством GET-запросов на специальный адрес api.steampowered.com (протокол HTTP). Для подачи любого запроса обязательно должен присутствовать параметр key, в котором передаётся полученный токен разработчика. Если вы его не укажете или укажете недействительный (или заблокированный), то получите сообщение об ошибке Unauthorized.

Каждая из функций WebAPI также имеет собственные обязательные и необязательные параметры. В случае отсутствия обязательных, сервер выдаст сообщение об ошибке Bad Request. Необязательные можно опускать и в таком случае будут использоваться значения по умолчанию.

XML, JSON или VDF

Steam WebAPI может выдавать результат обработки запроса в следующих форматах:

  • XML — eXtensible Markup Language;
  • JSON — JavaScript Object Notation;
  • VDF — Valve Data File.

Для указания варианта вывода используется необязательный параметр format, принимающий одно из допустимых значений. Если параметр не указан, то будет использован JSON.

Мы в своих проектах используем XML.

Получение SteamID из Custom URL

Как уже говорилось выше, раньше для получения SteamID64 мы использовали ?xml=1, однако теперь необходимо вызывать функцию ResolveVanityURL. Пример вызова на PHP:

Константа STEAM_TOKEN содержит токен, который вы получили при регистрации разработчика.

Преобразование форматов SteamID

Существует несколько форматов SteamID:

  • SteamID32 вида STEAM_0:X:XXXXXX, регулярное выражение для проверки: /^STEAM_0:[01]:[0-9]$/;
  • SteamID64 вида 7656119XXXXXXXXXX, регулярное выражение для проверки: /^7656119[0-9]$/i.

Для преобразования из 32 в 64 и наоборот, мы написали класс SteamConv, распространяющийся под лицензией GNU GPL v3.

Функции класса SteamConv:

  • string get_steamid64 (string) — получает SteamID64 из SteamID32;
  • string get_userid (string) — получает т.н. UserID (используется для наименования каталогов внутри /Steam/userdata/);
  • string get_steamid32 (string) — получает SteamID32 из SteamID64.

Получение пользовательской информации

Если раньше было достаточно одного запроса, то теперь для получения всей информации нужно сделать целых два: вызвать функцию GetPlayerSummaries для получения общей информации и GetPlayerBans для информации о блокировках (VAC-бан, трейд, сообщество и т.д.).

Обе функции допускают получение информации сразу о нескольких пользователях. Разделителем служит запятая.

Функция GetPlayerSummaries

Вызов функции GetPlayerSummaries осуществляется по URL вида:

Здесь ТОКЕН — полученный токен авторизации, а STEAMID — SteamID в формате SteamID64 (это важно, т.к. в случае неверного формата будет выдано сообщение об ошибке Bad Request). Допускается указание нескольких SteamID через запятую.

В результате вы получите XML, JSON или VDF со следующими обязательными полями:

  • steamid — SteamID64 пользователя;
  • communityvisibilitystate — статус профиля в Сообществе Steam:
    • 1 — скрытый;
    • 2 — только для друзей;
    • 3 — для друзей и друзей друзей;
    • 4 — для всех авторизованных пользователей;
    • 5 — публичный;
    • 1 — пользователь сконфигурировал свой профиль;
    • 0 — профиль-невидимка (не имеет никнейма, аватара и т.д.);
    • 0 — оффлайн (или профиль скрыт);
    • 1 — онлайн;
    • 2 — занят;
    • 3 — отошёл;
    • 4 — спит (idle);
    • 5 — готов к торговле;
    • 6 — готов к игре.

    Все остальные поля являются опциональными и доступны только для публичных (открытых) профилей. Полный их список можете найти в англоязычной документации.

    Функция GetPlayerBans

    С помощью данной функции можно получить информацию о блокировках пользователя. Вызов осуществляется посредством URL вида:

    Здесь ТОКЕН — полученный токен авторизации, а STEAMID — SteamID в формате SteamID64 (это важно, т.к. в случае неверного формата будет выдано сообщение об ошибке Bad Request). Допускается указание нескольких SteamID через запятую.

    В результате вы получите XML, JSON или VDF со следующими обязательными полями:

    • SteamId — SteamID пользователя;
    • CommunityBanned — имеет ли место блокировка пользователя в Сообществе Steam: true — да, false — нет;
    • VACBanned — заблокирован ли пользователь системой Valve Anti-Cheat: true — да, false — нет;
    • EconomyBan — указывает статус возможности обмена:
      • none — нет;
      • banned — заблокирована;
      • probation — пользователь на испытательном сроке.

      Получение друзей пользователя

      Для получения друзей пользователя необходимо вызвать функцию GetFriendList по URL вида:

      Здесь ТОКЕН — полученный токен авторизации, а STEAMID — SteamID в формате SteamID64 (это важно, т.к. в случае неверного формата будет выдано сообщение об ошибке Bad Request).

      • steamid — SteamID друга пользователя;
      • friend_since — дата добавления в друзья в формате UNIXTIME;
      • relationship — роль в списке друзей:
        • friend — друг;
        • blocked — заблокирован пользователем.

        Функция получения списка друзей доступна только для открытых (публичных) профилей Steam. Во всех остальных список будет пустым.

        Получение списка подписок на аккаунте

        Для получения списка подписок, зарегистрированных на аккаунте (игры, программы, DLC), необходимо вызвать функцию GetOwnedGames при помощи URL вида:

        Здесь ТОКЕН — полученный токен авторизации, а STEAMID — SteamID в формате SteamID64. Доступные необязательные параметры:

        • include_appinfo — включит в вывод функции подробную информацию о подписке (название и URL в Steam Store);
        • include_played_free_games — позволяет включить в вывод бесплатные игры, такие как Team Fortress 2;
        • appids_filter — позволяет отфильтровать список только нужными играми. В качестве допустимых значений может выступать только массив из целых чисел.
        • appid — ID подписки в CDR;
        • name — название подписки (только если в запросе был задан include_appinfo);
        • playtime_forever — время, проведённое в данной игре/программе (у DLC всегда равно 0);
        • img_icon_url — ссылка на значок (только если в запросе был задан include_appinfo);
        • img_logo_url — ссылка на логотип (только если в запросе был задан include_appinfo);
        • has_community_visible_stats — имеется ли у данной игры расширенная статистика, которую можно получить другими методами API.

        Получение содержимого рюкзака

        Получением содержимого рюкзака (бэкпака) занимается функция GetPlayerItems. Вызывается URL вида:

        Здесь КОД — код игры по базе Steam (для Team Fortress 2 — 440) ТОКЕН — полученный токен авторизации, а STEAMID — SteamID в формате SteamID64 (это важно, т.к. в случае неверного формата будет выдано сообщение об ошибке Bad Request).

        Вывод специфичен для каждой игры, поэтому полную информацию на английском языке вы найдёте здесь.

        68 комментариев к записи

        Подскажите пожалуйста, можно ли вывести с помощью функции GetPlayerItems весь инвентарь, а не определенной игры(к примеру Team Fortress 2)? Подскажите как это реализовать.

        @Иван Понятия «весь инвентарь» не существует. Инвентари существуют только для каждой игры в отдельности.

        Здравствуйте, не могли бы вы подсказать как вытащить статистику по операциям в кс го. Всю статистику вывел но там нет по операциям и нет соревновательной статистики. Подскажите пожалуйста

        @Александр Отдельной статистики по каждой из операций Steam API не предоставляет.

        Полный список всех доступных методов Steam Web API можно получить выполнив GET запрос по следующему URI:

        Здесь TOKEN — токен авторизации для Web API.

        Что такое токен? Пробую вывести свой инвентарь игры CS:GO, её ид 730 api.steampowered.com/IEconItems_730/GetPlayerItems/v0001/?key=ТОКЕН&steamid=76561198036370701&format=xml Выдает ошибку: Forbidden Access is denied. Retrying will not help. Please verify your key= parameter.

        Уникальный идентификатор пользователя Steam Web API. Получить или просмотреть его можно здесь.

        Естественно. Анонимый доступ к API запрещён.

        Спасибо, сделал токен, вот что получилось:

        Но опять ошибка, вот что пишет на странице: Ошибка синтаксического анализа XML: ошибка синтаксиса «Строка 2, символ 11».

        Роман :

        Спасибо, сделал токен, вот что получилось:

        Будьте осторожнее со своим токеном. Его следует хранить в секрете, как и любой пароль. Я скрыл его из вашего сообщения, но настоятельно рекомендую отозвать его и сгенерировать новый.

        Роман :

        Ошибка синтаксического анализа XML: ошибка синтаксиса «Строка 2, символ 11″.

        Это нормально, т.к. XML следует разбирать XML-парсером (в php например через стандартный simplexml), а не просматривать в браузере.

        почти сделано) Получил токен для своего домена, залил туда страницу с таким

        но не работает, даже в коде страницы кода вообще нет, есть две пустые строки. Я так думаю что дело в строке $count = $file->items; а именно в items, что здесь писать? в тим фортрессе вроде как можно написать items и вернется список инвентаря тим фортресса Полазил по гуглу..весь день искал, но мануалов на CSGO не нашел, есть ли список возравщаемых данных для КСГО, или моя ошибка в чем-то другом?