🚀 极速响应 | 🌊 SSE 流式传输 | 🎮 26+ 平台聚合 | ☁️ 边缘部署
🌐 预览地址: searchgal.top
| 电脑端 | 移动端 |
|---|---|
![]() |
![]() |
| 特性 | 说明 |
|---|---|
| ✅ 多端适配 | PC/移动端完美适配,PC端支持展示游戏封面、介绍、标签 |
| 💡 多源聚合 | 实时聚合 25+ Gal资源平台 + 1+ 补丁站 |
| 🏷️ 智能标注 | 自动标注:🟢免登录 / 🟡需魔法 / ⚪特殊条件 |
| ☁️ 边缘部署 | 支持 Cloudflare Workers / Vercel Edge 等平台 |
| 🌊 流式响应 | SSE 实时返回搜索结果,无需等待全部完成 |
📜 历史版本: Python 版本请查看
old分支 (已停止维护)
| 档位 | CPU | 内存 | 适用场景 |
|---|---|---|---|
| 最低 | 1 vCPU | 512MB–1GB | 低并发 |
| 推荐 | 2 vCPU | 1–2GB | 中小规模 |
| 高并发 | 4+ vCPU | 2–4GB | 高并发 |
pnpm install # 安装依赖
pnpm wrangler dev # 启动开发服务器| 变量 | 必需 | 说明 |
|---|---|---|
TOUCHGAL_API_TOKEN |
可选 | TouchGal 官方元数据 API token(tgal_live_...)。主站已整站开启 Cloudflare 质询,无法直接抓取,需在 developer.touchgal.com 申请、审核通过后创建 token。未配置时 TouchGal 平台会自动跳过(不报错),配置后即可恢复搜索。 |
CHARLOTTE_BASE_URL |
可选 | Charlotte 的 HTTPS 站点根地址,如 https://your-charlotte.example,不要填写 /api 路径。本地开发支持 http://localhost:3000。与 CHARLOTTE_API_KEY 同时配置后启用。 |
CHARLOTTE_API_KEY |
可选 | Charlotte 专用搜索密钥,值须与 Charlotte 服务端的 NUXT_SEARCHGAL_API_KEY 一致。仅供服务端使用,不要使用完整资源接口的私有密钥。缺少地址或密钥时自动跳过 Charlotte。 |
按部署平台设置:
# Cloudflare Workers:作为 secret 注入(本地开发放入 .dev.vars 文件,不要提交)
pnpm wrangler secret put TOUCHGAL_API_TOKEN
echo 'TOUCHGAL_API_TOKEN=tgal_live_xxx' >> .dev.vars
# Vercel:项目 Settings → Environment Variables,或
vercel env add TOUCHGAL_API_TOKEN
# Netlify:Site settings → Environment variables,或
netlify env:set TOUCHGAL_API_TOKEN tgal_live_xxx
# Docker / Podman Compose:通过容器环境变量传入(compose.yml 已透传)
TOUCHGAL_API_TOKEN=tgal_live_xxx podman-compose up -d先在 Charlotte 部署 GET /api/integration/search 接口,并配置独立的 NUXT_SEARCHGAL_API_KEY(至少 32 个 UTF-8 字节,推荐随机十六进制字符串)。SearchGal 的服务端配置如下:
CHARLOTTE_BASE_URL=https://your-charlotte.example
CHARLOTTE_API_KEY=与Charlotte专用搜索密钥相同的值- Cloudflare Workers:使用
pnpm wrangler secret put CHARLOTTE_BASE_URL和pnpm wrangler secret put CHARLOTTE_API_KEY设置;本地开发将两项写入未提交的.dev.vars。 - Vercel / Netlify:在项目的服务端环境变量设置中添加以上两项,再按平台流程重新部署。
- Docker / Podman Compose:在运行 Compose 的环境或未提交的
.env中设置两项;Compose 会传入容器,容器启动时生成 Wrangler 所需的.dev.vars。代码接入后需构建/使用包含本次变更的镜像,单独修改配置不会更新旧镜像。
每次搜索调用 /api/integration/search?q=关键词&limit=12,通过 X-API-Key 认证,不携带用户 Cookie。关键词 trim 后须为 1~100 个 Unicode 字符且不含空字符;不符合条件时跳过 Charlotte。结果只显示标题及 /games/{id} 详情页链接,标记为需登录(Login)。
R18 搜索摘要由 Charlotte 服务端的 NUXT_SEARCHGAL_INCLUDE_NSFW=true 启用,SearchGal 不发送覆盖该设置的参数;实际详情浏览和下载仍遵守 Charlotte 的登录与内容偏好规则。
接口应直接返回 JSON。若有 Cloudflare 人机质询,需为该 API 路径配置适合服务端调用的规则,并保留密钥验证与限流。SearchGal 不跟随接口重定向,请填写最终站点地址(包括正确的 www 子域名)。401、429、超时或格式错误会显示为 Charlotte 搜索源错误;429 不自动重试,也不会影响其他搜索源。
Charlotte 当前按专用密钥共享每分钟 120 次额度(命中缓存也计数),部署多个 SearchGal 实例时需要合并考虑调用量。SearchGal 沿用统一 15 秒请求超时,不额外缓存结果。
Charlotte 的 .env 应已配置可用的本地 PostgreSQL 数据库,数据库中需要至少一个有已审核、未删除、未标记失效资源的游戏。下面的固定密钥仅用于本机测试,不要用于线上。
终端一启动 Charlotte(目录按实际位置调整):
cd D:\MyProject\Charlotte
$env:NUXT_SEARCHGAL_API_KEY = "searchgal-local-test-key-2026-10-13"
$env:NUXT_SEARCHGAL_INCLUDE_NSFW = "true"
$env:NODE_APP_INSTANCE = "1" # 此测试进程不执行主实例定时任务
npm run dev -- --host 127.0.0.1 --port 3100在 SearchGal 根目录的 .dev.vars 中添加或更新以下两项,保留已有的其他配置:
CHARLOTTE_BASE_URL=http://127.0.0.1:3100
CHARLOTTE_API_KEY=searchgal-local-test-key-2026-10-13终端二启动 SearchGal:
cd D:\MyProject\SearchGal
pnpm dev --local --ip 127.0.0.1 --port 8787终端三执行检查;将游戏名替换为本地数据库中已知有资源的条目:
cd D:\MyProject\SearchGal
pnpm check:charlotte --keyword "命运石之门"检查脚本读取当前目录 .dev.vars,也支持环境变量(优先)。它会验证 Charlotte 直连有结果、响应字段和缓存头、缺少/错误密钥的 401、空关键词的 400,再请求 SearchGal /gal,确认 Charlotte 结果与直连一致、密钥未泄露且流正常结束。仅收到 HTTP 200 或空数组不会被判为全部通过。任一步失败退出码为 1;全部通过退出码为 0。其他外部搜索源错误单独提示。
SearchGal 使用其他端口时追加 --searchgal-url http://127.0.0.1:端口。修改 .dev.vars 后重启 SearchGal;修改 Charlotte 配置后重启 Charlotte。测试结束后在两个服务终端按 Ctrl+C。此流程验证本地 HTTP、真实数据库和 Worker 链路;生产 Redis、HTTPS、Cloudflare 规则仍需部署后验证。
podman-compose up -d| 方法 | 路径 | 说明 |
|---|---|---|
| POST | /gal |
搜索游戏资源 |
| POST | /patch |
搜索补丁资源 |
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
game |
string | ✅ | 搜索关键词 |
支持的 Content-Type:
multipart/form-data(推荐)application/x-www-form-urlencoded
# 搜索游戏资源
curl -X POST "https://your-api-domain.com/gal" \
-F "game=千恋万花"
# 搜索补丁资源
curl -X POST "https://your-api-domain.com/patch" \
-F "game=千恋万花"// 搜索游戏资源并处理 SSE 流式响应
async function searchGal(keyword) {
const formData = new FormData();
formData.append('game', keyword);
const response = await fetch('https://your-api-domain.com/gal', {
method: 'POST',
body: formData
});
const reader = response.body.getReader();
const decoder = new TextDecoder();
while (true) {
const { done, value } = await reader.read();
if (done) break;
const lines = decoder.decode(value).split('\n').filter(Boolean);
for (const line of lines) {
const data = JSON.parse(line);
if (data.total) {
console.log(`总共 ${data.total} 个搜索源`);
}
if (data.progress) {
console.log(`进度: ${data.progress.completed}/${data.progress.total}`);
}
if (data.result) {
console.log('搜索结果:', data.result);
}
if (data.done) {
console.log('搜索完成');
}
}
}
}
searchGal('千恋万花');{"total": 10} // 总搜索源数量
{"progress": {"completed": 1, "total": 10}} // 进度更新
{"progress": {"completed": 2, "total": 10}, "result": {"name": "xx资源站", "color": "lime", "tags": ["NoReq", "SuDrive"], "items": [{"name": "千恋万花", "url": "https://xx.com/game/12345"}]}} // 搜索结果
{"done": true} // 结束信号| 标签 | 含义 | 标签 | 含义 |
|---|---|---|---|
NoReq |
无门槛 | Login |
需登录 |
LoginPay |
需付费 | LoginRep |
需回复 |
SuDrive |
自建盘 | NoSplDrive |
不限速盘 |
SplDrive |
限速盘 | MixDrive |
混合盘 |
BTmag |
BT/磁力 | magic |
需魔法 |
| 步骤 | 技巧 |
|---|---|
| 🔍 精准搜索 | 使用中文关键词效果最佳,如 Senren*Banka → 千恋万花 → 千恋 |
| 🎯 结果筛选 | 优先选择 🟢绿色标签 (免登录),🟡金色需代理,⚪白色需对应条件 |
| ⬇️ 下载建议 | 推荐 IDM/FDM 加速,遇 Cloudflare 验证耐心等待 |
想要将您的站点接入聚合搜索?只需三步:
1. 创建适配器 - 在 src/platforms/gal/ 下创建 YourSite.ts
2. 实现接口
import type { Platform, PlatformSearchResult } from "../../types";
const YourSite: Platform = {
name: "站点名称",
color: "lime",
tags: ["NoReq"],
magic: false,
search: async (game) => {
// 实现搜索逻辑
return { count: 0, items: [] };
},
};
export default YourSite;3. 注册 & 提交
pnpm run generate # 自动注册
git push && PR # 提交贡献📢 广告白名单: 本站无广告,但收录的资源站建站不易,请加入广告白名单支持站长!
✉️ 写给站长: 本程序仅提供游戏发布页链接(非下载链接),不提供解压码。如不想被搜索,请过滤 UA 含 Searchgal 的请求。
🔐 安全声明: 本工具仅提供搜索聚合,不托管资源,请自行校验文件安全性。
SearchGal/
├── src/ # 核心源码
│ ├── index.ts # Cloudflare Workers 入口
│ ├── core.ts # 搜索引擎核心逻辑
│ ├── types.ts # TypeScript 类型定义
│ ├── platforms/ # 平台适配器目录
│ │ ├── gal/ # 游戏资源平台
│ │ └── patch/ # 补丁资源平台
│ └── utils/ # 工具函数
├── api/ # Vercel Edge Functions
├── netlify/ # Netlify Functions
├── scripts/ # 构建脚本
├── docs/ # 文档资源
├── wrangler.toml # Cloudflare Workers 配置
├── vercel.json # Vercel 部署配置
├── netlify.toml # Netlify 部署配置
├── compose.yml # Docker Compose 配置
└── Dockerfile # Docker 镜像构建文件
本工具旨在提供资源索引便利,请通过 Steam/DLSite 等正规渠道支持开发者!
欢迎各位 GalGame 爱好者优化本项目 ❤️
GNU AGPLv3 License © SearchGal

