Steam API 文档

文档编号 05

05 - Steam Web API 使用笔记

基本信息


认证信息

常量名说明配置位置
STEAM_API_KEYSteam Web API Keyconfig.inc.php
STEAM_ID用户 64位 SteamIDconfig.inc.php

用户信息相关接口全览

接口分类

接口归属说明
GetPlayerSummariesISteamUser玩家基本资料、头像、在线状态
GetFriendListISteamUser好友列表(需对方公开)
GetPlayerBansISteamUserVAC 封禁记录
GetUserGroupListISteamUser用户加入的 Steam 群组
ResolveVanityURLISteamUser自定义 URL → SteamID 转换
GetRecentlyPlayedGamesIPlayerService近 2 周游戏记录
GetOwnedGamesIPlayerService完整游戏库 + 累计时长
GetSteamLevelIPlayerServiceSteam 等级
GetBadgesIPlayerService持有的徽章列表及等级
GetCommunityBadgeProgressIPlayerService指定徽章的任务完成进度
GetPlayerAchievementsISteamUserStats某游戏的成就解锁情况(需 appid)
GetUserStatsForGameISteamUserStats某游戏的统计数据(需 appid)

各接口详情

ISteamUser 接口

1. GetPlayerSummaries(玩家基本资料)

GET https://api.steampowered.com/ISteamUser/GetPlayerSummaries/v2/
参数: key, steamids(逗号分隔,最多100个)

响应字段说明:

字段类型说明
steamidstring64位 SteamID
personanamestringSteam 昵称
realnamestring真实姓名(用户填写)
profileurlstringSteam 主页 URL
avatarstring小头像 URL(32×32)
avatarmediumstring中头像 URL(64×64)
avatarfullstring大头像 URL(184×184)
personastateint在线状态(见下表)
lastlogoffint上次下线时间(Unix 时间戳,离线时才返回)
timecreatedint账号创建时间(Unix 时间戳)
communityvisibilitystateint隐私状态:1=私密, 3=公开
loccountrycodestring所在国家代码(如 US、CN)

personastate 枚举:

含义
0离线
1在线
2忙碌
3离开
4打盹
5想交易
6想游戏

示例 curl:

curl "https://api.steampowered.com/ISteamUser/GetPlayerSummaries/v2/?key=YOUR_KEY&steamids=76561198141733567"

2. GetFriendList(好友列表)

GET https://api.steampowered.com/ISteamUser/GetFriendList/v1/
参数: key, steamid, relationship(可选,填 "friend" 只返回好友)

注意:若用户将好友列表设为私密,返回 HTTP 401(不是空列表)。

响应字段:

字段说明
friends[].steamid好友 SteamID
friends[].relationship关系类型(friend)
friends[].friend_since成为好友的 Unix 时间戳

3. GetPlayerBans(封禁记录)

GET https://api.steampowered.com/ISteamUser/GetPlayerBans/v1/
参数: key, steamids(逗号分隔)

响应字段:

字段说明
VACBannedbool,是否有 VAC 封禁
NumberOfVACBansVAC 封禁次数
DaysSinceLastBan距最近一次封禁的天数
NumberOfGameBans游戏封禁次数
CommunityBannedbool,是否被社区封禁
EconomyBan经济封禁状态(none / probation / banned)

4. GetUserGroupList(加入的群组)

GET https://api.steampowered.com/ISteamUser/GetUserGroupList/v1/
参数: key, steamid

返回用户加入的所有 Steam 群组 GID 列表,需配合群组接口进一步查询名称。


5. ResolveVanityURL(自定义 URL → SteamID)

GET https://api.steampowered.com/ISteamUser/ResolveVanityURL/v1/
参数: key, vanityurl(如 "KevinXue"),url_type(1=个人, 2=群组)

返回 { "response": { "steamid": "76561198141733567", "success": 1 } },用于将个性化主页地址转换为 64 位 SteamID。


IPlayerService 接口

6. GetRecentlyPlayedGames(近期游戏)

GET https://api.steampowered.com/IPlayerService/GetRecentlyPlayedGames/v1/
参数: key, steamid, count(返回数量,0=全部)

响应字段说明:

字段类型说明
total_countint近2周游戏总数
games[].appidint游戏 AppID
games[].namestring游戏名称
games[].playtime_2weeksint近2周游戏时长(分钟)
games[].playtime_foreverint累计游戏时长(分钟)
games[].img_icon_urlstring图标哈希值

游戏图片 URL 拼装:

⚠️ 重要:Steam CDN 新旧格式并存

老游戏使用无 hash 的旧格式;2024 年后上架的新游戏改用带 hash 的新格式,旧格式对新游戏返回 404。
推荐统一通过 IStoreBrowseService/GetItems 获取真实 URL(见下文)。

// 旧格式(老游戏有效,新游戏 404)
https://steamcdn-a.akamaihd.net/steam/apps/{appid}/header.jpg

// 新格式(含 hash,需通过 API 获取,不可自行构造)
https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/{appid}/{hash}/header.jpg?t={timestamp}

// 小图标(32×32)
https://media.steampowered.com/steamcommunity/public/images/apps/{appid}/{img_icon_url}.jpg

示例 curl:

curl "https://api.steampowered.com/IPlayerService/GetRecentlyPlayedGames/v1/?key=YOUR_KEY&steamid=76561198141733567&count=5"

实测返回示例(2025-04):

{
  "response": {
    "total_count": 2,
    "games": [
      {
        "appid": 435150,
        "name": "Divinity: Original Sin 2",
        "playtime_2weeks": 518,
        "playtime_forever": 2541,
        "img_icon_url": "519a99caef7c5e2b4625c8c2fa0620fb66a752f3"
      },
      {
        "appid": 4126220,
        "name": "Crusaders Quest : Hero Town",
        "playtime_2weeks": 168,
        "playtime_forever": 168,
        "img_icon_url": "cea5c54b60cb10fadf8cad9130ba1c2227e9aa5e"
      }
    ]
  }
}

7. GetOwnedGames(完整游戏库)

GET https://api.steampowered.com/IPlayerService/GetOwnedGames/v1/
参数: key, steamid, include_appinfo=true(含游戏名称和图标)

返回用户完整游戏库 + 各游戏累计时长,数据量较大,按需使用。


8. GetSteamLevel(Steam 等级)

GET https://api.steampowered.com/IPlayerService/GetSteamLevel/v1/
参数: key, steamid

返回 { "response": { "player_level": 42 } }


9. GetBadges(徽章列表)

GET https://api.steampowered.com/IPlayerService/GetBadges/v1/
参数: key, steamid

响应字段:

字段说明
badges[].badgeid徽章 ID
badges[].level徽章等级
badges[].completion_time获得时间(Unix 时间戳)
badges[].xp该徽章提供的 XP
badges[].scarcity全球拥有该徽章的玩家数(越小越稀有)
player_xp玩家总 XP
player_level玩家当前等级
player_xp_needed_to_level_up升级所需剩余 XP
player_xp_needed_current_level当前等级所需总 XP
注:同时返回 player_level,可代替 GetSteamLevel 一次性获取。

10. GetCommunityBadgeProgress(徽章任务进度)

GET https://api.steampowered.com/IPlayerService/GetCommunityBadgeProgress/v1/
参数: key, steamid, badgeid

返回指定徽章所有子任务(quest)的完成状态,适合展示"集换式卡牌"徽章进度等。


ISteamUserStats 接口

11. GetPlayerAchievements(游戏成就)

GET https://api.steampowered.com/ISteamUserStats/GetPlayerAchievements/v1/
参数: key, steamid, appid, l(语言,如 "schinese")

响应字段:

字段说明
achievements[].apiname成就内部名称
achievements[].achieved0/1,是否已解锁
achievements[].unlocktime解锁时间(Unix 时间戳,未解锁为 0)
achievements[].name成就展示名(需加 l 参数)
achievements[].description成就描述
gameName游戏名称
限制:需指定 appid,适合为特定游戏展示成就墙。

12. GetUserStatsForGame(游戏统计数据)

GET https://api.steampowered.com/ISteamUserStats/GetUserStatsForGame/v2/
参数: key, steamid, appid

返回游戏内各类数值型统计(击杀数、通关次数等),字段因游戏而异,适合深度展示某款游戏数据。


IStoreBrowseService 接口

13. GetItems(批量获取商店信息,含封面 URL)⭐

GET https://api.steampowered.com/IStoreBrowseService/GetItems/v1/
参数: key, input_json(JSON 字符串,含 ids / context / data_request)

用途:批量获取游戏商店页面资产,包括真实封面 URL(支持新旧格式)。
关键优势:在 api.steampowered.com 上(不是 store.steampowered.com),服务器可达。

请求示例:

INPUT='{"ids":[{"appid":730},{"appid":4126220}],"context":{"language":"english","country_code":"US","steam_realm":1},"data_request":{"include_basic_info":true,"include_assets":true}}'
curl "https://api.steampowered.com/IStoreBrowseService/GetItems/v1/?key=YOUR_KEY&input_json=$(python3 -c "import urllib.parse,sys; print(urllib.parse.quote(sys.stdin.read().strip()))" <<< "$INPUT")"

注意include_basic_info: true 是必须的,单独 include_assets: true 会返回空。

响应字段(assets 部分):

字段说明
assets.asset_url_formatURL 模板,如 steam/apps/{appid}/${FILENAME}?t=xxx
assets.headerheader 图的 hash/filename,如 {hash}/header.jpg
assets.main_capsule主胶囊图 hash
assets.small_capsule小胶囊图 hash
assets.hero_capsule英雄胶囊图 hash
assets.library_capsule库页面胶囊图 hash

封面 URL 构造方式:

CDN = "https://shared.akamai.steamstatic.com/store_item_assets/"
URL = CDN + asset_url_format.replace("${FILENAME}", header)

PHP 实现(activity-functions.php 中的 fetchSteamGameCovers):

$cdn = 'https://shared.akamai.steamstatic.com/store_item_assets/';
$url = $cdn . str_replace('${FILENAME}', $assets['header'], $assets['asset_url_format']);

实测(2026-04-29):

appid游戏HTTP 状态
730Counter-Strike 2200 ✅
435150Divinity: Original Sin 2200 ✅
4126220Crusaders Quest: Hero Town(新游戏)200 ✅

项目说明
速率限制无官方明确限制,建议缓存 5 分钟
隐私前提用户的 Steam 个人资料和游戏详情必须设为公开,否则 GetRecentlyPlayedGames 返回空
验证方式communityvisibilitystate: 3 代表公开

隐私设置路径:Steam → 个人资料 → 编辑个人资料 → 隐私设置 → 游戏详情设为"公开"


在 my-activity.php 中的使用

相关缓存文件:{TYPECHO_ROOT}/usr/cache/steam_activity.json(TTL 6小时)

Steam 模块相关 PHP 常量(定义在 config.inc.php):

define('STEAM_API_KEY', 'YOUR_STEAM_API_KEY');
define('STEAM_ID', 'YOUR_STEAM_64BIT_ID');

相关文件

  • 模板文件:usr/themes/classic-22/my-activity.php
  • 配置文件:config.inc.php(含 API Key,已加入 .gitignore)
  • 缓存目录:usr/cache/(已加入 .gitignore)
  • 活动页文档:.maintenance/06-activity-page-notes.md