如何获取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.GetAppBuilds和ISteamApps.GetDepotBuildsAPI,抓取并缓存目标游戏的所有历史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




