Steam 在线人数抓取逻辑优化:直接取官方公开榜单

一、改动背景

此前 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 官网保持同步。

留下你的留言

本站支持游客留言,登录后留言可显示你的账号信息。