Раньше для получения информации о пользовательских профилях 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:
<?php
function resolve_id($id, $token = STEAM_TOKEN)
{
if (!preg_match('/^7656119[0-9]{10}$/i', $id))
{
// Получим SteamID64 из CustomURL...
$xml = @simplexml_load_file(sprintf("https://api.steampowered.com/ISteamUser/ResolveVanityURL/v0001/?key=%s&format=xml&vanityurl=%s", $token, $id));
// Вернём ответ...
return $xml -> success == "1" ? $xml -> steamid : null;
}
else
{
return $id;
}
}
?>
Константа STEAM_TOKEN содержит токен, который вы получили при регистрации разработчика.
Преобразование форматов SteamID
Существует несколько форматов SteamID:
- SteamID32 вида STEAM_0:X:XXXXXX, регулярное выражение для проверки:
/^STEAM_0:[01]:[0-9]{1,9}$/; - SteamID64 вида 7656119XXXXXXXXXX, регулярное выражение для проверки:
/^7656119[0-9]{10}$/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 вида:
https://api.steampowered.com/ISteamUser/GetPlayerSummaries/v0002/?key=ТОКЕН&steamids=STEAMID&format=xml
Здесь ТОКЕН – полученный токен авторизации, а STEAMID – SteamID в формате SteamID64 (это важно, т.к. в случае неверного формата будет выдано сообщение об ошибке Bad Request). Допускается указание нескольких SteamID через запятую.
В результате вы получите XML, JSON или VDF со следующими обязательными полями:
- steamid – SteamID64 пользователя;
- communityvisibilitystate – статус профиля в Сообществе Steam:
- 1 – скрытый;
- 2 – только для друзей;
- 3 – для друзей и друзей друзей;
- 4 – для всех авторизованных пользователей;
- 5 – публичный;
- profilestate – статус профиля:
- 1 – пользователь сконфигурировал свой профиль;
- 0 – профиль-невидимка (не имеет никнейма, аватара и т.д.);
- personaname – никнейм пользователя;
- lastlogoff – дата последнего входа в Steam в формате UNIXTIME;
- profileurl – прямая ссылка на профиль (если задан CustomURL, то будет выдан именно он, иначе - неизменяемая ссылка);
- avatar – аватар пользователя в формате 32*32 пикселя;
- avatarmedium – аватар пользователя в формате 64*64 пикселя;
- avatarfull – аватар пользователя в формате 184*184 пикселя;
- personastate – текущий статус пользователя:
- 0 – оффлайн (или профиль скрыт);
- 1 – онлайн;
- 2 – занят;
- 3 – отошёл;
- 4 – спит (idle);
- 5 – готов к торговле;
- 6 – готов к игре.
Все остальные поля являются опциональными и доступны только для публичных (открытых) профилей. Полный их список можете найти в англоязычной документации.
Функция GetPlayerBans
С помощью данной функции можно получить информацию о блокировках пользователя. Вызов осуществляется посредством URL вида:
https://api.steampowered.com/ISteamUser/GetPlayerBans/v1/?key=ТОКЕН&steamids=STEAMID&format=xml
Здесь ТОКЕН – полученный токен авторизации, а 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 вида:
https://api.steampowered.com/ISteamUser/GetFriendList/v0001/?key=ТОКЕН&steamid=STEAMID&relationship=friend&format=xml
Здесь ТОКЕН – полученный токен авторизации, а STEAMID – SteamID в формате SteamID64 (это важно, т.к. в случае неверного формата будет выдано сообщение об ошибке Bad Request).
Формат вывода:
- steamid – SteamID друга пользователя;
- friend_since – дата добавления в друзья в формате UNIXTIME;
- relationship – роль в списке друзей:
- friend – друг;
- blocked – заблокирован пользователем.
Функция получения списка друзей доступна только для открытых (публичных) профилей Steam. Во всех остальных список будет пустым.
Получение списка подписок на аккаунте
Для получения списка подписок, зарегистрированных на аккаунте (игры, программы, DLC), необходимо вызвать функцию GetOwnedGames при помощи URL вида:
https://api.steampowered.com/IPlayerService/GetOwnedGames/v0001/?key=ТОКЕН&steamid=STEAMID&format=xml
Здесь ТОКЕН – полученный токен авторизации, а 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 вида:
https://api.steampowered.com/IEconItems_КОД/GetPlayerItems/v0001/?key=ТОКЕН&steamid=STEAMID&format=xml
Здесь КОД – код игры по базе Steam (для Team Fortress 2 - 440), ТОКЕН – полученный токен авторизации, а STEAMID – SteamID в формате SteamID64 (это важно, т.к. в случае неверного формата будет выдано сообщение об ошибке Bad Request).
Вывод специфичен для каждой игры, поэтому полную информацию на английском языке вы найдёте здесь.