我正在开发一个应用程序,它使用公共 Steam API 来收集一些信息。 目前,我通过调用
GetPlayerAchievements (v0001)
和调用 GetOwnedGames (v0001)
的总播放时间来检索成就。这很好用。
但现在我还需要知道游戏的最后一次播放数据是什么,例如,如果您进入个人资料页面,您可以在 html 页面中看到此信息(http://steamcommunity.com/profiles/your_steam_id_here/ )
查看 Steam API 文档我找不到任何 api 调用来检索此信息。那么,这只能通过抓取用户个人资料网络来获得吗?
当然,这些数据肯定存在于 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 客户端的情况下获取此信息。
基于@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)
Steam API 当前不提供此信息。我自己找的,整理自有游戏列表
截至 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 开发者社区 Wiki 和 SteamWorks Web Api 文档
的官方文档中没有的参数