Steam Achievements API — Как узнать дату разблокировки достижения?

Можно ли получить дату разблокировки достижения в API достижений Steam? Я прочитал кучу документации, но не нашел упоминания об этом.


person Akki    schedule 12.05.2014    source источник


Ответы (1)


Ответ на этот вопрос: да, это возможно, но вы должны использовать старый XML API, а не новый веб-API, и это должно быть «более новое» достижение.

URL в старом стиле выглядит так

http://steamcommunity.com/id/<profilename>/stats/<appid>/achievements/?xml=1

OR

http://steamcommunity.com/profiles/<profileid>/stats/<appid>/achievements/?xml=1

Пара замечаний по этому поводу:

  • <profilename> — это уникальное имя URL, выбранное пользователем. <profileid> — это уникальный 64-битный номер, присвоенный Valve.
  • <appid> – числовой идентификатор приложения. Я полагаю, вы знаете, как найти это, верно?

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

playerstats
  game
  player
  stats
  achievements
    achievement
      iconClosed
      iconOpened
      name
      apiname
      description
      unlockTimestamp

Важное примечание: unlockTimestamp не всегда доступен. Не вдаваясь в подробности, похоже, что это было добавлено намного позже в случае более старых игр (например, TF2). Таким образом, у вас есть некоторые оригинальные достижения, которые возвращают данные, подобные этому:

<achievement closed="1">
  <iconClosed>http://media.steampowered.com/steamcommunity/public/images/apps/440/tf_play_game_everyclass.jpg</iconClosed>
  <iconOpen>http://media.steampowered.com/steamcommunity/public/images/apps/440/tf_play_game_everyclass_bw.jpg</iconOpen>
  <name>Head of the Class</name>
  <apiname>tf_play_game_everyclass</apiname>
  <description>Play a complete round with every class.</description>
</achievement>

По сравнению с более новыми достижениями, которые выглядят так:

<achievement closed="1">
  <iconClosed>http://media.steampowered.com/steamcommunity/public/images/apps/440/bb590c7ca44dfc7eb6a31abb39fae07c47502ac7.jpg</iconClosed>
  <iconOpen>http://media.steampowered.com/steamcommunity/public/images/apps/440/4f244b30a76e9de5287a82cc3829c7930baa38c7.jpg</iconOpen>
  <name>Got A Light?</name>
  <apiname>tf_pyro_burn_spy_taunt</apiname>
  <description>Ignite an enemy Spy while he's flicking a cigarette.</description>
  <unlockTimestamp>1301887931</unlockTimestamp>
</achievement>

Если игрок еще не заработал достижение, то атрибут closed узла achievement будет равен 0, а возвращаемые данные будут похожи на старые достижения (без unlockTimestamp).

<achievement closed="0">
  <iconClosed>http://media.steampowered.com/steamcommunity/public/images/apps/440/957daad8f6b9f237620e0326f38cbf941c60a9d1.jpg</iconClosed>
  <iconOpen>http://media.steampowered.com/steamcommunity/public/images/apps/440/34b787ce4e47ef0e206ecd52626b053da13e18c4.jpg</iconOpen>
  <name>Krazy Ivan</name>
  <apiname>tf_heavy_kill_underwater</apiname>
  <description>Kill 50 enemies while both you and your victim are underwater.</description>
</achievement>

В приведенной выше XML-структуре узел achievement будет повторяться для каждого достижения, доступного для выбранной игры.

person Andy♦    schedule 13.05.2014
comment
Большое спасибо! Но я обнаружил, что не все игры поддерживают старый XML API, и я решил эту проблему, разобрав HTML-страницу с достижениями. - person Akki; 13.05.2014
comment
@Andy Энди, ты видишь возможность сделать это с новым интерфейсом? В настоящее время я получаю свои достижения с помощью wiki.teamfortress.com/wiki/WebAPI/GetPlayerAchievements . Но unlockTimestamp нет :( - person Christian Gollhardt; 17.05.2014