1

我正在尝试通过steam-condenser gem 从 Steam 社区获取一些基本信息,到目前为止Steam.new,所有玩家信息似乎都可以正常工作。但是当我这样做时(示例)

player = SteamId.new("tiger")
stats = player.fetch_games

我收到以下错误消息

Traceback (most recent call last):
        1: from lib/assets/ruby/test.rb:15:in `<main>'
/home/zigs/.rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/steam-condenser-1.3.11/lib/steam/community/steam_id.rb:326:in `fetch_games': undefined method `[]' for nil:NilClass (NoMethodError)

我需要的很多信息似乎都与 fetch_games 相关(例如方法total_playtime(id)

不知道为什么这不起作用。我搞不清楚了。非常感谢任何帮助或想法!谢谢!

4

2 回答 2

0

Valve 为 Steam 社区配置文件添加了更多隐私选项,这些选项未反映在旧的 XML API 中。

显然,有问题的个人资料 ( tiger) 将其游戏详细信息设置为“仅限好友”或“私人”,因为游戏在浏览器中也不可用。

已发布的 1.x 版本中的代码不再保证在 Steam 社区中可以正常工作。Valve 几年前弃用了旧的 XML API。遗憾的是,现代 Web API 也没有得到 Valve 方面的太多关注。所以蒸汽冷凝器的开发也基本停止了。

使用 GitHub 存储库分支中的代码可能会更幸运master,该存储库使用 Web API 来实现大多数社区功能。

不过,您必须注册 Steam Web API 密钥:https ://steamcommunity.com/dev/apikey

于 2021-05-15T13:09:23.593 回答
0

TLDR;看起来这个宝石不再起作用了。

您遇到问题的特定模块是:

def fetch_games
  games_data = parse "#{base_url}/games?xml=1"
  @games            = {}
  @recent_playtimes = {}
  @total_playtimes  = {}
  games_data['games']['game'].each do |game_data|
    app_id = game_data['appID'].to_i
    @games[app_id] = SteamGame.new app_id, game_data

    recent = game_data['hoursLast2Weeks'].to_f
    total = (game_data['hoursOnRecord'] || '').delete(',').to_f

    @recent_playtimes[app_id] = (recent * 60).to_i
    @total_playtimes[app_id]  = (total * 60).to_i
  end

  true
end

特定的问题陈述是games_data['games']['game'].each

如果我们要获取特定用户的信息,它会从如下所示的 URL 下载有关该用户的 XML 文档:

http://steamcommunity.com/id/demomenz?xml=1

并且该文件似乎不包含任何games对象。

查看了蒸汽冷凝器 gem的代码库;它已经有大约 6 年没有真正更新了。我只能假设从那时起 XML 格式已被修改,并且 gem 将不再工作。

于 2021-04-28T13:26:37.950 回答