我正在尝试使用 Steam API 获取 TF2 的游玩时间。我目前正在使用:-
http://api.steampowered.com/ISteamUserStats/GetUserStatsForGame/v0002/?appid=440&key=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx&steamid=xxxxxxxxxxxxxxxxx&format=xml
然后过滤 XML 并提取与每个类相关的播放时间(例如 pyro (Pyro.accum.iPlayTime) 等)。这工作正常,但我认为缺少 MVM 类使我的最终值不正确(我的代码,在 Python 中,当在线网站说超过 1600 小时时返回 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
谢谢。
马库斯
请您参考如下方法:
将我的评论转化为答案,
据我了解,无论游戏模式或 map 如何,*.accum.iPlayTime 字段都会累积您作为该类(class)的位置时间。根据我自己的统计数据(以及我 friend 列表中其他几个人的一瞥),这与 Steam 社区报告的游戏时间完全吻合。此外,它报告您的游戏时间与 TF2 成就页面上的这些字段相匹配。
一些注意事项:
- 玩家个人资料上的摘要页面似乎与成就页面显示的实际统计数据不符。我不确定这是 Steam 社区问题还是其他字段的摘要。然而,成就页面详细列出了各职业的游戏时间、最长生命周期等,它使用与
GetUserStatsForGameAPI 调用相同的数据。 - 您的代码中存在非常小的格式问题。最后一个
print KISATime缩进了一到多次,因此多次打印KISA_Time =行。如果将其从for循环中拉出,您只会得到打印行一次。 - 如果您将
finalTimeKISA = timeKISA/60/60更改为十进制60.0,您将得到十进制答案。否则,照原样,您只会收到一个整数答案。
