2015-04-12 505 views
1

我試圖抓取價格清單。到目前爲止,我對這樣的事情代碼:Steam API抓取價格清單

def steamlibrarypull(steamID, key): 
    #Pulls out a CSV of Steam appids. 
    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'].encode('utf8')] = games['appid'] 
    with open('games.csv', 'w') as f: 
     for key, value in B.items(): 
      f.write("%s,%s\r\n" % (key, value)) 
    return B 

但我希望能夠做到就買這本字典和輸出中出的價格清單,一個request.GET中。 https://wiki.teamfortress.com/wiki/User:RJackson/StorefrontAPI似乎需要一個CSV列表的需要,但真的有必要嗎?

+0

我已經發布了足夠的信息來幫助您開始,但您需要學習更多的Python來完成這項工作。你需要學習如何添加一個新的關鍵字:值對,字典,如何檢查密鑰是否存在等。有一定數量的代碼需要返回這些價格,並使代碼高效,你將需要更好的理解python。看看我以前發佈的代碼。我使用的方法是你將需要拉這些價格。嘗試將api請求放入瀏覽器中以查看json。這是一個更深入,然後可以在這裏發佈。 –

回答

1

這是一個非正式的蒸汽api,意思是蒸汽會根據他們認爲合適的方式進行修改。目前它不支持多個appid如註釋here
用它來獲得遊戲的價格,你會去

http://store.steampowered.com/api/appdetails/?appids=237110&cc=us&filters=price_overview 

從你上面,你需要知道如何通過字典迭代,一旦你把它找回來更新存儲價格的代碼工作。

def steamlibrarypull(steamID, key): 
#Pulls out a CSV of Steam appids. 
    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) 
    response = d['response']['games'] 
    games = {} 
    for game in response: 
     getprice = requests.get('http://store.steampowered.com/api/appdetails/?appids=%d&filters=price_overview&cc=us' % game['appid']) 
     if getprice.status_code == 200: 
      rjson = json.loads(getprice.text) 
      # use the appid to fetch the value and convert to decimal 
      # appid is numeric, cast to string to lookup the price 
      try: 
       price = rjson[str(game['appid'])]['data']['price_overview']['initial'] * .01 
      except: 
       price = 0 
      games[game['name']] = {'price': price, 'appid': game['appid']} 

這將返回以下字典:

{u'Half-Life 2: Episode Two': {'price': 7.99, 'appid': 420} 

它會更容易通過的appid,而不是名稱來導航,但根據您的要求和原來的結構,這是它應該怎麼做。這會給你你可以進一步處理或寫入文件的名稱,appid和價格。 請注意,這不包括睡眠定時器,如果您的遊戲列表很長,您應該在做出另一個遊戲之前將您的api調用睡眠2秒,否則api將阻止您,並且不會返回會導致python錯誤的數據你解析價格。

+0

回溯(最近通話最後一個): 文件 「steam.py」 64行,在 打印steamlibrarypull(76561197960434622,鍵) 文件 「steam.py」 49行,在steamlibrarypull IDS = ''。加入(ID) TypeError:序列項目0:期望的字符串,發現的int 我收到該錯誤。 – Marorin

+0

我已經爲此添加了完整的測試工作代碼,以便您瞭解它是如何完成的。請重新閱讀並查看我的編輯。多appid不再支持,所以你將需要逐一獲取。最佳做法是在每次請求時入睡,以免被阻止。你將需要解決任何其他問題,因爲我在沒有問題的情況下在237場比賽中進行了測試。我在上面列出了1個結果,所以你可以看到預期的輸出。 –

+0

回溯(最近通話最後一個): 文件 「steam.py」 51行,在 打印steamlibrarypull(76561197960434622,鍵) 文件 「steam.py」 49行,在steamlibrarypull 價格= rjson [STR(遊戲['appid'])] ['data'] ['price_overview'] ['initial'] * .01 KeyError:'data' 似乎出現D: – Marorin