web-dev-qa-db-ja.com

誰かのSteamインベントリを取得する

ユーザーのSteamインベントリにアクセスする必要があるWebサイトを作成しています。 Team Fortress 2インベントリ、Dota 2、CS:S、CS:GO、Portal 2を取得するAPIを見つけました。しかし、Steamインベントリを取得するためのAPIは見つかりませんでした。

ユーザーのSteamインベントリにアクセスできますか?

39
Tiwenty

新しいエンドポイント

2016年12月の時点で、インベントリを取得するための新しいエンドポイントがあります。以下にリストされている古いエンドポイントはまだ動作します(今のところ)。どちらも非常にレート制限されているようです。

新しいインベントリパスは次のとおりです。

http://steamcommunity.com/inventory/<PROFILEID>/440/2?l=english&count=5000

この新しいパスでは、lはデータを受信する言語であり、countは一度に受信するアイテムの数です。最大は5000です。

この新しいエンドポイントでページ分割することもできます。

http://steamcommunity.com/inventory/<PROFILEID>/440/2?l=english&count=5000&start_assetid=468336866

これにより、assetid 468336866で始まる次の5000アイテムが取得されます。

エンドポイントは、次の構造を持つ大きなJSONオブジェクトを返します。

{ 
    'assets': <list>,
    'descriptions': <list>,
    'total_inventory_count': integer,
    'success': 1/0,
    'rwgran': integer
}

この時点でrwgranが何であるかは完全にはわかりません。

assetsキーは、次のようなデータを返します。

[{'amount': '1',
         'appid': '440',
         'assetid': '4985815666',
         'classid': '134',
         'contextid': '2',
         'instanceid': '0'},
        {'amount': '1',
         'appid': '440',
         'assetid': '4985815941',
         'classid': '22989188',
         'contextid': '2',
         'instanceid': '0'},
        ...
]

descriptionsキーには、このようなエントリが含まれています。これには、古いエンドポイントよりも多くの情報が含まれていることに注意してください。

[{'actions': [{'link': 'http:\\/\\/wiki.teamfortress.com\\/scripts\\/itemredirect.php?id=241&lang=en_US',
                            'name': 'Item Wiki Page...'}],
               'appid': 440,
               'background_color': '3C352E',
               'classid': '134',
               'commodity': 0,
               'currency': 0,
               'descriptions': [{'type': 'text',
                                 'value': 'Is an enemy player questioning your skills, personal hygiene, and\\/or ancestry?\nUse these stylish firearms to challenge them to a duel!\nSee the Mann Co. Catalog for full details.'},
                                {'type': 'text', 'value': ' '},
                                {'color': '00a000',
                                 'type': 'text',
                                 'value': 'This is a limited use item.  Uses: 5'}],
               'icon_url': 'fWFc82js0fmoRAP-qOIPu5THSWqfSmTELLqcUywGkijVjZULUrsm1j-9xgECbwgfYh_3vTRKhs_ZAfOeD-VOyo4z4clTizJqwQcpYOHnNDFmcweRVqQPCqVq91C-WCM26pFnB4PjofUWJ1uAGDnHsA',
               'icon_url_large': 'fWFc82js0fmoRAP-qOIPu5THSWqfSmTELLqcUywGkijVjZULUrsm1j-9xgECbwgfYh_3vTRKhs_ZAfOeD-VOyo4z4clTizJqwQcpYOHnNDFmcweRVqQPCqVq91C-WCM26pFnB4PjofUWJ1uAGDnHsA',
               'instanceid': '0',
               'market_hash_name': 'Dueling Mini-Game',
               'market_marketable_restriction': 0,
               'market_name': 'Dueling Mini-Game',
               'market_tradable_restriction': 7,
               'marketable': 0,
               'name': 'Dueling Mini-Game',
               'name_color': '7D6D00',
               'tags': [{'category': 'Quality',
                         'color': '7D6D00',
                         'internal_name': 'Unique',
                         'localized_category_name': 'Quality',
                         'localized_tag_name': 'Unique'},
                        {'category': 'Type',
                         'internal_name': 'TF_UsableItem',
                         'localized_category_name': 'Type',
                         'localized_tag_name': 'Usable Item'},
                        {'category': 'Class',
                         'internal_name': 'Scout',
                         'localized_category_name': 'Class',
                         'localized_tag_name': 'Scout'},
                        {'category': 'Class',
                         'internal_name': 'Sniper',
                         'localized_category_name': 'Class',
                         'localized_tag_name': 'Sniper'},
                        {'category': 'Class',
                         'internal_name': 'Soldier',
                         'localized_category_name': 'Class',
                         'localized_tag_name': 'Soldier'},
                        {'category': 'Class',
                         'internal_name': 'Demoman',
                         'localized_category_name': 'Class',
                         'localized_tag_name': 'Demoman'},
                        {'category': 'Class',
                         'internal_name': 'Medic',
                         'localized_category_name': 'Class',
                         'localized_tag_name': 'Medic'},
                        {'category': 'Class',
                         'internal_name': 'Heavy',
                         'localized_category_name': 'Class',
                         'localized_tag_name': 'Heavy'},
                        {'category': 'Class',
                         'internal_name': 'Pyro',
                         'localized_category_name': 'Class',
                         'localized_tag_name': 'Pyro'},
                        {'category': 'Class',
                         'internal_name': 'Spy',
                         'localized_category_name': 'Class',
                         'localized_tag_name': 'Spy'},
                        {'category': 'Class',
                         'internal_name': 'Engineer',
                         'localized_category_name': 'Class',
                         'localized_tag_name': 'Engineer'}],
               'tradable': 1,
               'type': 'Level 5 Usable Item'},
      ...
]

古いメソッドと同様に、assetsdescriptionsは両方でclassidを介してリンクされます。


古いエンドポイント

ターゲットのプロファイル権限が適切に設定されている場合、いくつかの限られた情報を取得できます。

ベータ(および適切な権限が設定されている場合はギフト)インベントリのこれら2つのリンクのいずれかを使用して、結果のjsonファイルを表示できます。

http://steamcommunity.com/id/<CUSTOMURL>/inventory/json/753/1http://steamcommunity.com/profiles/<PROFILEID>/inventory/json/753/1

CUSTOMURLは、プレーヤーが使用するために選択したユーザーフレンドリ名です。これはプレイヤーがいつでも変更できます。 Webページを書いている場合、この情報を取得する方法を知っていると思いますか? PROFILEIDは、アカウントを作成したときにSteamからプレイヤーに付与される64ビットIDです。これは変更できません。OpenID実装を使用してログインすると、Steamによって返されます。

これらのURLを使用する場合、いくつかの可能な応答があります。 1つ目は、ユーザーのプロファイルがプライベートに設定されている場合です。

{"success":false,"Error":"This profile is private."}

2番目は、インベントリ内の「スタッフ」のリストです

{
    "success":true,
    "rgInventory":
    {
        "1586670077416875609":
        {
            "id":"1586670077416875609",
            "classid":"149742033",
            "instanceid":"0",
            "amount":"1",
            "pos":1
        },
        "1586670077416875905":
        {
            "id":"1586670077416875905",
            "classid":"149742033",
            "instanceid":"0",
            "amount":"1",
            "pos":2
        },
        "1586670077416877092":
        {
            "id":"1586670077416877092",
            "classid":"149742033",
            "instanceid":"0",
            "amount":"1",
            "pos":3
        }
    },
    "rgCurrency":[],
    "rgDescriptions":
    {
        "149742033_0":
        {   "appid":"753",
        "classid":"149742033",
        "instanceid":"0",
        "icon_url":"ZyjGwQD4ogROtSm7KvtdP99kDHBEiKxKm3Gg7pMaBJyiPu4iS_PzF6QhOUdOwk-m0WhXYQ7X8AbNL6Hz1VxOnq4-8iBC5MlBuXMuElaaCrHQLww9T5S1Ecoqo_PYWg==",
        "icon_url_large":"a6FEz5nbBlvu8bGd1oDggdPtjn7dqwgVOzU4yG9huSKut2ws0tBXSARloWGyufIY3eHVb5f0VFltaznVKSfzK6amZz7FjFhcTTm6Maz860eOrMo937A=",
        "icon_drag_url":"",
        "name":"Steam Trading Card Beta",
        "market_name":"",
        "name_color":"",
        "background_color":"",
        "type":"Gift",
        "tradable":1,
        "marketable":0,
        "descriptions":[
            {"value":"Steam Trading Card Beta Access - Extra Copy"},
            {"value":"Grants early access to the Steam Trading Cards beta, game badges, and the new profile. Join the Steam Trading Cards Group and post your feedback in the Discussions area. Select \u201cAdd to my game library\u201d to activate."}
            ],
        "actions":[
            {"name":"View in store","link":"http:\/\/steamcommunity.com\/tradingcards"}
            ]
        }
    }
}

URLがあなたのIDのもので、Steamにログインしている場合、Giftとしてリストされているアイテムも見ることができます。それ以外の場合、これらはデフォルトで非表示になります。

これは公式のAPIではないため、この特定のスキーマに関するドキュメントはあまりありません。ただし、rgInventoryのアイテムはreDescriptionsによってclassidのアイテムにリンクされているようです。パーサーの作成は、読者の演習として残されています。

これらはベータアクセスを示しています。

トレーディングカード情報を探している場合は、上記のURLの16に変更します

http://steamcommunity.com/id/<CUSTOMURL>/inventory/json/753/6http://steamcommunity.com/profiles/<PROFILEID>/inventory/json/753/6

これらのスキーマレイアウトは同じように見えます。

82
Andy

Andyの答えを正確に言うと、スキーマは次のとおりです。

http://steamcommunity.com/profiles/<PROFILEID>/inventory/json/<APPID>/<CONTEXTID>

アプリIDは、このインベントリが関連するゲーム/アプリケーションを識別します: リストはこちら

コンテキストIDはアイテムをフィルタリングし、ゲームごとに異なります。

もう1つ:返されるアイテムはclassid-instanceidのペア( source )によって一意に識別されるため、それらを説明にリンクするときは、両方を考慮する必要があります。

12
Jrs42