web-dev-qa-db-fra.com

Obtenir l'inventaire Steam de quelqu'un

Je crée un site Web qui doit accéder à l'inventaire Steam de l'utilisateur. J'ai trouvé une API pour obtenir l'inventaire Team Fortress 2, Dota 2, CS: S, CS: GO et Portal 2. Mais je n'ai trouvé aucune API pour obtenir l'inventaire Steam.

Est-il possible d'accéder à l'inventaire Steam d'un utilisateur?

39
Tiwenty

Nouveau point de terminaison

Il y a un nouveau point final pour récupérer les inventaires à partir de décembre 2016. L'ancien répertorié ci-dessous fonctionne toujours (pour l'instant). Les deux semblent être fortement limités en nombre.

Le nouveau chemin d'inventaire est:

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

Avec ce nouveau chemin, l est la langue dans laquelle vous souhaitez recevoir les données et count est le nombre d'éléments à recevoir à la fois. Le maximum est de 5000.

Vous pouvez également paginer avec ce nouveau point final:

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

Cela va tirer les 5000 prochains éléments commençant par assetid 468336866.

Le point final renvoie un grand objet json avec la structure suivante:

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

Je ne suis pas complètement sûr de ce que rwgran est à ce stade.

La touche assets renvoie des données qui ressemblent à ceci:

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

La touche descriptions contient des entrées comme celle-ci. Notez que cela contient beaucoup d'informations que l'ancien point final.

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

Comme avec l'ancienne méthode, les assets et descriptions sont liés via le classid dans les deux.


Ancien point de terminaison

Vous pouvez obtenir des informations limitées si la cible a ses autorisations de profil définies de manière appropriée.

Vous pouvez afficher les fichiers json résultants en utilisant l'un de ces deux liens pour les inventaires bêta (et cadeau, si les autorisations appropriées sont définies)

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

CUSTOMURL est le nom convivial que le joueur a choisi d'utiliser. Ceci est modifiable par le joueur à tout moment. Si vous écrivez une page Web, je suppose que vous savez comment obtenir cette information, n'est-ce pas? PROFILEID est l'identifiant 64Bit qu'un joueur donne à Steam lorsque vous créez le compte. Ce n'est pas modifiable et il est retourné par Steam lorsqu'ils se connectent en utilisant une implémentation OpenID.

Lorsque vous utilisez ces URL, il existe quelques réponses possibles. Le premier est si l'utilisateur a son profil défini sur privé.

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

Le second est une liste de "trucs" dans l'inventaire

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

Si l'URL est pour VOTRE ID et que vous êtes connecté à Steam, vous pouvez également voir les éléments répertoriés comme Gift. Sinon, ceux-ci sont masqués par défaut.

Comme il ne s'agit pas d'une API officielle, il n'y a pas beaucoup de documentation sur ce schéma particulier. Cependant, il semble que les éléments de rgInventory sont liés aux éléments de reDescriptions par classid. L'écriture de l'analyseur reste un exercice pour le lecteur.

Cela montre les accès bêta.

Si vous recherchez des informations sur une carte à échanger, modifiez le 1 dans les URL ci-dessus vers un 6

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

Les dispositions de schéma semblent être les mêmes pour ces derniers.

82
Andy

Pour préciser la réponse d'Andy, le schéma est le suivant:

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

L'ID d'application identifie le jeu/l'application auquel cet inventaire est lié: voici la liste .

L'ID de contexte filtre les éléments, il varie d'un jeu à l'autre.

Autre chose: les éléments retournés sont identifiés de manière unique par la paire classid-instanceid ( source ), donc lorsque vous les liez à leur description, vous devez prendre en compte les deux.

12
Jrs42