it-swarm.com.de

Jemandes Steam-Inventar bekommen

Ich erstelle eine Website, die auf das Steam-Inventar des Benutzers zugreifen muss. Ich habe eine API gefunden, um Team Fortress 2-Inventar, Dota 2, CS: S, CS: GO und Portal 2 zu erhalten. Aber ich habe keine API gefunden, um Steam-Inventar zu erhalten.

Ist es möglich, auf das Steam-Inventar eines Benutzers zuzugreifen?

39
Tiwenty

Neuer Endpunkt

Ab Dezember 2016 gibt es einen neuen Endpunkt für das Abrufen von Inventaren. Der unten aufgeführte alte Endpunkt funktioniert (vorerst) noch. Beide scheinen stark eingeschränkt zu sein.

Der neue Inventarpfad lautet:

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

Mit diesem neuen Pfad ist l die Sprache, in der Sie Daten zurückerhalten möchten, und count die Anzahl der Elemente, die gleichzeitig zurückerhalten werden sollen. Das Maximum ist 5000.

Sie können auch mit diesem neuen Endpunkt paginieren:

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

Dadurch werden die nächsten 5000 Elemente abgerufen, beginnend mit assetid 468336866.

Der Endpunkt gibt ein großes json-Objekt mit der folgenden Struktur zurück:

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

Ich bin nicht ganz sicher, was rwgran zu diesem Zeitpunkt ist.

Die Taste assets gibt Daten zurück, die folgendermaßen aussehen:

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

Der descriptions Schlüssel enthält Einträge wie diesen. Beachten Sie, dass dies zu Informationszwecken viel mehr enthält als der alte Endpunkt.

[{'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'},
      ...
]

Wie bei der alten Methode sind assets und descriptions über das classid in beiden verknüpft.


Alter Endpunkt

Sie können einige eingeschränkte Informationen abrufen, wenn für das Ziel die entsprechenden Profilberechtigungen festgelegt wurden.

Sie können die resultierenden json Dateien anzeigen, indem Sie einen dieser beiden Links für Beta-Inventare (und Geschenkinventare, sofern die entsprechenden Berechtigungen festgelegt sind) verwenden

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

CUSTOMURL ist der benutzerfreundliche Name, den der Spieler zur Verwendung ausgewählt hat. Dies kann vom Spieler jederzeit geändert werden. Wenn Sie eine Webseite schreiben, gehen wir davon aus, dass Sie wissen, wie Sie diese Informationen erhalten, richtig? PROFILEID ist die 64-Bit-ID, die ein Spieler von Steam erhält, wenn Sie ein Konto erstellen. Dies kann nicht geändert werden und wird von Steam zurückgegeben, wenn sie sich mit einer OpenID-Implementierung anmelden.

Bei Verwendung dieser URLs gibt es einige mögliche Antworten. Der erste ist, wenn der Benutzer sein Profil auf privat gesetzt hat.

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

Die zweite ist eine Auflistung von "Sachen" im Inventar

{
    "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"}
            ]
        }
    }
}

Wenn die URL für IHRE ID ist und Sie bei Steam angemeldet sind, können Sie auch Elemente sehen, die als Gift aufgelistet sind. Ansonsten sind diese standardmäßig ausgeblendet.

Da dies keine offizielle API ist, gibt es nicht viel Dokumentation zu diesem bestimmten Schema. Es scheint jedoch, dass die Elemente in rgInventory durch reDescriptions mit Elementen in classid verknüpft sind. Das Schreiben des Parsers ist eine Übung für den Leser.

Diese zeigt die Beta-Zugriffe.

Wenn Sie nach Informationen zu Sammelkarten suchen, ändern Sie das 1 in den obigen URLs zu einem 6

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

Die Schema-Layouts scheinen für diese gleich zu sein.

82
Andy

Nur um Andys Antwort zu präzisieren, lautet das Schema:

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

Die App-ID identifiziert das Spiel/die Anwendung, mit dem/der dieses Inventar verknüpft ist: hier ist die Liste .

Die Kontext-ID filtert die Elemente und variiert von Spiel zu Spiel.

Eine andere Sache: Die zurückgegebenen Elemente werden durch das Paar classid-instanceid ( source ) eindeutig identifiziert. Wenn Sie sie also mit ihrer Beschreibung verknüpfen, sollten Sie beide berücksichtigen.

12
Jrs42