Python 使用Steam WebAPI获取玩游戏的总时间

Python 使用Steam WebAPI获取玩游戏的总时间,python,steam-web-api,Python,Steam Web Api,我正在尝试访问使用Steam API播放的TF2时间量。我目前正在使用:- http://api.steampowered.com/ISteamUserStats/GetUserStatsForGame/v0002/?appid=440&key=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx&steamid=xxxxxxxxxxxxxxxxx&format=xml 然后过滤XML并提取与每个类相关的播放时间(例如pyro(pyro.acum.iPl

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

http://api.steampowered.com/ISteamUserStats/GetUserStatsForGame/v0002/?appid=440&key=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx&steamid=xxxxxxxxxxxxxxxxx&format=xml
然后过滤XML并提取与每个类相关的播放时间(例如pyro(pyro.acum.iPlayTime)等)。这工作正常,但我认为缺少MVM类使我的最终值不正确(我的Python代码返回977,在线站点说超过1600小时)。添加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
多谢各位


马库斯

将我的评论纳入答案

我的理解是,
*.acum.iPlayTime
字段对于您作为该类的位置时间是累积的,无论游戏模式或地图如何。根据我自己的统计数据(以及我朋友名单上的一些其他数据),这与Steam社区报告的游戏时间完全相符。此外,它还报告您的播放时间与TF2成就页面上的这些字段相匹配

几点注意:

  • 球员个人资料的摘要页面似乎与成就页面显示的实际数据不匹配。我不确定这是Steam社区问题还是其他字段的摘要。但是,“成就”页面使用与
    GetUserStatsForGame
    API调用相同的数据,该页面按类、最长寿命等详细列出了播放时间
  • 您的代码中有一个非常小的格式化问题。最后一个
    print KISATime
    缩进一到多次,因此多次打印
    KISA\u Time=
    行。如果将其从
    for
    循环中拉出,则只能获得一次打印行
  • 如果您将
    finalTimeKISA=timeKISA/60/60
    更改为十进制
    60.0
    ,您将得到十进制答案。否则,您将只收到一个整数答案

@Andy,谢谢你的回复,Andy。您添加了哪一个iPlayTime?很明显,所有与课程相关的课程(如:Pyro、Engie、Medic等)。您还需要包括所有MvM等效类吗?我还注意到还有与地图相关的iPlaytime标记,我想我没有包括这些标记。我相信如果我加上所有相关的iPlayTime,我可以得到正确的值,但我的问题更集中于是否有一种更简单的方法来获得总时间,例如,一个简单的iTotalPlayTime标记?我将尝试在上面添加我的代码(以前从未这样做过:)@Andy,我的个人资料是76561197960964581。代码总共返回了987个小时,但当我查看TF2Stats时,它告诉我我已经超过1600个小时了。@Andy,谢谢Andy,那我就到此为止,并假设类包括普通映射和mvm映射。感谢您编写这些内容,并提供更多说明。缩进是一个错误,因为缩进是缩短我的问题代码的一部分(我的完整代码包括许多帐户,并将结果保存到文件以供记录。但感谢您指出它。我还将添加小数点以提高准确性。再次感谢。