如何使用 Steam API 获取 Steam 游戏的“上次播放时间”

问题描述 投票:0回答:4

我正在开发一个应用程序,它使用公共 Steam API 来收集一些信息。 目前,我通过调用

GetPlayerAchievements (v0001)
和调用
GetOwnedGames (v0001)
的总播放时间来检索成就。这很好用。

但现在我还需要知道游戏的最后一次播放数据是什么,例如,如果您进入个人资料页面,您可以在 html 页面中看到此信息(http://steamcommunity.com/profiles/your_steam_id_here/ )

查看 Steam API 文档我找不到任何 api 调用来检索此信息。那么,这只能通过抓取用户个人资料网络来获得吗?

steam-web-api
4个回答
9
投票

当然,这些数据肯定存在于 Valve 的服务器中,但他们只是出于某种原因不公开它。目前,该数据似乎只能从用户 PC 上的 Steam 客户端获得。经过一番挖掘,我发现可以从以下文件中获得上次播放的时间戳:

\steam\userdata\{steam_id}\config\localconfig.vdf

注意,.vdf 文件是一个文本文件,可以在文本编辑器中打开。 这是其中一个时间戳的示例(正当防卫 3):

"225540"
{
    "LastPlayed"        "1466894369"
}

时间戳采用纪元格式并转换为

6/25/2016, 6:39:29 PM GMT-4:00 DST

你可以让用户从他们的计算机上传这个文件,然后你可以在你的服务器上解析它以获得最后播放的时间戳。这并不理想,但这是一个开始。

我不确定您为项目选择的编程语言是什么,但这里有一些 VDF 解析器可以帮助您入门:
C#:
https://github.com/sanmadjack/VDF
节点JS:
https://www.npmjs.com/package/vdf
蟒蛇:
https://gist.github.com/strycore/5735482

编辑2017年4月29日:
我现在发现可以从用户的 Steam 游戏页面中抓取此信息: http://steamcommunity.com/id/pcmantinker/games/?tab=all

通过检查页面的源代码,我注意到有一个用于渲染游戏的 JavaScript 对象。在这个对象中,每个游戏都有一个可用的“last_played”字段。一个条目看起来像这样:

{
   "appid":346110,
   "name":"ARK: Survival Evolved",
   "logo":"http:\/\/cdn.edgecast.steamstatic.com\/steamcommunity\/public\/images\/apps\/346110\/58a660ddb7ed1864656ec65e4c18d6edd3bbf512.jpg",
   "friendlyURL":346110,
   "availStatLinks":{
      "achievements":true,
      "global_achievements":true,
      "stats":false,
      "leaderboards":false,
      "global_leaderboards":false
   },
   "hours":"0.5",
   "hours_forever":"84",
   "last_played":1492447993
}

为了解析此信息,您需要找到字符串的开头和结尾,然后将 JSON 解析为您可以操作的对象。此时字符串的开头是

"var rgGames = ["
,字符串的结尾是
"];"
。我知道这并不理想,但它确实允许您在无需安装 Steam 客户端的情况下获取此信息。


1
投票

基于@cameron-tinker 的帖子(截至 2022 年 6 月),浏览器控制台中的这个 JS 为这样的 URL http://steamcommunity.com/id/pcmantinker/games/?tab=all 拉出最多最近的项目:

rgGames.filter(g => g.last_played > 0).sort((a,b) => b.last_played - a.last_played)[0]

然后您可以将其包装在日期解析器中以打印人类友好的日期。

new Date(rgGames.filter(g => g.last_played > 0).sort((a,b) => b.last_played - a.last_played)[0].last_played * 1000)

0
投票

Steam API 当前不提供此信息。我自己找的,整理自有游戏列表


0
投票

截至 2023 年 9 月 3 日,使用

rgGames
的答案不再有效。 Valve 更新了该页面,它似乎不再公开该 javascript 变量。

但是,GetOwnedGames 的 Steam API 响应现在包含字段

rtime_last_played
。这似乎是最后一次玩游戏,以秒为单位的 UTC unix 时间。

例如查询

https://api.steampowered.com/IPlayerService/GetOwnedGames/v1/?access_token={YOUR_ACCESS_TOKEN}&steamid={STEAMID}

现在返回如下响应:

{
  "response": {
    "game_count": 1,
    "games": [
      {
        "appid": 286160,
        "playtime_2weeks": 89,
        "playtime_forever": 7167,
        "playtime_windows_forever": 7108,
        "playtime_mac_forever": 0,
        "playtime_linux_forever": 0,
        "rtime_last_played": 1677310875
      }
    ]
  }
}

谢谢,Valve!很高兴现在将其作为官方 API 的一部分——无需抓取。

steamapi.xpaw.me 是探索这些 API 的好方法。它似乎包含 Valve 开发者社区 WikiSteamWorks Web Api 文档

的官方文档中没有的参数
© www.soinside.com 2019 - 2024. All rights reserved.