Zibll 子比主题 Steam 游戏库插件-zibll综合交流社区-zibll子比主题-zibll子比社区

Zibll 子比主题 Steam 游戏库插件

Zibll 子比主题 Steam 游戏库插件,拉取 Steam 个人游戏清单,展示游戏卡片、总游玩时长、游戏统计数据。

下载地址

https://pan.quark.cn/s/f16bea22c643

Worker 代码

/**
 * Steam API 反向代理 — Cloudflare Worker 自建模板
 *
 * 路由:
 *   /ISteamUser/...、/IPlayerService/...   → api.steampowered.com(Web API)
 *   /store/api/appdetails?...              → store.steampowered.com(游戏简体中文名)
 *
 * 部署步骤:
 *   1. Cloudflare Dashboard → Workers 和 Pages → 创建 Worker(名称随意)
 *   2. 将本文件全部代码粘贴进编辑器并部署,得到地址 https://xxx.xxx.workers.dev
 *   3.(推荐)Worker → 设置 → 变量和机密 → 添加「文本」变量:
 *        变量名 SECRET,值为一串随机字符(如 openssl rand -hex 16 生成)
 *      也可以直接写在下方 SECRET 常量里,二选一
 *   4. 插件后台「Steam游戏库 → 接口配置」:
 *        API 反代地址   填 https://xxx.xxx.workers.dev
 *        Worker 鉴权密钥 填与 SECRET 相同的值
 *
 * 说明:Workers 免费版每天 10 万次请求。本插件在 WordPress 侧已做本地缓存,
 *       玩家资料 4 个接口 + 商店中文名补全,个人博客流量绰绰有余。
 *      商店 appdetails 已在 CF 边缘缓存 1 小时,重复请求不回源。
 */

//鉴权密钥:为空则不校验(不推荐公开使用);环境变量 SECRET 优先
const SECRET = '';
const AUTH_HEADER = 'x-steam-proxy-auth';

const API_ORIGIN = 'https://api.steampowered.com';
const STORE_ORIGIN = 'https://store.steampowered.com';
const STORE_PREFIX = '/store/';

export default {
  async fetch(request, env) {
    const url = new URL(request.url);

    const jsonError = (status, msg) =>
      new Response(JSON.stringify({ error: msg }), {
        status,
        headers: { 'content-type': 'application/json; charset=utf-8' },
      });

    //只开放 Steam 用到的 GET/HEAD,收窄滥用面
    if (request.method !== 'GET' && request.method !== 'HEAD') {
      return jsonError(405, 'method not allowed');
    }

    const secret = (env && env.SECRET) || SECRET;
    if (secret && request.headers.get(AUTH_HEADER) !== secret) {
      return jsonError(403, 'forbidden');
    }

    //带 /store/ 前缀的转发商店接口,其余原样转发 Web API
    const isStore = url.pathname.startsWith(STORE_PREFIX);
    const target = isStore
      ? STORE_ORIGIN + url.pathname.slice(STORE_PREFIX.length - 1) + url.search
      : API_ORIGIN + url.pathname + url.search;

    const init = {
      method: request.method,
      headers: {
        'user-agent': request.headers.get('user-agent') || 'zibll-steam-proxy/1.0',
        'accept-language': 'zh-CN,zh;q=0.9',
      },
    };
    if (isStore) {
      init.cf = { cacheTtl: 3600, cacheEverything: true };
    }

    let upstream;
    try {
      upstream = await fetch(target, init);
    } catch (e) {
      return jsonError(502, 'upstream error');
    }

    const resp = new Response(upstream.body, upstream);
    if (!resp.headers.get('content-type')) {
      resp.headers.set('content-type', 'application/json; charset=utf-8');
    }
    return resp;
  },
};

 

预览图

20261005032545972-image

20261005032604389-image

20261005032714178-image

20261005035611629-image20261005033347170-image

功能特性

用户中心绑定管理

  • 「Steam 游戏库」独立 Tab + 用户中心侧栏「我的服务」快捷入口
  • 绑定 / 解绑 17 位 Steam64 ID,保存时做格式校验,留空即解绑
  • 一键开关「主页公开展示」,不公开时仅自己可见
  • 按 appid 隐藏指定游戏,隐藏后不出现在主页任何位置
  • 显示当前绑定状态:Steam 头像、昵称、等级、游戏数、数据更新时间
  • 支持手动「重新同步」,立即绕过缓存拉取最新数据

用户主页展示

  • 玩家资料卡:头像、昵称(链接到 Steam 个人页)、等级 LVL、徽章数与经验、最近两周总时长
  • 游戏封面网格:Steam 官方头图 CDN 懒加载,主源失败自动切换备用源
  • 时长统计与进度条:每款游戏展示总时长 / 两周时长,进度条按库内最大时长归一化(两周进度条可后台关闭)
  • 「查看全部」模态框:游戏多时分批浏览,数量上限可配,模态框内可实时切换排序(两周时长 / 总时长 / 最近游玩 / 名称)
  • 隐私与容错:Steam 库为私密时给出友好提示(本人可见引导链接去调整隐私设置);同步异常仅本人可见,方便排查
  • 移动端自动减少首屏展示数量,保持加载轻快

两种展示位置

  • 独立卡片:显示在文章、收藏等 Tab 区块上方
  • Tab 整合:作为「Steam 游戏库」Tab 与文章、收藏并列;Tab 的显隐(PC 端 / 移动端)与排序直接接入 主题设置 → 用户主页 → 栏目配置,与原生栏目一样可拖动排序

站长模式

数据来源二选一:用户绑定模式(各用户绑定各自的 SteamID)或站长模式(后台固定一个 SteamID,展示在指定用户的主页),站长模式下自动隐藏用户绑定入口。

安装

  1. 启用 zibll 子比主题后,将本目录放入 wp-content/plugins/ 并在后台启用
  2. 进入「设置 → Steam游戏库」填写 Steam Web API Key(https://steamcommunity.com/dev/apikey 免费申请)
  3. 用户在「用户中心 → Steam 游戏库」绑定自己的 SteamID;服务器无法直连 Steam 时可填写 API 反代地址

自建 Cloudflare Worker 反代

服务器在国内无法直连 Steam 时,用 Worker/steam-proxy.js 模板自建反代,同时代理 Web API 与商店中文名接口:

  1. Cloudflare Dashboard → Workers 和 Pages → 创建 Worker,粘贴 worker/steam-proxy.js 全部代码并部署
  2. Worker → 设置 → 变量和机密 → 添加文本变量 SECRET,值为一串随机字符
  3. 插件后台「API 反代地址」填 https://xxx.xxx.workers.dev,「Worker 鉴权密钥」填同样的 SECRET

Worker 按 /store/ 前缀区分上游(其余转发 api.steampowered.com),只放行 GET/HEAD,商店 appdetails 在边缘缓存 1 小时;鉴权头 x-steam-proxy-auth 不匹配时返回 403,防止被他人盗用。

请登录后发表评论

    没有回复内容