Skip to content
This repository was archived by the owner on Apr 4, 2026. It is now read-only.

Commit 4e4da14

Browse files
committed
docs: 重构 README 并增加开发者指南
* 添加一键部署按钮、硬件配置参考及项目简介。 * 详细说明 SSE 流式响应格式及搜索结果标签含义。 * 新增面向开发者的平台接入指南及适配器实现模板。 * 完善本地开发、容器部署及自动生成索引的指令说明。 * 更新项目目录结构图,提升文档整体可读性与专业度。
1 parent 324fdb8 commit 4e4da14

1 file changed

Lines changed: 225 additions & 80 deletions

File tree

README.md

Lines changed: 225 additions & 80 deletions
Original file line numberDiff line numberDiff line change
@@ -1,121 +1,266 @@
1+
<div align="center">
2+
13
# Wrangler-API
24

3-
Cloudflare Workers 版 SearchGal 聚合搜索 API。
5+
[![Cloudflare Workers](https://img.shields.io/badge/Cloudflare-Workers-F38020?style=for-the-badge&logo=cloudflare&logoColor=white)](https://workers.cloudflare.com/)
6+
[![TypeScript](https://img.shields.io/badge/TypeScript-007ACC?style=for-the-badge&logo=typescript&logoColor=white)](https://www.typescriptlang.org/)
7+
[![License](https://img.shields.io/badge/License-MIT-green.svg?style=for-the-badge)](./LICENSE)
8+
9+
10+
**Cloudflare Workers 版 SearchGal 聚合搜索 API**
11+
12+
🚀 **极速响应** | 🌊 **SSE 流式传输** | 🎮 **多平台聚合**
13+
14+
[快速部署](#quick-start)[API 文档](#api-doc)[开发者接入指南](#dev-guide)
15+
16+
</div>
17+
18+
---
19+
20+
## 📖 简介
421

5-
提供 `/gal``/patch` 两个入口,接收游戏名并以 SSE 流式返回各平台搜索结果
22+
本项目是一个基于 Cloudflare Workers 的聚合搜索 API,专为 Galgame 资源搜索设计。它提供 `/gal``/patch` 两个主要入口,接收游戏名称后,通过 Server-Sent Events (SSE) 流式返回各大 Galgame 论坛和资源站的搜索结果
623

7-
## 准备
24+
<a id="quick-start"></a>
825

9-
- Node.js(Win 需要) 与 pnpm
10-
- Cloudflare 账号(发布时需要)
26+
## 🚀 快速部署
1127

12-
## 安装
28+
### ☁️ 一键云部署
1329

14-
### POSIX
30+
[![Deploy to Cloudflare Workers](https://img.shields.io/badge/Deploy%20to-Cloudflare%20Workers-F38020?style=for-the-badge&logo=cloudflare&logoColor=white)](https://deploy.workers.cloudflare.com/?url=https://github.com/Moe-Sakura/Wrangler-API)
31+
[![Deploy to Koyeb](https://img.shields.io/badge/Deploy%20to-Koyeb-121212?style=for-the-badge&logo=koyeb&logoColor=white)](https://app.koyeb.com/deploy?type=git&name=wrangler-api&repository=github.com/Moe-Sakura/Wrangler-API&branch=main&builder=dockerfile&ports=8787;http;/)
32+
[![Run on Google Cloud](https://img.shields.io/badge/Run%20on-Google%20Cloud-4285F4?style=for-the-badge&logo=google-cloud&logoColor=white)](https://deploy.cloud.run?git_repo=https://github.com/Moe-Sakura/Wrangler-API&revision=main)
1533

16-
```sh
17-
## 安装 pnpm
18-
curl -fsSL https://get.pnpm.io/install.sh | sh -
34+
### 🧭 服务器性能参考(硬件配置)
1935

20-
## 安装依赖
36+
> 以下为通用建议,适用于自建部署或容器化运行场景。此项目主要消耗在外部请求与解析,内存压力通常较低。
37+
38+
| 档位 | CPU | 内存 | 网络 | 适用场景 |
39+
| :--- | :--- | :--- | :--- | :--- |
40+
| 最低 | 1 vCPU | 512 MB–1 GB | 1-5 Mbps | 低并发 |
41+
| 推荐 | 2 vCPU | 1–2 GB | 5-20 Mbps | 中小规模并发 |
42+
| 高并发 | 4 vCPU+ | 2–4 GB | 20 Mbps+ | 高并发 |
43+
44+
---
45+
46+
### 环境准备
47+
48+
- **Node.js**: 推荐最新 LTS 版本 (Windows 用户必需)
49+
- **pnpm**: 包管理工具
50+
- **Cloudflare 账号**: 用于发布 (本地开发可选)
51+
52+
### 安装依赖
53+
54+
```bash
55+
# 安装 pnpm (如果未安装)
56+
npm install -g pnpm
57+
58+
# 安装项目依赖
2159
pnpm install
2260
```
2361

24-
## Podman Compose
25-
26-
### 构建
62+
### 本地开发
2763

28-
先构建镜像(只需要一次,或代码变动时重建)
64+
```bash
65+
# 启动本地开发服务器 (模拟 Cloudflare 环境)
66+
npx wrangler dev
2967

30-
```sh
31-
podman build -t cf-workers-dev .
68+
# 纯本地模式 (不连接 Cloudflare)
69+
npx wrangler dev --local
3270
```
3371

34-
### 常用命令
72+
### Docker / Podman 部署
3573

36-
```sh
37-
# 第一次启动(会自动构建镜像)
38-
podman-compose up -d
74+
如果您更喜欢使用容器化部署:
3975

40-
# 停止
41-
podman-compose down
76+
```bash
77+
# 启动服务
78+
podman-compose up -d
4279

4380
# 查看日志
4481
podman-compose logs -f
45-
46-
# 重启(代码改动后一般不需要重建,只需重启容器)
47-
podman-compose restart workers
4882
```
4983

50-
### Windows
84+
---
5185

52-
```sh
53-
## 安装 Node.js
54-
winget install -e --id OpenJS.NodeJS
86+
<a id="api-doc"></a>
5587

56-
## 安装 pnpm
57-
npx pnpm@latest-10 dlx @pnpm/exe@latest-10 setup
88+
## 📡 API 文档
5889

59-
## 安装依赖
60-
pnpm install
61-
```
90+
### 搜索接口
6291

63-
## 开发
92+
- **路径**: `POST /gal` (游戏) 或 `POST /patch` (补丁)
93+
- **Content-Type**: `multipart/form-data``application/json`
94+
- **参数**: `game` (string) - 搜索关键词
6495

65-
```sh
66-
# 纯本地(无 Cloudflare 登录)
67-
npx wrangler dev --local
96+
### 响应格式
6897

69-
# 实时连 Cloudflare
70-
npx wrangler dev
98+
响应采用 **Server-Sent Events (SSE)** 流式传输,每行是一个 JSON 对象。
99+
100+
**示例流:**
101+
102+
```json
103+
{"total": 10} // 1. 预计总搜索源数量
104+
{"progress": {"completed": 1, "total": 10}} // 2. 进度更新
105+
{"progress": {"completed": 2, "total": 10}, "result": { ... }} // 3. 搜索结果 (见下文)
106+
{"done": true} // 4. 结束信号
107+
```
108+
109+
**Result 对象结构:**
110+
111+
```json
112+
{
113+
"name": "某平台",
114+
"color": "lime",
115+
"tags": ["NoReq"],
116+
"items": [
117+
{
118+
"name": "游戏标题",
119+
"url": "https://example.com/detail/123"
120+
}
121+
]
122+
}
71123
```
72124

73-
## 运行
125+
### 🏷️ 标签说明 (Tags)
126+
127+
| 标签 | 含义 | 说明 |
128+
| :--- | :--- | :--- |
129+
| `NoReq` | **无门槛** | 无需登录、无需回复即可获取资源 |
130+
| `Login` | **需登录** | 需要注册并登录账号 |
131+
| `LoginPay` | **需付费** | 需要登录且消耗积分/货币 |
132+
| `LoginRep` | **需回复** | 需要登录并回复/评论 |
133+
| `Rep` | **需回复** | 需回复但无需登录 (较少见) |
134+
| `SuDrive` | **自建盘** | 站点自建网盘,速度通常较快 |
135+
| `NoSplDrive` | **不限速** | 使用 OneDrive, Mega, Google Drive 等不限速网盘 |
136+
| `SplDrive` | **限速盘** | 使用 百度网盘, 夸克, 天翼 等可能限速的网盘 |
137+
| `MixDrive` | **混合盘** | 包含多种网盘链接 |
138+
| `BTmag` | **BT/磁力** | 提供种子或磁力链接 |
139+
| `magic` | **魔法** | 站点可能被墙,需要代理访问 |
140+
141+
---
142+
143+
144+
<a id="dev-guide"></a>
145+
146+
## 🤝 面向 Galgame 网站开发者:如何接入
147+
148+
如果您是 Galgame 资源站的站长或开发者,欢迎将您的站点接入到本聚合搜索中。接入过程非常简单,只需三步。
149+
150+
### 1. 创建适配器文件
151+
152+
`src/platforms/gal/` 目录下创建一个新的 TypeScript 文件,例如 `MyGalSite.ts`
153+
154+
### 2. 实现 Platform 接口
155+
156+
复制以下模板代码,并根据您站点的搜索逻辑进行修改:
157+
158+
```typescript
159+
import { fetchClient } from "../../utils/httpClient";
160+
import type { Platform, PlatformSearchResult, SearchResultItem } from "../../types";
161+
162+
// 1. 定义站点配置
163+
const SITE_NAME = "我的Gal站";
164+
const API_URL = "https://api.mygalsite.com/search"; // 您的搜索接口或页面URL
165+
const DETAIL_BASE_URL = "https://mygalsite.com/game/";
166+
167+
// 2. 定义接口返回类型 (根据实际情况修改)
168+
interface MySiteResponse {
169+
code: number;
170+
data: {
171+
id: string;
172+
title: string;
173+
}[];
174+
}
175+
176+
// 3. 实现搜索函数
177+
async function searchMySite(game: string): Promise<PlatformSearchResult> {
178+
const result: PlatformSearchResult = { count: 0, items: [] };
179+
180+
try {
181+
// 构造请求
182+
const url = new URL(API_URL);
183+
url.searchParams.set("q", game); // 根据实际参数名修改
74184

75-
```sh
76-
npx wrangler dev --ip 0.0.0.0
185+
// 发起请求 (fetchClient 已封装 User-Agent 等通用头)
186+
const response = await fetchClient(url);
187+
188+
if (!response.ok) throw new Error(`HTTP ${response.status}`);
189+
190+
// 解析数据 (如果是 HTML 页面,可以使用正则表达式提取)
191+
const data = await response.json() as MySiteResponse;
192+
193+
// 转换为统一格式
194+
const items: SearchResultItem[] = data.data.map(item => ({
195+
name: item.title.trim(),
196+
url: `${DETAIL_BASE_URL}${item.id}`,
197+
}));
198+
199+
result.items = items;
200+
result.count = items.length;
201+
202+
} catch (error) {
203+
// 错误处理
204+
result.error = error instanceof Error ? error.message : "Unknown error";
205+
result.count = -1; // -1 表示搜索出错
206+
}
207+
208+
return result;
209+
}
210+
211+
// 4. 导出配置对象
212+
const MyGalSite: Platform = {
213+
name: SITE_NAME,
214+
color: "blue", // 也就是前端显示的颜色,支持 hex 或颜色名
215+
tags: ["NoReq", "SuDrive"], // 标签见上文说明
216+
magic: false, // 是否需要代理访问
217+
search: searchMySite,
218+
};
219+
220+
export default MyGalSite;
77221
```
78222

79-
## 发布
223+
### 3. 注册适配器
224+
225+
无需手动修改代码,只需运行以下命令即可自动注册所有适配器:
80226

81-
```sh
82-
npx wrangler login # 首次需要
83-
npx wrangler publish
227+
```bash
228+
npm run generate
229+
# 或者
230+
pnpm run generate
84231
```
85232

86-
## API 使用
233+
该脚本会自动扫描 `src/platforms/gal/` 目录下的文件并更新索引。
87234

88-
- 路径:`POST /gal``POST /patch`
89-
- Content-Type:`multipart/form-data`
90-
- 表单字段:`game` (string)
91-
- 响应:`text/event-stream`,每行是一条 JSON,示例:
235+
### 4. 提交 Pull Request
92236

93-
```json
94-
{"total":33}
95-
{"progress":{"completed":1,"total":33}}
96-
{"progress":{"completed":2,"total":33},"result":{"name":"某平台","color":"lime","tags":["NoReq"],"items":[{"name":"Title","url":"https://..."}]}}
97-
{"done":true}
237+
完成上述步骤后,请将您的更改提交到 GitHub:
238+
239+
1. Fork 本仓库
240+
2. 提交您的更改 (`git commit -m "feat: add MyGalSite adapter"`)
241+
3. 推送到您的 Fork (`git push origin main`)
242+
4. 在 GitHub 上发起 Pull Request
243+
244+
我们会尽快审核并合并您的代码,感谢您的贡献!🎉
245+
246+
---
247+
248+
## 📂 项目结构
249+
250+
```text
251+
src/
252+
├── index.ts # Worker 入口,路由定义
253+
├── core.ts # 核心逻辑:并行搜索与 SSE 组装
254+
├── types.ts # 类型定义
255+
├── utils/
256+
│ └── httpClient.ts # 统一 HTTP 请求封装
257+
└── platforms/
258+
├── gal/ # GAL 游戏平台适配器集合
259+
│ ├── index.ts # GAL 平台注册表
260+
│ └── ... # 各平台实现
261+
└── patch/ # 补丁平台适配器集合
98262
```
99263

100-
## 标签说明(tags)
101-
102-
- `NoReq`:无需登录/回复即可拿到下载信息
103-
- `Login`:需登录后访问
104-
- `LoginPay`:需登录且支付积分
105-
- `LoginRep`:需登录并回复/评论解锁
106-
- `Rep`:需回复/评论但无需登录
107-
- `SuDrive`:自建网盘盘源
108-
- `NoSplDrive`:不限速网盘盘源(如Onedrive/Mega等)
109-
- `SplDrive`:限速网盘盘源(如百度/夸克/天翼等)
110-
- `MixDrive`:不限速与限速网盘盘源混合,可能提供多种下载形式
111-
- `BTmag`:BT或磁力链接
112-
- `magic`:站点需要代理访问
113-
114-
## 目录速览
115-
116-
- `src/index.ts` Worker 入口,路由 `/gal``/patch`
117-
- `src/core.ts` 处理并行搜索与 SSE 组装
118-
- `src/platforms/gal` GAL 平台搜集器
119-
- `src/platforms/patch` 补丁平台搜集器
120-
- `src/utils/httpClient.ts` 统一请求封装
121-
- `scripts/generate-indices.js` 可选的索引生成脚本
264+
## 📜 许可证
265+
266+
[MIT](./LICENSE) © Wrangler-API

0 commit comments

Comments
 (0)