Steam API:输入错误并将JSON转换为CSV?

时间:2015-04-11 21:15:32

标签: python json csv

我正在试图弄清楚为什么我在尝试从Steam API中退出时遇到Type错误,我正在尝试创建一个字典然后变成一个CSV文件,我知道这是在JSON所以我的问题有两个,如何创建CSV类型的数据以及如何获取我所拥有的JSON信息。这种方法的想法是获取AppID列表,以便我可以找到它们的价格:

代码:

def steamlibrarypull(steamID, key):
    #Pulls out a CSV of Steam libraries
    steaminfo = {
        'key': key,
        'steamid': steamID,
        'format':'JSON',
        'include_appinfo':'1'
    }
    r = requests.get('http://api.steampowered.com/IPlayerService/GetOwnedGames/v0001/', params=steaminfo)
    d = json.loads(r.content)
    I = d['response']['games']
    B = {}
    for games in I:
        B[I['name']] = I['appid']
    return B
Traceback (most recent call last):
  File "steam.py", line 46, in <module>
    print steamlibrarypull(76561197960434622, key)
  File "steam.py", line 44, in steamlibrarypull
    B[I['name']] = I['appid']
TypeError: list indices must be integers, not str

2 个答案:

答案 0 :(得分:0)

您的for循环没有按照您的意愿执行。使用此:

for game in I:
    B[game['name']] = game['appid']
return B
在这种情况下

I(我假设,因为我没有Steam帐户)是一个包含许多dicts的列表,每个dicts都有'name'字段和{{1其他领域。您的'appid'循环正在遍历每个dicts,并且您希望仅将这两个字段存储在名为for的新dict中。但是,在您的代码中,B不起作用,因为I['name']是一个列表,并且只能由整数索引,因此错误。但是,当迭代这个dicts列表时,I可以正常工作,因为dicts是由它们的键索引的。

就将此数据转换为CSV格式而言,有关此主题的SO有很多问题,因此请使用Google进行搜索。

答案 1 :(得分:0)

您没有正确引用迭代器。

def steamlibrarypull(steamID, key):
    #Pulls out a CSV of Steam libraries
    steaminfo = {
        'key': key,
        'steamid': steamID,
        'format':'JSON',
        'include_appinfo':'1'
    }
    r = requests.get('http://api.steampowered.com/IPlayerService/GetOwnedGames/v0001/', params=steaminfo)
    d = json.loads(r.content)
    I = d['response']['games']
    B = {}
    for games in I:
        B[games['name']] = games['appid']
 return B

这将返回一个名称字典:appid。然后,您需要遍历它并将其写入文件。

with open('games.csv', 'w') as f:
for key, value in B.items():
   f.write("%s,%s\r\n" % (key, value))