2

Django環境を使用していて、Steamから統計を取得したいと思います。ただし、SteamのAPIは、約20の異なるURLを持っているという点で、うっとうしいほど愚かです。私が情報を求めている主な2つは次のとおりです。

GETSteamからのデータにPythonRequestsライブラリを使用しています。

import requests
import json
from xml.dom.minidom import parseString

STEAM_API_URL = 'http://api.steampowered.com/ISteamUser/GetPlayerSummaries/v0002'
STEAM_API_KEY = 'XXXXX'
STEAM_USERNAME = 'niteshade'

# Make request to steamcommunity.com with the username to get the 64-bit Steam ID
username_r = requests.get('http://steamcommunity.com/id/{0}/games?tab=all&xml=1'.format(STEAM_USERNAME))
steamid = str(parseString(username_r.text.encode('utf-8')).getElementsByTagName('steamID64')[0].firstChild.wholeText)
totalgames = parseString(username_r.text.encode('utf-8')).getElementsByTagName('game').length

data = {
    'key': STEAM_API_KEY,
    'steamids': steamid,
}

user_r = requests.get(STEAM_API_URL, params=data)
#user_r.json['response']['players'][0].update({'totalgames'.encode('utf-8'): totalgames})

クエリを実行するsteamcommunity.comと、次のようなメッセージが返されます。

<gamesList>
    <steamID64>12345</steamID64>
    <steamID>aSteamID</steamID>
    <games>
        <game>
            <appID>201790</appID>
            <name>Orcs Must Die! 2</name>
            <logo>http://media.steampowered.com/steamcommunity/public/images/apps/201790/c345d9b205f349f0e7f4e6cdf8af4d0b7d242505.jpg</logo>
            <storeLink>http://steamcommunity.com/app/201790</storeLink>
            <hoursLast2Weeks>2.2</hoursLast2Weeks><hoursOnRecord>14.3</hoursOnRecord>
            <statsLink>http://steamcommunity.com/id/niteshade/stats/201790</statsLink>
            <globalStatsLink>http://steamcommunity.com/stats/201790/achievements/</globalStatsLink>
        </game>
        <game>
            <appID>113200</appID>
            <name>The Binding of Isaac</name>
            <logo>http://media.steampowered.com/steamcommunity/public/images/apps/113200/d9a7ee7e07dffed1700cb8b3b9482105b88cc5b5.jpg</logo>
            <storeLink>http://steamcommunity.com/app/113200</storeLink>
            <hoursLast2Weeks>0.2</hoursLast2Weeks>
            <hoursOnRecord>22.8</hoursOnRecord>
            <statsLink>http://steamcommunity.com/id/niteshade/stats/BindingOfIsaac</statsLink>
            <globalStatsLink>http://steamcommunity.com/stats/BindingOfIsaac/achievements/</globalStatsLink>
        </game>
        <game>
            <appID>19680</appID>
            <name>Alice: Madness Returns</name>
            <logo>http://media.steampowered.com/steamcommunity/public/images/apps/19680/16eb0cc15cde07377c0cb3bffa6d92bbc6dd72b2.jpg</logo>
            <storeLink>http://steamcommunity.com/app/19680</storeLink>
        </game>
    </games>

そしてapi.steampowered.com私はこれを得る:

{
    "response": {
        "players": [
            {
                "steamid": "12345",
                "communityvisibilitystate": 3,
                "profilestate": 1,
                "personaname": "aSteamID",
                "lastlogoff": 1351676021,
                "profileurl": "http:\/\/steamcommunity.com\/id\/aSteamID\/",
                "avatar": "http:\/\/media.steampowered.com\/steamcommunity\/public\/images\/avatars\/b2\/b261f66a17bfa6c95b24f8b4c6b58bb3776d57e4.jpg",
                "avatarmedium": "http:\/\/media.steampowered.com\/steamcommunity\/public\/images\/avatars\/b2\/b261f66a17bfa6c95b24f8b4c6b58bb3776d57e4_medium.jpg",
                "avatarfull": "http:\/\/media.steampowered.com\/steamcommunity\/public\/images\/avatars\/b2\/b261f66a17bfa6c95b24f8b4c6b58bb3776d57e4_full.jpg",
                "personastate": 4,
                "realname": "Real Name",
                "primaryclanid": "103582791429705688",
                "timecreated": 1250966723,
                "loccountrycode": "GB"
            }
        ]       
    }
}

基本的に、から何かを取得できるようにするにapi.steampowered.comは、SteamIDが必要です。steamcommunity.comそれを取得するために、特にSteamIDを含むXMLファイルを返すWebサイトを呼び出します。必要な情報は次のとおりです(XML / JSON応答の名前を使用)。

プレーヤー

  • Steamid
  • ペルソナネーム
  • プロフィールURL
  • 友達(別のAPI呼び出しが必要だと思います)
  • ペルソナステート
  • ゲームの総数
  • アバターフル

ゲーム

  • AppID
  • 名前
  • ロゴ
  • hoursLast2Weeks

<game>ゲームの総数については、によって返されるXMLファイル内のノードの数を数えるだけだと思いましたsteamcommunity.com。それらを数えることができたという点で機能しましたが、totalgamesからのJSON応答にフィールドを追加できないようですapi.steampowered.com。次に、すべての<game>ノードに<hoursLast2Weeks>子ノードがあるわけではありません。子ノードがあるノードだけが必要です。第三に、プレイヤーの友達の合計を取得したいだけです。私は冗談ではありません。別のものを使用する必要があることはわかっていますGETが、問題はそれをJSONに追加することです。

私の主な問題は、JSON応答に追加しようとしていることです。私は、SOの他の例を見て、それらをフォローしようとしましたが、ここでどこが間違っているのかわかりません。どんな助けでも大歓迎です。

4

2 に答える 2

5

jsonデータの変更は非常に簡単です。

jsondata = json.loads(json_input_string)
jsondata['newkey'] = new_value
json_output_string = json.dumps(jsondata)
于 2012-11-01T15:39:26.500 に答える
1

応答totalgamesで各要素に追加することを満足させるには:players

import json
response = '{"response": {"players": [{"steamid": "12345","communityvisibilitystate": 3,"profilestate": 1,"personaname": "aSteamID","lastlogoff": 1351676021,"profileurl": "http:\/\/steamcommunity.com\/id\/aSteamID\/","avatar": "http:\/\/media.steampowered.com\/steamcommunity\/public\/images\/avatars\/b2\/b261f66a17bfa6c95b24f8b4c6b58bb3776d57e4.jpg","avatarmedium": "http:\/\/media.steampowered.com\/steamcommunity\/public\/images\/avatars\/b2\/b261f66a17bfa6c95b24f8b4c6b58bb3776d57e4_medium.jpg","avatarfull": "http:\/\/media.steampowered.com\/steamcommunity\/public\/images\/avatars\/b2\/b261f66a17bfa6c95b24f8b4c6b58bb3776d57e4_full.jpg","personastate": 4,"realname": "Real Name","primaryclanid": "103582791429705688","timecreated": 1250966723,"loccountrycode": "GB"}]}}'
data = json.loads(response)
for player in data["response"]["players"]:
    # add code to get game count by player here                  
    # set to zero for this example
    totalgames = 0
    player["totalgames"] = totalgames

print json.dumps(data, sort_keys=True, indent=4)
于 2012-11-01T16:39:50.800 に答える