如何通过Steam API从CS2物品检视链接获取classId以提取float值与paint seed
解决CS2 Steam市场物品classId获取及float/seed提取问题
一、从两种检视链接提取classId
Steam的CS2物品检视链接分两种格式(M开头对应市场物品,S开头对应玩家库存物品),classId的提取位置不同,以下是具体方法:
1. M开头的市场检视链接
格式示例(URL编码后):steam://rungame/730/76561202255233023/+csgo_econ_action_preview%20M%7C%7C<classid>%7C%7C<instanceid>%7C%7C<market_hash_name>
提取步骤:
- 先解码URL编码字符(
%20替换为空格,%7C替换为|) - 用
||分割解码后的字符串,第二个元素就是classId
Python代码实现:
import urllib.parse # 示例市场检视链接 market_inspect_link = "steam://rungame/730/76561202255233023/+csgo_econ_action_preview%20M%7C%7C12345%7C%7C67890%7C%7CAK-47%20%7C%20Redline" decoded_link = urllib.parse.unquote(market_inspect_link) parts = decoded_link.split("||") class_id = parts[1] print(f"Market ClassID: {class_id}") # 输出: 12345
2. S开头的玩家库存检视链接
格式示例(URL编码后):steam://rungame/730/76561202255233023/+csgo_econ_action_preview%20S%7C%7C<steamid>%7C%7C<classid>%7C%7C<instanceid>%7C%7C<assetid>
提取步骤:
- 同样先解码URL编码字符
- 用
||分割后,第三个元素就是classId
Python代码实现:
import urllib.parse # 示例玩家库存检视链接 inventory_inspect_link = "steam://rungame/730/76561202255233023/+csgo_econ_action_preview%20S%7C%7C765611980XXXXXXX%7C%7C12345%7C%7C67890%7C%7C98765" decoded_link = urllib.parse.unquote(inventory_inspect_link) parts = decoded_link.split("||") class_id = parts[2] print(f"Inventory ClassID: {class_id}") # 输出: 12345
二、通过classId获取float值与Paint Seed
拿到classId后,有两种可靠方式获取目标属性:
方法1:调用Steam官方API(需API Key)
- 先在Steam开发者平台申请API Key(免费,需绑定Steam账号)
- 从检视链接中同时提取
instanceid(M链接的第三个元素,S链接的第四个元素) - 若为市场物品,需先获取
assetid(通过登录后的Steam会话访问市场页面解析),再调用IEconItems_730/GetAssetInfo接口获取详细属性
Python代码示例:
import requests import urllib.parse import re API_KEY = "你的Steam API Key" APP_ID = 730 market_hash_name = "AK-47 | Redline" class_id = "12345" instance_id = "67890" # 1. 登录Steam会话(需替换为自己的登录Cookie) session = requests.Session() session.cookies.set("steamLoginSecure", "你的Steam登录Cookie值") # 2. 访问市场物品页面提取assetid market_url = f"https://steamcommunity.com/market/listings/{APP_ID}/{urllib.parse.quote(market_hash_name)}" response = session.get(market_url) asset_match = re.search(r'var g_rgAssets = ({.*?});', response.text) if not asset_match: print("无法提取assetid,请检查登录状态或链接有效性") exit() asset_data = eval(asset_match.group(1)) asset_id = asset_data[str(APP_ID)][str(instance_id)][0]['id'] # 3. 调用API获取float和paint seed asset_info_url = f"https://api.steampowered.com/IEconItems_730/GetAssetInfo/v1/?key={API_KEY}&appid={APP_ID}&assetid={asset_id}" info_response = requests.get(asset_info_url) info_data = info_response.json() if info_data.get("success"): float_value = info_data['result']['assets'][0]['float_value'] paint_seed = info_data['result']['assets'][0]['paint_seed'] print(f"Float值: {float_value:.6f}") print(f"Paint Seed: {paint_seed}") else: print("API请求失败,请检查API Key或assetid")
方法2:通过Steam物品解析接口(无需API Key)
直接向Steam的物品解析接口发送请求,传入检视链接即可获取属性,需携带登录Cookie:
Python代码示例:
import requests inspect_link = "steam://rungame/730/76561202255233023/+csgo_econ_action_preview%20M%7C%7C12345%7C%7C67890%7C%7CAK-47%20%7C%20Redline" # 初始化登录会话(替换为自己的Steam Cookie) session = requests.Session() session.cookies.set("steamLoginSecure", "你的Steam登录Cookie值") # 发送解析请求 parse_url = "https://steamcommunity.com/economy/parseitem/" payload = { "appid": 730, "itemurl": inspect_link } response = session.post(parse_url, data=payload) item_data = response.json() if item_data.get("success"): float_value = item_data['iteminfo']['floatvalue'] paint_seed = item_data['iteminfo']['paintseed'] print(f"Float值: {float_value:.6f}") print(f"Paint Seed: {paint_seed}") else: print(f"解析失败: {item_data.get('error', '未知错误')}")
三、注意事项
- 若链接解码后分割出错,检查是否存在未正确解码的特殊字符(可手动替换
%7C为|) - 市场物品的assetid提取需登录Steam,否则无法获取私有资产信息
- S链接的classId位置为分割后的第三个元素,M链接为第二个,不要混淆
内容的提问来源于stack exchange,提问作者Gaël Kcoh
相关产品推荐
相关产品推荐

