Подтвердить что ты не робот

Как добраться

Я создаю веб-сайт, которому необходимо получить доступ к инвентаризации Steam для пользователя. Я нашел API, чтобы получить инвентарь Team Fortress 2, Dota 2, CS: S, CS: GO и Portal 2. Но я не нашел API для получения инвентаря Steam.

Можно ли получить доступ к ресурсу Steam Steam?

4b9b3361

Ответ 1

Новая конечная точка

Существует новая конечная точка для сбора запасов по состоянию на декабрь 2016 года. Старая, перечисленная ниже, все еще работает (пока). Оба, похоже, очень сильно связаны друг с другом.

Новый путь инвентаря:

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

Это вытащит следующие 5000 предметов, начиная с ресурса 468336866.

Конечная точка возвращает большой 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'},
      ...
]

Как и в случае старого метода, assets и descriptions связаны между собой с помощью classid.


Старая конечная точка

Вы можете получить ограниченную информацию, если у целевого объекта установлены соответствующие разрешения профиля.

Вы можете просмотреть полученные файлы json, используя одну из этих двух ссылок для бета-версии (и подарок, если установлены соответствующие разрешения) инвентаризации

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

CUSTOMURL - это имя пользователя, которое игрок выбрал для использования. Это может быть изменено игроком в любое время. Если вы пишете веб-страницу, я предполагаю, что вы знаете, как получить эту информацию, правильно? PROFILEID - это идентификатор 64Bit, который игрок дает Steam при создании учетной записи. Это не изменчиво и возвращается Steam при входе в систему с использованием реализации OpenID.

При использовании этих URL-адресов существует несколько возможных ответов. Во-первых, если пользователь установил свой профиль в приватный.

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

Если URL-адрес для ВАШЕ ID и вы вошли в Steam, вы также можете увидеть элементы, которые перечислены как Gift. В противном случае они по умолчанию скрыты.

Поскольку это не официальный API, документации по этой конкретной схеме мало. Однако, похоже, что элементы в rgInventory связаны с элементами в reDescriptions на classid. Написание анализатора остается в качестве упражнения для читателя.

Здесь показаны бета-обращения.

Если вы ищете информацию о торговой карте, измените 1 в приведенных выше URL на 6

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

Схемы схемы выглядят одинаково для них.

Ответ 2

Как раз для точного ответа Энди, схема такова:

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

Идентификатор приложения идентифицирует игру/приложение, к которым относится этот ресурс: здесь список.

Идентификатор контекста фильтрует элементы, он варьируется от игры к игре.

Другое: возвращенные элементы однозначно идентифицируются парой classid-instanceid (source), поэтому, когда вы связываете их с их описанием, вы должны взять их в счет.