Obtener el inventario de Steam de alguien

Estoy creando un sitio web que necesita acceder al inventario de Steam del usuario. Encontré una API para obtener el inventario de Team Fortress 2, Dota 2, CS: S, CS: GO y Portal 2. Pero no encontré ninguna API para obtener el inventario de Steam.

¿Es posible acceder al inventario de Steam de un usuario?

Nuevo punto final

Hay un nuevo punto final para buscar inventarios a partir de diciembre de 2016. El antiguo que se muestra a continuación todavía funciona (por ahora). Ambos parecen estar altamente criticados.

La nueva ruta de inventario es:

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

Con esta nueva ruta, l es el idioma en el que desea recibir los datos y el count es la cantidad de elementos que se recibirán a la vez. El máximo es 5000.

También puedes paginar con este nuevo punto final:

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

Esto extraerá los próximos 5000 elementos comenzando con assetid 468336866 .

El punto final devuelve un objeto json grande con la siguiente estructura:

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

No estoy completamente seguro de qué es el rwgran en este punto.

La clave de assets , devuelve datos que se ven así:

 [{'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 clave de descriptions contiene entradas como esta. Tenga en cuenta que esto contiene mucha información que el antiguo punto 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'}, ... ] 

Al igual que con el método anterior, los assets y las descriptions están vinculados a través del classid en ambos.


Viejo punto final

Puede obtener cierta información limitada si el objective tiene los permisos de perfil establecidos de manera adecuada.

Puede ver los archivos json resultantes utilizando cualquiera de estos dos enlaces para inventarios beta (y obsequios, si se establecen permisos apropiados)

http://steamcommunity.com/id//inventory/json/753/1 http://steamcommunity.com/profiles//inventory/json/753/1

CUSTOMURL es el nombre fácil de usar que el jugador ha seleccionado para usar. Esto es modificable por el jugador en cualquier momento. Si está escribiendo una página web, supongo que sabe cómo obtener esta información, ¿correcto? PROFILEID es la identificación de 64 bits que Steam le da a un jugador cuando creas la cuenta. Esto no es modificable y Steam lo devuelve cuando inician sesión con una implementación de OpenID.

Al usar esas URL, hay algunas respuestas posibles. El primero es si el usuario tiene su perfil establecido en privado.

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

El segundo es un listado de “cosas” en el inventario

 { "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 la URL es para SU ID y ha iniciado sesión en Steam, también puede ver los artículos que figuran como Gift . De lo contrario, están ocultos por defecto.

Como esta no es una API oficial, no hay mucha documentación sobre este esquema en particular. Sin embargo, parece que los elementos en rgInventory están vinculados a elementos en las reDescriptions por classid . Escribir el analizador se deja como un ejercicio para el lector.

Esto muestra los accesos beta.

Si está buscando información sobre tarjetas comerciales, cambie el 1 en las URL anteriores a un 6

http://steamcommunity.com/id//inventory/json/753/6 http://steamcommunity.com/profiles//inventory/json/753/6

Los diseños de esquema parecen ser los mismos para estos.

Para precisar la respuesta de Andy, el esquema es:

 http://steamcommunity.com/profiles//inventory/json// 

La ID de la aplicación identifica el juego / aplicación con el que está relacionado este inventario: esta es la lista .

Context ID filtra los elementos, varía de un juego a otro.

Otra cosa: los elementos devueltos están identificados de forma exclusiva por el par classid-instanceid ( fuente ), por lo que cuando los vincules con su descripción, debes tener en cuenta ambos.