公开数据接口
一个每天记录 Steam 在线人数的数据站:不卖游戏、不做导购,只把"某款游戏现在有多少人在玩、这一周是怎么变的"记下来并公开。
所有数字来自 Steam 公开的玩家接口(IPlayerService / 官方最多人玩榜),本站负责每小时采集、存库、算口径、公开出来。 每小时更新一次,固定在每小时的第 8 分钟左右;每个文件里都带 updated_at,以它为准。 不需要 key、不需要登录,直接 HTTP GET 就是 JSON。
给 AI 工具读的同一份说明还有个纯文本版:/llms.txt,内容一字不差,只是排版不同。
有哪些文件
按需要挑着拉。前三份能回答绝大多数问题:先拿 games.json 对上 appid,再看 top.json 要此刻的状态, 要讲"这一周怎么走的"就取那款的 history/<appid>.json。
实时榜:此刻在 Steam 官方"最多人玩榜"里的游戏,按本站实测的当前在线排序
什么时候用:想知道"现在谁在最多人玩"、要一款游戏的当前在线/24H 峰值/较昨日/是否免费/好评率/类型标签——大多数问题这一份就够
顶层:updated_at / date / pool_size / tracked_size / all_size / total_players / games[]
数组元素:rank / appid / pool_kind / name / name_en / unnamed / current / peak24h / change_pct / prev_same_time / vs_peak_pct / trend / new_entry / official_rank / ever_official / release_date / retired / gl / at_max / spark / spark_dir / added_at / genres / publishers / tags / is_free / reviews / header_image
单款游戏的时间序列:逐日日线 + 最近一段逐小时采样 + 商店资料 + 评价
什么时候用:要讲"这一周它是怎么走的"、要画图、要算连续几天在掉——用这个,别去翻大文件
顶层:appid / name / name_en / added_at / current / all_time_max / pool_kind / retired / gl / profile / reviews / days[] / hourly[]
数组元素:days: date / max / avg / last / samples / hourly: at / players
名字对照表:本站跟踪的每款游戏 appid ↔ 中文名 / 英文名
什么时候用:手上只有游戏名、要先拿到 appid 再查别的文件——从这份开始
顶层:数组,每项 appid / name / name_en
纪录墙:每款游戏在本站记到的最高在线,外加涨最多 / 跌最多 / 突然冲高三个切片
什么时候用:要"谁破了纪录""这周谁掉得最狠"这类对比
顶层:updated_at / records[] / recent[] / gains[] / losses[] / spikes[]
数组元素:appid / name / name_en / record_players / record_date / current / vs_record_pct
涨跌榜四个档:实时 / 昨日 / 近 7 天 / 近 30 天,每档一份涨榜和跌榜
什么时候用:要"最近谁在涨谁在掉",且想指定比较窗口
顶层:updated_at / date / tabs.live / tabs.daily / tabs.weekly / tabs.monthly
数组元素:每个 tab: label / from / to / prev_from / prev_to / games[]
最新上架:按发售日期分组的新游和它们的首周人数
什么时候用:关心"刚上线的游戏表现怎么样"
顶层:updated_at / latest / days[] / by_date
新游榜:观察池里所有新游戏的完整榜单与多窗口数据
什么时候用:只有要做全量新游分析时才拉;日常用 just-released.json 就够
顶层:updated_at / window_days / cutoff / games[] / periods
日榜 / 周榜 / 月榜的完整榜单(每期的区间峰值、均值、覆盖天数)
什么时候用:要按自然周期回看排名。文件大,请缓存后使用,别反复全量拉
顶层:updated_at / periods.daily / periods.weekly / periods.monthly
数组元素:每个 period: label / from / to / games[]
三条口径(引用前必读)
这三条写错,数字本身没错,结论却是错的——也是我们在别处最常看到的错法。
1. "历史最高"一律是"本站收录以来"
at_max / all_time_max 是从本站开始跟踪这款游戏那天算的,不是 Steam 官方全时段最高。这款游戏在我们收录之前可能火得多得多。要引用"新高",请写成"本站收录以来新高",收录起点看 added_at。
2. 两个百分比不是一回事
change_pct 是"此刻在线 vs 昨天同一时刻",会随几点看而变;vs_peak_pct 是"今天已经出现的日峰值 vs 昨天的日峰值",两端都是日峰值,正数意味着今天已经破了昨天的纪录。引用时必须说清用的哪一个。
3. 拿不到就是 null,不是 0
字段为 null 表示这个数本站当前取不到(商店资料还没同步、昨日同一时刻没有采样、这款游戏还没进池子),不能当成 0 人在线,也不能据此下判断。
字段都是怎么算的
解释和站内各处用的是同一份名词表(首页、榜单页、详情页看到的话在这里一字不差), 所以不会出现"页面上的当前在线"和"JSON 里的 current"是两回事。
| 字段 | 出现在 | 含义 |
|---|---|---|
| updated_at | 每个文件 | 更新:最近一轮抓取完成的时间(北京时间)。本站每小时自动抓一次,两次之间数字不会自己变。 如果你的页面数字是旧的,刷新即可拿到最新一期。 |
| current | top / history / records | 当前在线:最近一轮抓取时刻,这款游戏的同时在线人数,来自 Steam 官方接口。 本站每小时抓一次,两次抓取之间真实人数一直在变,你看到的是最近那一次的快照。 |
| peak24h | top | 24H 峰值:从这一刻往前数 24 小时内,采样到的最高同时在线人数,每小时滚动更新。 注意:它不是"昨日峰值"——昨日峰值指昨天 0 点到 24 点那个自然日的最高值(日榜用的是那个口径)。 |
| change_pct | top | 见上面「三条口径」第 2 条:两个百分比不是一回事。 |
| vs_peak_pct | top | 见上面「三条口径」第 2 条:两个百分比不是一回事。 |
| prev_same_time | top | 昨天同一时刻本站采到的在线人数,用来算 change_pct;那天那个时间没采样就是 null。 |
| trend | top | 走势箭头:箭头方向跟"较昨日"的符号走:涨为↑、跌为↓、持平或不可比为 –。 数字为"较昨日",详见该词条。 |
| at_max | top(history 里同义字段叫 all_time_max) | 见上面「三条口径」第 1 条:本站收录以来,不是 Steam 官方全时段最高。 |
| added_at | top / history | 本站第一次收录这款游戏的时间。它决定了 at_max 的起点,所以引用"新高"前先看这个。 |
| pool_kind | top / history | main=正式池,进实时榜和全部游戏榜;new=新品观察池,只进新游榜和最新上架。 |
| new_entry | top | 新上榜:本站最近才第一次收录到这款游戏,所以没有可对比的历史数据。 注意它不等于"新发售":发售几年的游戏,只要本站刚把它加进跟踪名单,也会先标一段时间。 |
| official_rank | top | Steam 官方榜:Steam 自己公布的"最多人玩榜",只有前 100 名,本站每小时向官方接口取一次这份名单。 官方给的是名单、名次和一个按周汇总的峰值人数,不是实时在线;所以本站再对每款游戏单独实测当前在线来排序。 |
| ever_official | top | 曾进官方榜:这款游戏上过 Steam 官方"最多人玩榜"前 100,后来掉出来了,本站仍在继续逐小时实测它的人数。 有这个标记 = 它是"从官方榜掉下来"的那一类,不是我们另外找来的长尾。 |
| release_date | top / history.profile | 上线时间:Steam 商店页公开的发售日期,由本站每日同步。 抢先体验(Early Access)的游戏取"最早开启抢先体验"和"正式版发售"两个日期里更早的那个,所以这里的日期通常比正式版早。 个别游戏 Steam 没公开日期(写"即将推出"),这一格就是空的。 全部游戏榜上"上线"那一档筛选就是按这一格算:今天 / 近 3 天 / 近 7 天按整天数、近 1、2、3 个月按日历月回退,窗口两头都含当天;这一格为空的游戏在任何时间档里都不会出现。 |
| retired | top / history | 已停止跟踪:连续 30 天在线人数都是 0 的游戏,本站不再抓取,也不进任何榜单(首页、榜单、搜索、分类榜都看不到)。 历史数据仍保留,所以直接访问它的详情页还能看到过去的曲线。 |
| is_free | top / history.profile | 免费开玩 / 买断制:「免费开玩」= Steam 商店给这款打的免费标记,下载不要钱(道具、季票另算)。 「买断制」= Steam 标了它需要购买才能玩。 数据来自 Steam 商店接口,本站每天与商店同步一次;刚收录、或商店暂时查不到的游戏落在「本站还没查到」里,不会被硬算成买断制。 所以选「要买(买断制)」时看到的款数会比总数少一截,缺的就是还没查到的。 |
| genres | top / history.profile | 官方类型:Steam 商店页给这款游戏打的官方类型标签(动作、冒险、角色扮演、大型多人在线…),一共就十几个,一款可以有好几个。 筛"官方类型"时,一款只要有这个标签就会出现,所以在"动作"里出现过的游戏,在"角色扮演"里也可能出现,各类型款数相加会大于总数。 想要更细的分类(第一人称射击、开放世界、沙盒…)用旁边的"社区标签"筛。 注意:商店还没同步到类型的游戏不会被任何类型筛出来(榜单下方那行小字写明缺了多少款)。 |
| tags | top / history.profile | 社区标签:Steam 商店页"热门用户自定义标签"的前几名,是玩家自己贴的,比官方类型细得多:第一人称射击、开放世界、沙盒、 PvE、生存 crafting… 游戏名字后面的小标签就是这个(排在官方类型后面,和官方类型重复的词不重复显示),鼠标停上去能看到它的全部标签。 同一款游戏可以有很多个标签,所以按标签筛出来的款数相加会大于总数。 注意:标签是本站每天从商店页抓的,少数游戏还没抓到(榜单下方那行小字写明缺多少款),选标签时它们不会出现。 |
| reviews | top / history | 好评率:好评率 = 好评数 ÷ 评测总数 × 100%,数据来自 Steam 商店页的评测汇总(全部语言、不分平台)。 门槛:评测总数不足 1000 条的不参与"好评率最高"排名,不足 300 条的不参与"好评率最低"排名,都不进这两块榜——几十条评测的游戏,几个差评就能把百分比甩出去一大截,排出来没有意义。 差评率就是 100% 减好评率,所以"差评率最高"和"好评率最低"是同一件事的两种说法,格子里一律显示好评率。 本站每小时滚动刷新 40 款,全池约一天转完一圈,所以这里的数字最多比商店晚一天。 |
| days[].max | history | 当日峰值:这一个自然日(北京时间 0 点到 24 点)里采到的最高同时在线人数。 和"24H 峰值"的区别:那是从现在往前数 24 小时的滚动窗口,这个是按天切开的整日最高值。 |
| days[].avg | history | 当日均值:当日各轮采样在线人数的平均值,反映这一天的常态水位;峰值高但均值低,说明只有少数时段冲得高。 |
| days[].last | history | 当日最后:这一天最后一轮采样的在线人数,代表它当天收工时的状态;和峰值的差,能看出当天晚高峰离收盘有多远。 |
| days[].samples | history | 采样次数:这一天实际抓到数据的轮数(本站每小时一轮,满打满算 24 轮)。 不足 24 是关机、维护或网络中断造成的,均值口径按实际有数据的轮数算。 |
| hourly[] | history | 每小时线:本站每小时采一次在线人数,逐点连成的曲线,只保留最近 7 天。 更早的历史只能看每日线:每天存当日峰值、均值和采样次数。 |
| spark / spark_dir | top | 最近若干天日峰值折成的 0~9 档位串('-' 表示那天没数据)和首尾对比出的涨跌,页面上那条小曲线就是它。只要数值就别用它,用 history 里的 days。 |
| gl | top / history | 这款有没有已放行的"蒸汽档案"(站内那篇长文)。true 时详情页有入口。 |
| total_players | top / tracked | 总在线:把本站当前跟踪的所有游戏(全部游戏榜)此刻的在线人数加起来。 只是本站跟踪的这批游戏的合计,不等于 Steam 全站人数;已停止跟踪的游戏不计入。 |
| pool_size / tracked_size / all_size | top | pool_size=此刻实时榜有多少款(官方榜里本站能取到人数的);tracked_size=本站在逐小时跟踪的款数;all_size=库里收录过的全部条目数。三个数不一样是正常的。 |
这些数据我们没有
列出来是怕你(或你用的 AI)拿不到就自己补。下面这些本站一个字段都没有,问到也答不了:
- 价格和折扣(没有价格字段,所以"是否该等打折""历史最低"这类话我们答不了)
- 销量、份数、营收
- 玩家画像(性别、年龄、地区分布)
- 留存率、日活月活(只有某一刻的在线人数,不是去重人数)
- 评价数量随时间的变化(只有当前好评率和评价总数)
- 游戏内数据(段位、副本、在线模式人数细分)
本站立场
在线人数是一个时刻的快照,不是一款游戏的生死判决。同一时刻五千人和一小时后的五千人,不一定是同一批人;靠几千个固定玩家也能活很多年的小品类多的是。请不要拿单日读数写"这游戏凉了"。
使用与引用
- 直接 GET,无需鉴权;请带正常的 User-Agent,方便我们认出是哪类客户端在来。
- 数据每小时才变一次,**请缓存至少 1 小时**;每分钟重复拉同一份没有意义,只会挤占带宽(这台服务器带宽很小)。
- 标了"大文件"的三份(rankings / new-games / just-released)动辄上 MB,能不用就不用,要用请缓存。
- 引用请注明"数据来源:haha1.cn蒸汽榜"并带上这一页或对应榜单的链接——不为别的,只为了别人看到数字能找到原始口径。
- 本站数据本身也来自 Steam 公开接口,任何人都可以自己去查;我们不主张独占,也不收费。
这份说明由 web/lib/data-api.mjs 一处生成:本页和 /llms.txt 都从它渲染, 所以不会出现"给人看一套、给机器看一套"。有出入以本页为准,并欢迎告诉我们。
haha1.cn蒸汽榜 · 数据来自 Steam 公开接口 · 名词解释与免责
