Пользователь
0,0
рейтинг
11 марта 2013 в 14:35

Разработка → Немного о Steam Web Api из песочницы tutorial

API*, HTML*, PHP*


Сервис цифровой дистрибуции 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
карма
4,0
рейтинг 0,0
Пользователь
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Спецпроект

Самое читаемое Разработка

Комментарии (29)

  • +2
    А возможно сделать на основе web api альтернативный клиент для чата Steam?
    • НЛО прилетело и опубликовало эту надпись здесь
      • +2
        А где можно найти информацию по недокументированным методам, если они не документированы?)
        • НЛО прилетело и опубликовало эту надпись здесь
          • 0
            Делать чат на SteamKit'e не разумно. Лучше смотреть как вебчат и мобильный клиент работают.
      • 0
        Developer tools в помощь + в интернетах можно найти уже немало малоизвестных реализаций
  • 0
    Имел дело с полурабочим API для Dota2. Не знаю как сейчас, но перед Новым Годом он сильно глючил и работал от случая к случаю…
    • 0
      его переделали, сейчас dotabuff работает через него.
  • 0
    То-то я смотрю задолбали спамеры со своими приглашениями в группы.
    • +1
      Через API нельзя пригласить в группу.
  • +1
    Вот хорошая библиотека на 3х языках (ruby, java, php ) с реализацией SteamAPI и фишек других игр github.com/koraktor/steam-condenser
  • 0
    Много работал с API Steam'а. «XML API», который на steamcommunity.com домене, просто ужасен, работает медленно, и на половине запросов просто кидает ошибки. С api.steampowered.com ситуация лучше, но там нету некоторых методов которые есть в комьюнити, да и документация не полная.

    У api.steampowered.com есть параметр format=json, xml или vdf.

    А калькулятором можно воспользоваться и тут: steamdb.info/calculator/
    • 0
      Я написал об этих багах в топике.

      Итак, какой самый разумный способ использования Steam API?
      Использовать сторонние библиотеки? Кстати про сам Conseder написано даже в справке api steam.
      • 0
        Steam Condenser вполне неплох, но там нету многих методов.
        • 0
          Например? Чего там нет из того, что я вывожу на своей тестовой странице?
          • 0
            Я про методы другие, а не информацию о профиле.
          • 0
            Как получить рейтинг пользователя, через api.steampowered.com?
  • 0
    А по имени пользователя можно вытащить ID?
    • 0
      • 0
        Я правильно понял, что это только если пользователь указал «Персональная ссылка: steamcommunity.com/id/»?
        • 0
          Вы имеете в виду по нику или по customurl (profileurl-ID)?

          ID можно вытащить зная один из параметров:
          steamid вида STEAM_0:X:XXXXXXXX
          customurl, например heavenanvil
          ссылку на профиль, например
          steamcommunity.com/id/heavenanvil
          steamcommunity.com/profiles/76561198036370701


          Может и ещё что-то, с ходу не вспомню.
          • 0
            steamcommunity.com/id/arvitaly

            Вот мой аккаунт так не пробивается видимо потому, что я не делал ссылку тут steamcommunity.com/profiles/76561198072505754/edit.

            А у вас она стоит?
            • 0
              Да, у меня она стоит.
              А ваша ссылка steamcommunity.com/id/arvitaly и не открывается в стиме.
              Чтобы сделать себе «кастомный url», укажите его в настройках профиля, в графе Персональная ссылка:

              После этого, сможете проверять, как вы писали выше.

              А пока можете вводить только:
              steamcommunity.com/profiles/76561198072505754
              либо
              76561198072505754
              либо
              STEAM_0:0:56120013
              на моей странице.
              • 0
                Спасибо, жаль, конечно(

                Проверил всех друзей — ни у кого видимо не стоит, а хотел сюрприз сделать! :-)
                • 0
                  Какой сюрприз?

                  Получить о них информацию можно и без ника.
                  • 0
                    Информер по нику — картинку с инфой для вставки куда-нить. Но ID-шник узнавать вручную — это неинтересно.
  • 0
    Есть ли возможность вытянуть статистику по игре среди всех пользователей? Типа как , только в списке нет нужной игры
  • 0
    Есть ли возможность спарсить через API всю базу стим игр к себе на сайт и постоянно поддерживать(периодически прогонять поиск свежих игр) ее в актуальном состоянии?

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.