【问题标题】:How to get "last played on" for Steam game using Steam API如何使用 Steam API 获取 Steam 游戏的“最后一次播放时间”
【发布时间】:2015-03-07 21:38:25
【问题描述】:

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

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

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

【问题讨论】:

  • 你能用GetRecentlyPlayedGames (v0001)得到它吗?
  • 不,我不能。 GetRecentlyPlayedGames (v0001) 仅显示过去 2 周已玩游戏的数据。我得到 0 但我无法得到比 2014 年 11 月 17 日用户个人资料播放 Skyrim 的信息。

标签: steam-web-api


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    当然,这些数据必须存在于 Valve 的服务器中,但他们只是出于任何原因都不会公开它。目前,该数据似乎只能从用户 PC 上的 Steam 客户端获得。经过一番挖掘,我能够从以下文件中找到 lastplayed 时间戳:

    \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
    NodeJS:
    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 客户端的情况下获取此信息。

    【讨论】:

    • 这是一个不错的技巧。但是,根据应用程序的不同,它可能无法访问文件系统。
    • 我想在安装过程中可以通过某种提升来授予适当的文件权限。大多数应用程序安装程序需要提升才能更改文件系统、添加注册表项等。
    • 我已经更新了我的答案,以包含一种更好的方法来从网页获取上次播放的时间戳。这应该是首选方法,因为它不需要在用户的机器上安装 Steam。
    • 这仅在您登录 Steam 时有效。我不想让爬虫尝试这样做,Steam 在安全性方面非常谨慎
    • 我刚刚测试了我的 JavaScript 方法并验证我的帐户不需要登录我的个人资料。可以是每个用户的隐私设置吗?
    猜你喜欢
    • 2018-02-11
    • 2021-11-29
    • 2019-10-24
    • 1970-01-01
    • 1970-01-01
    • 2021-01-26
    • 2018-03-02
    • 2022-12-12
    • 2020-01-05
    相关资源
    最近更新 更多