如何使用Steam API在Steam游戏中获得“最后播放”

use*_*306 5 steam-web-api

我正在开发一个使用公共Steam API收集一些信息的应用程序。目前,我通过致电GetPlayerAchievements (v0001)和打了总时数来检索成就GetOwnedGames (v0001)。这很好。

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

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

Cam*_*ker 6

当然,这些数据必须存在于Valve的服务器中,但无论出于何种原因,它们都不会公开。目前看来,此数据仅可从用户PC上的Steam客户端获得。经过一番挖掘之后,我可以从以下文件中找到最近播放的时间戳:

\steam\userdata\{steam_id}\config\localconfig.vdf
Run Code Online (Sandbox Code Playgroud)

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

"225540"
{
    "LastPlayed"        "1466894369"
}
Run Code Online (Sandbox Code Playgroud)

时间戳记采用纪元格式,并转换为 6/25/2016, 6:39:29 PM GMT-4:00 DST

您可以让用户从他们的计算机上载此文件,然后可以在服务器上解析该文件以获取上次播放的时间戳。这并不理想,但这是一个开始。

我不确定您的项目选择哪种编程语言,但是这里有一些VDF解析器可以帮助您入门:
C#:
https : //github.com/sanmadjack/VDF
NodeJS:
https://www.npmjs .com / package / vdf
Python: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
}
Run Code Online (Sandbox Code Playgroud)

为了解析此信息,您需要找到字符串的开头和结尾,然后将JSON解析为可以操作的对象。此时,字符串的开头为,字符串"var rgGames = ["的结尾为"];"。我知道这并不理想,但是它确实允许您获得此信息,而无需安装Steam客户端。


Edg*_*gar 0

目前 Steam API 上不提供此信息。我自己正在寻找它来对拥有的游戏列表进行排序。