如何通过 Steam API 判断游戏是否有 AI 内容披露?
结论
不能仅凭 appdetails 的返回数据判断游戏是否有 AI Generated Content Disclosure。示例 AppID 1808500 的接口响应没有提供对应的披露字段,但商店页面展示了该披露区块。接口响应、游戏商店页面
目前尚无法从 Steamworks 公开文档确认是否有专用 API 可以直接查询这项披露。需要自动检查时,可以读取公开商店页面并识别披露区块。不过,页面解析依赖页面结构,不能视为稳定的 API 契约。
为什么接口没有返回披露信息?
商店页面展示的信息与 appdetails 返回的字段并不完全相同。示例响应中的 content_descriptors 为:
{
"ids": [],
"notes": null
}
该游戏的商店页面仍然包含 AI Generated Content Disclosure。至少在这个示例中,不能根据 content_descriptors.ids 是否为空,或 content_descriptors.notes 是否为 null,判断 AI 内容披露是否存在。接口响应、游戏商店页面
也不要把自行假设的 ai_generated_content 等字段当成既有接口规范。
如何通过商店页面检查?
可以请求英文商店页面,检查是否存在标题为 AI Generated Content Disclosure 的 h2 元素。示例页面目前使用这一标题。游戏商店页面
下面的 Python 示例需要安装 requests 和 beautifulsoup4:
pip install requests beautifulsoup4
import requests
from bs4 import BeautifulSoup
def check_ai_disclosure(appid: int) -> dict:
response = requests.get(
f"https://store.steampowered.com/app/{appid}/",
params={"l": "english"},
timeout=20,
)
response.raise_for_status()
soup = BeautifulSoup(response.text, "html.parser")
heading = next(
(
node
for node in soup.find_all("h2")
if node.get_text(" ", strip=True)
== "AI Generated Content Disclosure"
),
None,
)
return {
"appid": appid,
"status": "found" if heading is not None else "not_confirmed",
"source_url": response.url,
}
print(check_ai_disclosure(1808500))
示例将未匹配的结果记为 not_confirmed,表示本次页面响应中没有找到目标标题,并不代表已经确认游戏没有披露。HTTP 请求失败会抛出异常,调用方应将其记录为查询失败,不能转换为“没有披露”。
使用时需要注意什么?
- 固定请求语言,避免因标题本地化而匹配失败。
- 年龄验证、登录提示、地区限制或页面结构变化都可能影响检查结果。出现未确认结果时,应检查实际响应页面。
- 批量查询时,缓存结果并控制请求频率,同时保留查询时间和来源地址,方便复查。
- 如果业务要求使用有明确文档保证的 API,应向 Steamworks 支持确认可用接口。页面解析只能作为当前的替代方案。
还要区分“页面存在披露”和“游戏实际使用了哪些 AI 技术”。Steamworks 的 Content Survey 要求开发者说明相关生成式 AI 内容,但页面检查只能识别公开披露,无法独立核实游戏的全部开发过程。没有找到披露,也不能据此断言游戏没有使用 AI。Steamworks Content Survey
备注:内容仅供参考。
