You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何获取Steam旧版本游戏的Manifest GID

如何获取Steam旧版本游戏的Manifest GID

我刚好对ValvePython库和Steam的API机制比较熟悉,来给你梳理几个可行的方案,解决你获取旧版本游戏Manifest GID的问题:

你的现有代码已经能拿到Steam当前公开版本和depot信息中主动标记的Build对应的GID,但这些都是当前活跃的Build记录,旧版本的Build信息并不会出现在这个列表里。要获取历史版本的GID,主要有两个方向:


1. 用ValvePython Steam库获取指定旧Build ID的GID

如果你已经知道目标旧版本的Build ID,可以直接通过Steam的底层接口获取对应的Manifest GID。下面是基于你现有代码扩展的实现:

方法1:通过get_depot_manifest直接查询

from steam.client import SteamClient 
from steam.guard import generate_twofactor_code_for_time
import base64, time

def get_manifest_gid_for_build(app_id, depot_id, target_build_id):
    try:
        client = SteamClient()
        client.login(
            username="your_username", 
            password="your_password",
            two_factor_code=generate_twofactor_code_for_time(
                base64.b64decode("your_shared_secret"),
                int(time.time())
            )
        )
        
        # 调用Steam的GetDepotManifest接口,指定目标Build ID
        manifest = client.get_depot_manifest(
            depot_id=depot_id,
            build_id=target_build_id,
            app_id=app_id
        )
        
        if manifest and hasattr(manifest, 'gid'):
            return manifest.gid
        return None
    except Exception as e:
        print(f"查询出错: {str(e)}")
        return None

# 示例:查询Counter-Strike 2(AppID 730)Depot 2347770的某个旧Build的GID
old_build_gid = get_manifest_gid_for_build(730, 2347770, "1234567") # 替换为实际旧Build ID
if old_build_gid:
    print(f"旧Build对应的GID: {old_build_gid}")

方法2:先获取历史Build ID列表

如果你不知道具体的旧Build ID,可以通过Steam Web API获取目标游戏的历史Build记录(需要你先在Steam开发者平台申请一个免费的Web API密钥):

from steam.webapi import WebAPI

def get_app_history_builds(app_id, api_key):
    try:
        api = WebAPI(api_key=api_key)
        # 获取最近50条历史Build记录,可调整count参数
        response = api.ISteamApps.GetAppBuilds(appid=app_id, count=50)
        return response['response']['builds']
    except Exception as e:
        print(f"获取Build列表出错: {str(e)}")
        return None

# 示例:获取Counter-Strike 2的历史Build列表
api_key = "your_steam_web_api_key"
history_builds = get_app_history_builds(730, api_key)
if history_builds:
    print("历史Build记录:")
    for build in history_builds:
        print(f"Build ID: {build['buildid']}, 更新时间: {build['timeupdated']}")

2. 模拟SteamDB的实现思路

SteamDB能展示大量旧manifest GID,核心是做了这几件事:

  • 持续调用Steam的ISteamApps.GetAppBuildsISteamApps.GetDepotBuilds API,抓取并缓存目标游戏的所有历史Build记录
  • 对每个历史Build ID,调用GetDepotManifest接口获取对应的Manifest GID
  • 同时监听Steam CDN节点的更新,缓存旧的manifest元数据,即使Steam官方接口不再返回该Build信息

如果你想自己实现类似逻辑,除了上面的API调用,还可以尝试:

  • 调用ISteamApps.GetDepotBuilds直接获取目标Depot的历史Build列表(部分公开游戏支持)
  • 从Steam内容服务器的目录接口中,查询目标Depot的可用Manifest元数据

注意事项

  • 不是所有旧Build的Manifest都能被获取,Steam会定期清理过旧的非热门游戏的Manifest数据
  • 部分API需要认证的Steam账号权限,比如你需要拥有目标游戏的访问权限
  • Web API密钥需要在Steam开发者平台申请,免费且流程简单

备注:内容来源于stack exchange,提问作者Endthal

火山引擎 最新活动