获取某人的Steam库存

时间:2013-06-30 17:41:02

标签: api inventory steam

我正在建立一个需要访问用户的Steam库存的网站。我找到了一个API来获取Team Fortress 2库存,Dota 2,CS:S,CS:GO和Portal 2.但是我没有找到任何用于获取Steam库存的API。

是否可以访问用户的Steam广告资源?

2 个答案:

答案 0 :(得分:82)

新端点

截至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相关联。


旧端点

如果目标的个人资料权限设置正确,您可以获得一些有限的信息。

您可以使用这两个链接中的任意一个来查看生成的json文件(如果设置了适当的权限,则为礼物)

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

CUSTOMURL是玩家选择使用的用户友好名称。任何时候玩家都可以改变这一点。如果您正在编写网页,我假设您知道如何获取此信息,对吗? PROFILEID是您在创建帐户时由Steam提供的64位ID。这是不可更改的,当他们使用OpenID实现登录时由Steam返回。

使用这些网址时,有一些可能的回复。第一种是用户将其个人资料设置为私人。

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

第二个是清单中的“东西”列表

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

如果网址是您的ID,并且您已登录Steam,则还可以看到列为Gift的项目。否则,默认情况下会隐藏它们。

由于这不是官方API,因此没有太多关于此特定架构的文档。但是,似乎rgInventory中的项目与reDescriptionsclassid的项目相关联。编写解析器留给读者练习。

这些显示了beta访问。

如果您要查找交易卡信息,请将上述网址中的1更改为6

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

这些架构布局似乎相同。

答案 1 :(得分:12)

为了得到Andy的精确答案,架构是:

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

应用ID标识此广告资源与之相关的游戏/应用:here's the list

上下文ID过滤项目,因游戏而异。

另一件事:返回的项目由classid-instanceid对(source)唯一标识,因此当您将它们与其描述相关联时,您应该同时考虑这两项。