2

我正在尝试访问使用 Steam API 播放的 TF2 时间量。我目前正在使用:-

http://api.steampowered.com/ISteamUserStats/GetUserStatsForGame/v0002/?appid=440&key=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx&steamid=xxxxxxxxxxxxxxxxx&format=xml

然后过滤 XML 并提取与每个类相关的播放时间(例如 pyro (Pyro.accum.iPlayTime) 等)。这工作正常,但我认为缺少 MVM 类使我的最终值不正确(当在线网站说超过 1600 小时时,我的 Python 代码返回 977)。添加 MVM 类(可能还有其他类)可能会提供正确的结果,但它会使代码非常冗长。

所以我想知道 Steam Web API 中是否有一个调用,它只会给我播放的总时间,而不必进行所有的提取和添加?

我浏览了 Steam Web API 开发人员页面,但找不到任何关于我所追求的参考。

添加代码:

if __name__ == '__main__':
    import urllib2
    import xml.etree.ElementTree as ET
    import datetime

    timeKISA = 0
    playerStatsKISA = urllib2.urlopen('http://api.steampowered.com/ISteamUserStats/GetUserStatsForGame/v0002/?appid=440&key=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx&steamid=xxxxxxxxxxxxxxxxx&format=xml')
    statsKISA = playerStatsKISA.read()
    theStatsKISA = ET.fromstring(statsKISA)
    for stat in theStatsKISA.findall("./stats/stat"):
        if stat.find('name').text.startswith('Scout.accum.iPlayTime') or \
             stat.find('name').text.startswith('Soldier.accum.iPlayTime') or \
             stat.find('name').text.startswith('Engineer.accum.iPlayTime') or \
             stat.find('name').text.startswith('Medic.accum.iPlayTime') or \
             stat.find('name').text.startswith('Spy.accum.iPlayTime') or \
             stat.find('name').text.startswith('Sniper.accum.iPlayTime') or \
             stat.find('name').text.startswith('Demoman.accum.iPlayTime') or \
             stat.find('name').text.startswith('Heavy.accum.iPlayTime') or \
             stat.find('name').text.startswith('Pyro.accum.iPlayTime'):

             timeKISA = timeKISA + int(stat.find('value').text) 
        finalTimeKISA = timeKISA / 60 / 60
        KISATime = ('KISA_Time=' + str(finalTimeKISA) + ' hours')
        print KISATime

谢谢你。

马库斯

4

1 回答 1

1

将我的评论纳入答案,

据我了解,*.accum.iPlayTime无论游戏模式或地图如何,这些字段对于您作为该班级的时间都是累积的。根据我自己的统计数据(以及对我朋友列表中其他几个人的一瞥),这与 Steam 社区报告的游戏时间完全吻合。此外,它会报告您的游戏时间与您的 TF2 成就页面上的这些字段相匹配。

几点注意事项:

  • 玩家个人资料上的摘要页面似乎与成就页面显示的实际统计数据不匹配。我不确定这是 Steam 社区问题还是其他字段的摘要。然而,成就页面,它按类别、最长寿命等详细细分了游戏时间,使用与GetUserStatsForGameAPI 调用相同的数据。
  • 您的代码中有一个非常小的格式问题。最后一个print KISATime缩进一到多次,因此会多次打印该KISA_Time =行。如果你把它拉出for循环,你只会得到一次打印行。
  • 如果你改变你finalTimeKISA = timeKISA / 60 / 60的十进制60.0,你会得到十进制的答案。否则,照原样,您只会收到一个整数答案。
于 2013-11-04T14:23:29.480 回答