# haha1.cn蒸汽榜 > 一个每天记录 Steam 在线人数的数据站:不卖游戏、不做导购,只把"某款游戏现在有多少人在玩、这一周是怎么变的"记下来并公开。 所有数字来自 Steam 公开的玩家接口(IPlayerService / 官方最多人玩榜),本站负责每小时采集、存库、算口径、公开出来。每小时更新一次,固定在每小时的第 8 分钟左右;每个文件里都带 updated_at,以它为准。不需要 key、不需要登录,直接 HTTP GET 就是 JSON。 ## 数据文件(全部是静态 JSON,直接 GET) - [/data/top.json](https://haha1.cn/data/top.json):实时榜:此刻在 Steam 官方"最多人玩榜"里的游戏,按本站实测的当前在线排序(约 90 KB) 什么时候用:想知道"现在谁在最多人玩"、要一款游戏的当前在线/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 - [/data/history/.json](https://haha1.cn/data/history/730.json):单款游戏的时间序列:逐日日线 + 最近一段逐小时采样 + 商店资料 + 评价(每款约 20~80 KB) 什么时候用:要讲"这一周它是怎么走的"、要画图、要算连续几天在掉——用这个,别去翻大文件 顶层字段: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 - [/data/games.json](https://haha1.cn/data/games.json):名字对照表:本站跟踪的每款游戏 appid ↔ 中文名 / 英文名(约 110 KB) 什么时候用:手上只有游戏名、要先拿到 appid 再查别的文件——从这份开始 顶层字段:数组,每项 appid / name / name_en - [/data/records.json](https://haha1.cn/data/records.json):纪录墙:每款游戏在本站记到的最高在线,外加涨最多 / 跌最多 / 突然冲高三个切片(约 45 KB) 什么时候用:要"谁破了纪录""这周谁掉得最狠"这类对比 顶层字段:updated_at / records[] / recent[] / gains[] / losses[] / spikes[] 数组元素:appid / name / name_en / record_players / record_date / current / vs_record_pct - [/data/movers.json](https://haha1.cn/data/movers.json):涨跌榜四个档:实时 / 昨日 / 近 7 天 / 近 30 天,每档一份涨榜和跌榜(约 130 KB) 什么时候用:要"最近谁在涨谁在掉",且想指定比较窗口 顶层字段:updated_at / date / tabs.live / tabs.daily / tabs.weekly / tabs.monthly 数组元素:每个 tab: label / from / to / prev_from / prev_to / games[] - [/data/just-released.json](https://haha1.cn/data/just-released.json):最新上架:按发售日期分组的新游和它们的首周人数(约 210 KB,大文件,请缓存后再用) 什么时候用:关心"刚上线的游戏表现怎么样" 顶层字段:updated_at / latest / days[] / by_date - [/data/new-games.json](https://haha1.cn/data/new-games.json):新游榜:观察池里所有新游戏的完整榜单与多窗口数据(约 1.3 MB,大文件,请缓存后再用) 什么时候用:只有要做全量新游分析时才拉;日常用 just-released.json 就够 顶层字段:updated_at / window_days / cutoff / games[] / periods - [/data/rankings.json](https://haha1.cn/data/rankings.json):日榜 / 周榜 / 月榜的完整榜单(每期的区间峰值、均值、覆盖天数)(约 2 MB,大文件,请缓存后再用) 什么时候用:要按自然周期回看排名。文件大,请缓存后使用,别反复全量拉 顶层字段: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 人在线,也不能据此下判断。 ## 字段含义 - `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=库里收录过的全部条目数。三个数不一样是正常的。 ## 我们**没有**这些数据(拿不到就请别推断) - 价格和折扣(没有价格字段,所以"是否该等打折""历史最低"这类话我们答不了) - 销量、份数、营收 - 玩家画像(性别、年龄、地区分布) - 留存率、日活月活(只有某一刻的在线人数,不是去重人数) - 评价数量随时间的变化(只有当前好评率和评价总数) - 游戏内数据(段位、副本、在线模式人数细分) ## 本站立场 在线人数是一个时刻的快照,不是一款游戏的生死判决。同一时刻五千人和一小时后的五千人,不一定是同一批人;靠几千个固定玩家也能活很多年的小品类多的是。请不要拿单日读数写"这游戏凉了"。 ## 使用与引用 - 直接 GET,无需鉴权;请带正常的 User-Agent,方便我们认出是哪类客户端在来。 - 数据每小时才变一次,**请缓存至少 1 小时**;每分钟重复拉同一份没有意义,只会挤占带宽(这台服务器带宽很小)。 - 标了"大文件"的三份(rankings / new-games / just-released)动辄上 MB,能不用就不用,要用请缓存。 - 引用请注明"数据来源:haha1.cn蒸汽榜"并带上这一页或对应榜单的链接——不为别的,只为了别人看到数字能找到原始口径。 - 本站数据本身也来自 Steam 公开接口,任何人都可以自己去查;我们不主张独占,也不收费。 人看的同一份说明:https://haha1.cn/api