mirror of
https://github.com/fish2018/pansou.git
synced 2025-11-25 03:14:59 +08:00
304 lines
6.3 KiB
Markdown
304 lines
6.3 KiB
Markdown
# Gying 搜索插件
|
||
|
||
## 📖 简介
|
||
|
||
Gying是PanSou的搜索插件,用于从 www.gying.net 网站搜索影视资源。支持多用户登录并配置账户,在搜索时自动聚合所有用户的搜索结果。
|
||
|
||
## ✨ 核心特性
|
||
|
||
- ✅ **多用户支持** - 每个用户独立配置,互不干扰
|
||
- ✅ **用户名密码登录** - 支持使用用户名和密码登录
|
||
- ✅ **智能去重** - 多用户搜索时自动去重
|
||
- ✅ **负载均衡** - 任务均匀分配,避免单用户限流
|
||
- ✅ **内存缓存** - 用户数据缓存到内存,搜索性能极高
|
||
- ✅ **持久化存储** - Cookie和用户配置自动保存,重启不丢失
|
||
- ✅ **Web管理界面** - 一站式配置,简单易用
|
||
- ✅ **RESTful API** - 支持程序化调用
|
||
- ✅ **默认账户自动登录** - 插件启动时自动使用默认账户登录
|
||
|
||
## 🚀 快速开始
|
||
|
||
### 步骤1: 启动服务
|
||
|
||
```bash
|
||
cd /Users/macbookpro/Desktop/fish2018/pansou
|
||
go run main.go
|
||
|
||
# 或者编译后运行
|
||
go build -o pansou main.go
|
||
./pansou
|
||
```
|
||
|
||
### 步骤2: 访问管理页面
|
||
|
||
如果需要添加更多账户或管理现有账户,可以访问管理页面:
|
||
|
||
```
|
||
http://localhost:8888/gying/你的用户名
|
||
```
|
||
|
||
**示例**:
|
||
```
|
||
http://localhost:8888/gying/myusername
|
||
```
|
||
|
||
系统会自动:
|
||
1. 根据用户名生成专属64位hash(不可逆)
|
||
2. 重定向到专属管理页面:`http://localhost:8888/gying/{hash}`
|
||
3. 显示登录表单供手动登录
|
||
|
||
**📌 提示**:请收藏hash后的URL(包含你的专属hash),方便下次访问。
|
||
|
||
### 步骤3: 手动登录
|
||
|
||
在"登录状态"区域输入:
|
||
- 用户名
|
||
- 密码
|
||
|
||
点击"**登录**"按钮。
|
||
|
||
### 步骤4: 开始搜索
|
||
|
||
在PanSou主页搜索框输入关键词,系统会**自动聚合所有用户**的Gying搜索结果!
|
||
|
||
```bash
|
||
# 通过API搜索
|
||
curl "http://localhost:8888/api/search?kw=遮天"
|
||
|
||
# 只搜索插件(包括gying)
|
||
curl "http://localhost:8888/api/search?kw=遮天&src=plugin"
|
||
```
|
||
|
||
## 📡 API文档
|
||
|
||
### 统一接口
|
||
|
||
所有操作通过统一的POST接口:
|
||
|
||
```
|
||
POST /gying/{hash}
|
||
Content-Type: application/json
|
||
|
||
{
|
||
"action": "操作类型",
|
||
...其他参数
|
||
}
|
||
```
|
||
|
||
### API列表
|
||
|
||
| Action | 说明 | 需要登录 |
|
||
|--------|------|---------|
|
||
| `get_status` | 获取状态 | ❌ |
|
||
| `login` | 登录 | ❌ |
|
||
| `logout` | 退出登录 | ✅ |
|
||
| `test_search` | 测试搜索 | ✅ |
|
||
|
||
---
|
||
|
||
### 1️⃣ get_status - 获取用户状态
|
||
|
||
**请求**:
|
||
```bash
|
||
curl -X POST "http://localhost:8888/gying/{hash}" \
|
||
-H "Content-Type: application/json" \
|
||
-d '{"action": "get_status"}'
|
||
```
|
||
|
||
**成功响应(已登录)**:
|
||
```json
|
||
{
|
||
"success": true,
|
||
"message": "获取成功",
|
||
"data": {
|
||
"hash": "abc123...",
|
||
"logged_in": true,
|
||
"status": "active",
|
||
"username_masked": "pa****ou",
|
||
"login_time": "2025-10-28 12:00:00",
|
||
"expire_time": "2026-02-26 12:00:00",
|
||
"expires_in_days": 121
|
||
}
|
||
}
|
||
```
|
||
|
||
**成功响应(未登录)**:
|
||
```json
|
||
{
|
||
"success": true,
|
||
"message": "获取成功",
|
||
"data": {
|
||
"hash": "abc123...",
|
||
"logged_in": false,
|
||
"status": "pending"
|
||
}
|
||
}
|
||
```
|
||
|
||
---
|
||
|
||
### 2️⃣ login - 登录
|
||
|
||
**请求**:
|
||
```bash
|
||
curl -X POST "http://localhost:8888/gying/{hash}" \
|
||
-H "Content-Type: application/json" \
|
||
-d '{"action": "login", "username": "xxx", "password": "xxx"}'
|
||
```
|
||
|
||
**成功响应**:
|
||
```json
|
||
{
|
||
"success": true,
|
||
"message": "登录成功",
|
||
"data": {
|
||
"status": "active",
|
||
"username_masked": "pa****ou"
|
||
}
|
||
}
|
||
```
|
||
|
||
**失败响应**:
|
||
```json
|
||
{
|
||
"success": false,
|
||
"message": "登录失败: 用户名或密码错误"
|
||
}
|
||
```
|
||
|
||
---
|
||
|
||
### 3️⃣ logout - 退出登录
|
||
|
||
**请求**:
|
||
```bash
|
||
curl -X POST "http://localhost:8888/gying/{hash}" \
|
||
-H "Content-Type: application/json" \
|
||
-d '{"action": "logout"}'
|
||
```
|
||
|
||
**成功响应**:
|
||
```json
|
||
{
|
||
"success": true,
|
||
"message": "已退出登录",
|
||
"data": {
|
||
"status": "pending"
|
||
}
|
||
}
|
||
```
|
||
|
||
---
|
||
|
||
### 4️⃣ test_search - 测试搜索
|
||
|
||
**请求**:
|
||
```bash
|
||
curl -X POST "http://localhost:8888/gying/{hash}" \
|
||
-H "Content-Type: application/json" \
|
||
-d '{"action": "test_search", "keyword": "遮天"}'
|
||
```
|
||
|
||
**成功响应**:
|
||
```json
|
||
{
|
||
"success": true,
|
||
"message": "找到 5 条结果",
|
||
"data": {
|
||
"keyword": "遮天",
|
||
"total_results": 5,
|
||
"results": [
|
||
{
|
||
"title": "遮天:禁区",
|
||
"links": [
|
||
{
|
||
"type": "quark",
|
||
"url": "https://pan.quark.cn/s/89f7aeef9681",
|
||
"password": ""
|
||
}
|
||
]
|
||
}
|
||
]
|
||
}
|
||
}
|
||
```
|
||
|
||
---
|
||
|
||
## 🔧 配置说明
|
||
|
||
### 环境变量(可选)
|
||
|
||
```bash
|
||
# Hash Salt(推荐自定义,增强安全性)
|
||
export GYING_HASH_SALT="your-custom-salt-here"
|
||
|
||
# Cookie加密密钥(32字节,推荐自定义)
|
||
export GYING_ENCRYPTION_KEY="your-32-byte-key-here!!!!!!!!!!"
|
||
```
|
||
|
||
### 代码内配置
|
||
|
||
在 `gying.go` 第20-24行修改:
|
||
|
||
```go
|
||
const (
|
||
MaxConcurrentUsers = 10 // 最多使用的用户数(搜索时)
|
||
MaxConcurrentDetails = 50 // 最大并发详情请求数
|
||
DebugLog = false // 调试日志开关
|
||
)
|
||
```
|
||
|
||
### 默认账户配置
|
||
|
||
在 `gying.go` 第27-32行修改默认账户:
|
||
|
||
```go
|
||
var DefaultAccounts = []struct {
|
||
Username string
|
||
Password string
|
||
}{
|
||
// 可以添加更多默认账户
|
||
// {"user2", "password2"},
|
||
}
|
||
```
|
||
|
||
**参数说明**:
|
||
|
||
| 参数 | 默认值 | 说明 | 建议 |
|
||
|------|--------|------|------|
|
||
| `MaxConcurrentUsers` | 10 | 单次搜索最多使用的用户数 | 10-20足够 |
|
||
| `MaxConcurrentDetails` | 50 | 最大并发详情请求数 | 50-100 |
|
||
| `DebugLog` | false | 是否开启调试日志 | 生产环境false |
|
||
|
||
## 📂 数据存储
|
||
|
||
### 存储位置
|
||
|
||
```
|
||
cache/gying_users/{hash}.json
|
||
```
|
||
|
||
### 数据结构
|
||
|
||
```json
|
||
{
|
||
"hash": "abc123...",
|
||
"username": "pansou",
|
||
"username_masked": "pa****ou",
|
||
"cookie": "BT_auth=xxx; BT_cookietime=xxx",
|
||
"status": "active",
|
||
"created_at": "2025-10-28T12:00:00+08:00",
|
||
"login_at": "2025-10-28T12:00:00+08:00",
|
||
"expire_at": "2026-02-26T12:00:00+08:00",
|
||
"last_access_at": "2025-10-28T13:00:00+08:00"
|
||
}
|
||
```
|
||
|
||
**字段说明**:
|
||
- `hash`: 用户唯一标识(SHA256,不可逆推用户名)
|
||
- `username`: 原始用户名(存储)
|
||
- `username_masked`: 脱敏用户名(如`pa****ou`)
|
||
- `cookie`: 登录Cookie(明文存储,建议配置加密)
|
||
- `status`: 用户状态(`pending`/`active`/`expired`)
|
||
- `expire_at`: Cookie过期时间(121天) |