一、改动背景
此前 Steam 在线数据模块采用「候选池 + 二次排序」的实现:先取榜单前 50 个候选,再逐个实时抓取在线人数后自行降序重排,最后截取前 25。这套逻辑存在两个问题:
- 请求开销大:候选池需要额外拉取大量不在最终清单内的游戏;
- 名次与官方不一致:自行重排后的名次与 Steam 官方公开榜单对不上,用户核对不便。
二、优化目标
简化抓取逻辑,直接采用 Steam 官方公开榜单:
- 直接取 Steam 公开接口返回的前 10、前 25 清单;
- 名次与 Steam 官方一致;
- 移除候选池与二次排序,减少请求量。
三、核心改动
3.1 移除候选池与二次排序
删除「取前 50 候选 → 逐个抓在线 → 降序重排」的流程,改为直接截取 Steam 官方榜单前 25。
3.2 直接取公开清单
直接调用 Steam 公开接口 GetMostPlayedGames,其返回的 rank 即为 Steam 官方名次,按名次升序取前 25,其中前 10 即为 Top 10 清单。
3.3 补全展示所需字段
官方榜单不返回游戏名称与实时在线数值,因此仍对入选的 25 个游戏补查名称(store appdetails,带缓存)与实时在线人数(GetNumberOfCurrentPlayers),用于前端展示「当前在线」列。
3.4 查询排序统一
对外 API 与前端页面的数据库查询统一按 Steam 官方名次(rank)升序。
四、效果验证
本次调整上线后,实测直接取 Steam 官方榜单前 25,当前 Top 10 为:
- Counter-Strike 2
- Dota 2
- PUBG: BATTLEGROUNDS
- Wallpaper Engine
- Apex Legends
- Palworld
- Marvel Rivals
- HELLDIVERS 2
- The Binding of Isaac: Rebirth
- Grand Theft Auto V Legacy
名次与 Steam 官方「最热门游戏」榜单完全一致。
五、对外接口影响
- 接口路径不变:GET /wp-json/ext/v1/steam/top
- 返回字段不变,games 数组按 Steam 官方名次(rank)升序;
- 实时在线字段 current_players 与峰值 peak_players 仍照常返回,供前端展示与参考。
六、小结
本次改动将抓取逻辑简化为「直接取 Steam 官方公开榜单」,名次与官方一致、请求更少,前 10、前 25 清单与 Steam 官网保持同步。