Сервис цифровой дистрибуции Steam от компании Valve становится всё более популярным среди игроков. По состоянию на январь 2013, через Steam распространяется более трёх тысяч товаров, на которые действуют ежедневные, срединедельные и скидки на выходные дни, а количество зарегистрированных аккаунтов превысило 60 миллионов.
В настоящее время, в рунете очень мало информации об использовании Steam Api (или же Steam Web Api). В данном топике я расскажу о том, как получать нужную вам информацию из сообщества Steam для интеграции её в свои сайты, блоги или же просто получить информацию о пользователе, не заходя в Steam.
Начнем с главного. После несложных действий, я создал одну php страницу, которая, по запросу имени пользователя, либо SteamID или SteamcommunityID, выводит множество подробной информации о профиле Steam. Информации там намного больше, чем предоставляют аналогичные англоязычные сервисы.
Посмотреть работу страницы можно здесь. При желании, можно существенно доработать сервис, например добавить возможность определить, какие игры есть на аккаунте конкретного пользователя, и сколько они стоят (как когда-то делал steamcalculator).
Кому интересен исходный код моей страницы, алгоритм определения типа вводимых данных или алгоритм перебора одинаковых xml параметров, можете написать мне тут, или в контактной информации на той странице.
Открываем капот Steam
Информацию о пользователе Steam можно получить несколькими способами. Наиболее популярные из них, это:
— использовать именно Steam Web Api, который предлагают они нам сами (но предоставленной информации там увы не много)
— получать и обрабатывать данные сообщества напрямую, в формате xml.
— получать и обрабатывать данные сообщества напрямую, в формате json.
Первый способ мне не особо интересен, я пользовался сразу двумя оставшимися.
XML
Получить информацию о пользователе довольно просто. Достаточно лишь ввести в адресную строку браузера запрос в виде:
steamcommunity.com/profiles/*SteamID*/?xml=1
Например:
steamcommunity.com/profiles/76561198036370701/?xml=1
(к слову, если пользователь имеет CustomURL, то адрес ссылки изменится с ".../profiles/*SteamID*/..." на ".../id/*CustomURL*/...")
Эту страницу можно ловить и обрабатывать при помощи cURL или (что для меня проще) функции simplexml_load_file();, например:
$slf = "http://steamcommunity.com/profiles/76561198036370701/?xml=1";
$url = simplexml_load_file($slf);
Теперь, чтобы вывести, например, содержимое тегов < steamID>...< /steamID>, в любом месте вашей страницы, можно использовать следующий код:
<?php echo $url->steamID;?>
JSON
Прежде всего вам понадобится apikey. Зарегистрировать его можно здесь.
Получить суммарную информацию о пользователе Steam можно по ссылке вида:
api.steampowered.com/ISteamUser/GetPlayerSummaries/v0002/?key=*apikey*&steamids=*SteamID*
Например:
api.steampowered.com/ISteamUser/GetPlayerSummaries/v0002/?key=38A3BEAE3EFA726E4438207D08CB0EC7&steamids=76561198036370701
Получать и обрабатывать эти данные можно командой file_get_contents, а в последствии сконвертировать всё в массив примерно вот таким способом:
$urljson = file_get_contents("http://api.steampowered.com/ISteamUser/GetPlayerSummaries/v0002/?key=*apikey*&steamids=*steamid*");
$data = (array) json_decode($urljson)->response->players[0];
Например:
$urljson = file_get_contents("http://api.steampowered.com/ISteamUser/GetPlayerSummaries/v0002/?key=38A3BEAE3EFA726E4438207D08CB0EC7&steamids=76561198036370701");
$data = (array) json_decode($urljson)->response->players[0];
А выводить, например содержимое блока profileurl строчкой кода:
<?php echo $data['profileurl'];?>
Подводим итог
Методы получения информации о пользователе Steam не ограничиваются теми, что я привел. Те ссылки, которыми я получал данные используются только для получения суммарной (общей) информации. Отдельно можно получать список игр пользователя, список друзей, список групп, предметов инвентаря и мастерской и многое другое.
На основе полученных данных можно также сделать сервис генерации баннеров, юзербаров, профайлов для форумов и блогов, по аналогии с сервисом steamprofile.
Из недостатков работы сервиса можно выделить то, что в пик нагруженности серверов Steam, для получения информации о пользователе время запроса данных может колебаться от 0,1 до 12 секунд, а также часто втречается ошибка 503 (сервис недоступен), приходится отправлять запрос заново. Как вариант решения проблемы — не отправлять запрос чаще, чем раз в 10 секунд. Если у вас есть другие способы решения проблемы, пишите.
Некоторые ссылки, которые помогут в освоении Steam Web Api:
steamcommunity.com/dev?l=russian
partner.steamgames.com/documentation/webapi
developer.valvesoftware.com/wiki/Steam_Web_API
steamcommunityapi.googlecode.com/svn-history/r5/trunk/
Автор: Heavenanvil