原作者:海盗海官方
原出处:海盗海官网
原文链接:Steam数据科普
这里对steam道具的一些字段做一些简单的介绍,方便开发人员理解对应的业务
交易
steam的帐号之间可以通过他人的报价链接,与其他steam帐号进行交易,只要是自己steam帐号库存内运行交易的道具,都可以通过这种方式交易给别人,详细业务可以参见 官方说明
库存
玩家交易的道具都是在自己steam库存中的,只要玩家开放了其的库存隐私,其他人都可以查看玩家公开的库存信息,比如可以在 这里 看到我公开的库存
库存交易
官方并未开放正式的api接口用于道具交易,通常玩家只能在浏览器上,登录后,在自己的steam社区页面给别人报价,或者登录后,点击别人的报价链接来进行报价交易;
我们封装了一个steam机器人,模拟了官方在浏览器上通过报价链接报价进行交易的流程,实现了后台报价交易;
为了通过后台对玩家进行报价交易,有几个必要的参数信息:
报价链接
每个steam用户都可以在 //steamcommunity.com/id/me/tradeoffers/privacy#trade_offer_access_url这个地址查看自己的报价链接
玩家库存道具数据
如果玩家的steam库存是公开的,则可以通过http://steamcommunity.com/inventory/76561198042231205/730/2?l=schinese&count=5000 这样的地址获取到玩家的库存信息,其中url路径中的76561198042231205是对应玩家的steamid,730是游戏的appid(730对应CSGO),2是游戏库存的contextid,所以通过上面的链接就可以获取到玩家76561198042231205的CSGO库存信息
所以为了通过我们的机器人给玩家报价,需要玩家提供他自己的报价链接,并且公开他的库存,我们好读取玩家的库存信息
库存字段介绍
上面的玩家库存接口返回的json数据,格式大概是这样
{
"assets": [
{
"appid": 730,
"contextid": "2",
"assetid": "13680926359",
"classid": "310777518",
"instanceid": "302028390",
"amount": "1"
}
],
"descriptions": [
{
"appid": 730,
"classid": "310777518",
"instanceid": "302028390",
"currency": 0,
"background_color": "",
"icon_url": "-9a81dlWLwJ2UUGcVs_nsVtzdOEdtWwKGZZLQHTxDZ7I56KU0Zwwo4NUX4oFJZEHLbXH5ApeO4YmlhxYQknCRvCo04DEVlxkKgpos7asPwJf0v73ci9b_8i3mIyCjfLwDLndg25u5cB1g_zMu9qjjVDlrRBqamzzdYOXc1Q-NVHX_QDokOq6jcO5tZ7JzSEwsnFw4nzD30vgZ_ZT_P4",
"icon_url_large": "-9a81dlWLwJ2UUGcVs_nsVtzdOEdtWwKGZZLQHTxDZ7I56KU0Zwwo4NUX4oFJZEHLbXH5ApeO4YmlhxYQknCRvCo04DEVlxkKgpos7asPwJf0v73ci9b_8i3mIyCjfLwDLndg25u5cB1g_zMyoD0mlOx5UVqNj3yctWTewM-MF3S-wO-lefogsfq7ZmcwSdmsyMi4SyOl0TlhhtSLrs4dN-aNjc",
"descriptions": [
{
"type": "html",
"value": "外观: 久经沙场"
},
{
"type": "html",
"value": " "
},
{
"type": "html",
"value": "两把具有大弹匣的 Beretta 同时开火会降低精准度,并增加换弹时间。不过你得往好处想,这不,别人只有—把枪,而你可以同时用两把 Beretta 射个痛快。 这把武器以金属涂料进行了涂装,使用结晶外膜制作图案。\n\n<i>人人都想有所作为</i>"
},
{
"type": "html",
"value": " "
},
{
"type": "html",
"value": "湖畔激战收藏品",
"color": "9da1a9"
},
{
"type": "html",
"value": " "
},
{
"type": "html",
"value": " "
}
],
"tradable": 1,
"actions": [
{
"link": "steam://rungame/730/76561202255233023/+csgo_econ_action_preview%20S%owner_steamid%A%assetid%D343540768138723478",
"name": "在游戏中检视…"
}
],
"name": "双持贝瑞塔 | 钴蓝石英",
"name_color": "D2D2D2",
"type": "受限 手枪",
"market_name": "双持贝瑞塔 | 钴蓝石英 (久经沙场)",
"market_hash_name": "Dual Berettas | Cobalt Quartz (Field-Tested)",
"market_actions": [
{
"link": "steam://rungame/730/76561202255233023/+csgo_econ_action_preview%20M%listingid%A%assetid%D343540768138723478",
"name": "在游戏中检视…"
}
],
"commodity": 0,
"market_tradable_restriction": 7,
"marketable": 1,
"tags": [
{
"category": "Type",
"internal_name": "CSGO_Type_Pistol",
"localized_category_name": "类型",
"localized_tag_name": "手枪"
},
{
"category": "Weapon",
"internal_name": "weapon_elite",
"localized_category_name": "武器",
"localized_tag_name": "双持贝瑞塔"
},
{
"category": "ItemSet",
"internal_name": "set_lake",
"localized_category_name": "收藏品",
"localized_tag_name": "湖畔激战收藏品"
},
{
"category": "Quality",
"internal_name": "normal",
"localized_category_name": "类别",
"localized_tag_name": "普通"
},
{
"category": "Rarity",
"internal_name": "Rarity_Mythical_Weapon",
"localized_category_name": "品质",
"localized_tag_name": "受限",
"color": "8847ff"
},
{
"category": "Exterior",
"internal_name": "WearCategory2",
"localized_category_name": "外观",
"localized_tag_name": "久经沙场"
}
]
}
],
"total_inventory_count": 1,
"success": 1,
"rwgrsn": -2
}
其中的assets部分为道具的id标识数据,一个对象对应一个道具,每个道具的assetid是不同的
descriptions为一类道具通用数据,代表一类道具的公共属性,一个classid代表一类公共属性,所以根据上面的assets中道具的classid,可以在descriptions中找到这个道具的其他属性信息,如道具名称、图片、类型等等。
而对于交易机器人,必须知道要请求的玩家库存道具的appid、contextid、assetid 数据,才能通过玩家的报价链接对其报价,请求交易assetid对应道具。
字段说明
为了方便库存道具在网站显示、交易,以下为一些需要从玩家库存保存下来的信息
appid
道具的游戏id,常用的三个游戏id,730 代表CSGO,570代表Dota2,578080代表PUBG
contextid
道具的游戏库存id,对于CSGO,Dota2,PUBG,这个值都是2
classid
道具分类id,代表一类基础属性相同的道具
instanceid
道具实例id?,意义暂不明
assetid
道具唯一id,而且在道具交易之后会变化,比如在玩家A库存中一个道具assetid是13680926359,当玩家将其交易给B之后,这个道具assetid可能就变成了13680926360
name
道具名称,简称,比如 “双持贝瑞塔 | 钴蓝石英”
market_name
道具市场通称,一般会在简称基础上加上属性修饰词,比如 "双持贝瑞塔 | 钴蓝石英 (久经沙场)"
market_hash_name
道具的市场hash名称,steam官方也有一个交易市场,玩家可以将库存发布到官方市场上,而官方市场对道具进行分类的原则就是这个market_hash_name,所有market_hash_name一样的道具,在市场上都会被划分为同一类道具,按同等道具进行定价;这个的范围比classid的大,所以可能出现两个道具market_hash_name相同,但是他们的classid不同,原因可能有很多种,比如两个道具是不同的赛季限定出的,所以他们的classid就不一样了
icon_url
从steam库存接口获取到的道具的图片url都是cdn图片后缀地址,格式形如"-9a81dlWLwJ2UUGcVs_nsVtzdOEdtWwKGZZLQHTxDZ7I56KU0Zwwo4NUX4oFJZEHLbXH5ApeO4YmlhxYQknCRvCo04DEVlxkKgposem2LFZfwOP3ZTxS6eOlnI-Zg8j-JrXWmm5u5Mx2gv2Ppd7zjATirxFkNWD2JIGde1Q4MlyCrAe8x-u705a6uJ7Aynph6SUq4GGdwUKYnSlmwg”,加上cdn前缀地址和分辨率后缀(非必须)即可得到完整的图片地址: //steamcommunity-a.akamaihd.net/economy/image/ + icon_url + /70fx50f
icon_url_large
与icon_url同理,不过是大尺寸的图片,此属性有可能为空
descriptions
道具的描述信息,html格式文本
除了以上基础属性外,道具还有一个常用的tags属性,其中以数组的方式,列出了道具拥有的一些分类tag,其具体tag的含义可以直接参考对应tag的 localized_category_name、localized_tag_name,其对应的key和值分别为 category和internal_name;
为了方便将此tag在关系数据库中保存,我们将此tag进行了平面话,将其category定义为数据库字段,而其internal_name作为字段值,另外将其附带的color属性,我们扩展为xxx_color字段,如下
type | exterior | rarity | ratity_color | quality | quality_color | weapon | item_set
--- | --- | --- | --- | --- | --- | --- | --- | ---
CSGO_Type_Pistol | WearCategory2 | Rarity_Mythical_Weapon | 8847ff | normal | NULL | weapon_elite | set_lake
Dota2道具的其他tag类型,如 hero、slot,也是同理
CSGO tag分类
对于CSGO,以上tag部分,各tag可能的取值,及其含义可以参考 http://steamcommunity.com/market/appfilters/730?l=schinese 返回的数据
以上接口返回的数据格式大致如下:
{
"success": true,
"facets": {
"730_Exterior": {
"appid": 730,
"name": "Exterior",
"localized_name": "外观",
"tags": {
"WearCategory2": {
"localized_name": "久经沙场",
"matches": "1,970,860"
},
"WearCategory1": {
"localized_name": "略有磨损",
"matches": "622,471"
},
"WearCategory3": {
"localized_name": "破损不堪",
"matches": "289,635"
},
"WearCategory4": {
"localized_name": "战痕累累",
"matches": "274,712"
},
"WearCategory0": {
"localized_name": "崭新出厂",
"matches": "209,107"
},
"WearCategoryNA": {
"localized_name": "无涂装",
"matches": "198"
}
}
},
"730_ItemSet": {
"appid": 730,
"name": "ItemSet",
"localized_name": "收藏品",
"tags": {[
]}
}
}
}
对应上面的数据,在facets下的每个子对象,对应了一个道具的tag属性的取值范围及其含义;以CSGO的外观tag为例,在上面的json中,可以看到Exterior下的tags包含了6个子key,每个key与上面数据库中的exterior字段的值是对应的,而key下面的localized_name属性就代表了这个key代表的含义,即需要在页面前端显示的名称,其他tag属性rarity、quality、type、weapon等同理,只需要关注数据库定义了的tag字段即可,数据库中未定义的字段如:ProPlayer、SprayCapsule等不需要关注。
以上内容由海盗海科技提供,如需转载请联系我们。
网友评论