Files
SomeACG-RANDOMPIC/README.md

176 lines
4.4 KiB
Markdown
Raw Normal View History

# SomeACG 随机图片服务
基于 someacg 提供的图片列表 API开发的高性能随机图片服务。支持自动页数检测、智能缓存管理和定时更新功能。
## 功能特性
- 🚀 **高性能缓存**: 预加载全量图片数据100% 缓存命中率
- 🔄 **自动更新**: 每日凌晨自动检测最大页数并更新缓存
- 📱 **多端支持**: 支持桌面端和移动端不同尺寸的图片
- 🛡️ **错误处理**: 完善的重试机制和降级策略
- 📊 **状态监控**: 提供详细的服务状态和缓存统计信息
- 🗂️ **智能管理**: 自动清理过期缓存,支持配置缓存大小限制
## 快速开始
### 安装依赖
```bash
npm install
```
### 配置环境变量
复制 `.env.example``.env` 并根据需要修改配置:
```bash
cp .env.example .env
```
主要配置项:
```env
# 服务端口
PORT=3000
# 缓存配置
CACHE_DIR=./cache
MAX_CACHE_SIZE_MB=1024
# API 配置
SOMEACG_API_BASE=https://someacg.vercel.app/api
SOMEACG_CDN_BASE=https://cdn.someacg.top/graph/origin
```
### 启动服务
```bash
# 生产环境
npm start
# 开发环境
npm run dev
```
## API 接口
### 获取随机图片
```http
GET /api/random
```
**查询参数:**
| 参数 | 类型 | 说明 | 可选值 |
|------|------|------|--------|
| size | string/number | 图片尺寸类型 | `1`/`mobile`(移动端), `2`/`desktop`(桌面端),不传则随机 |
| type | string | 返回类型 | `url`(默认,返回图片信息), `image`(直接返回图片数据) |
**响应示例:**
```json
{
"_id": "68889a7645c10a92ad0e8e94",
"quality": true,
"title": "「綺麗。」",
"desc": "",
"file_name": "132641568_p0.jpg",
"size": {
"width": 3024,
"height": 4536,
"_id": "6894f7e091dd1a5cfedcd845"
},
"url": "https://cdn.someacg.top/graph/origin/132641568_p0.jpg",
"cached": true
}
```
### 服务状态
```http
GET /api/status
```
返回服务运行状态、内存使用情况、缓存统计等信息。
### 首页
```http
GET /
```
返回服务基本信息。
## 核心功能
### 页数检测
- 启动时自动检测 someacg API 的最大页数
- 使用二分法高效探测页数范围
- 每日凌晨 2:00 自动更新页数范围
- 支持桌面端和移动端分别检测
### 缓存策略
1. **预加载**: 启动时和每日更新后,全量拉取所有页面的图片列表
2. **随机排序**: 将获取的图片列表随机打乱,确保随机性
3. **本地缓存**: 按顺序下载并缓存图片到本地存储
4. **智能清理**: 达到缓存大小限制时,自动清理最早访问的图片
5. **100% 命中**: 所有用户请求都从本地缓存获取,无需访问外部 CDN
### 错误处理
- **网络重试**: API 请求失败时自动重试 3 次
- **降级策略**: 页数检测失败时使用前一天的缓存数据
- **跳过机制**: 缓存中图片丢失时自动跳到下一张
- **限流处理**: 遇到 429 错误时自动延长等待时间
### 定时任务
- **每日更新**: 凌晨 2:00 自动检测页数并重新预加载缓存
- **健康检查**: 每小时检查服务状态和内存使用情况
- **日志清理**: 每 6 小时执行一次日志清理和垃圾回收
## 项目结构
```
src/
├── app.js # 主应用入口
├── services/
│ ├── CacheManager.js # 缓存管理服务
│ ├── PageDetector.js # 页数检测服务
│ ├── ImageService.js # 图片服务(核心业务逻辑)
│ └── scheduler.js # 定时任务调度器
└── utils/
└── logger.js # 日志工具
```
## 配置说明
| 配置项 | 默认值 | 说明 |
|--------|--------|------|
| PORT | 3000 | 服务端口 |
| CACHE_DIR | ./cache | 缓存目录 |
| MAX_CACHE_SIZE_MB | 1024 | 最大缓存大小MB |
| MAX_PAGE_DETECTION_TIMEOUT | 30000 | 页数检测超时时间(毫秒) |
| MAX_RETRY_ATTEMPTS | 3 | 最大重试次数 |
| LOG_LEVEL | info | 日志级别 |
## 性能优化
- 使用本地缓存避免频繁访问外部 CDN
- 批量并发下载图片,提高预加载效率
- 智能缓存清理策略,避免磁盘空间不足
- 内存使用监控和垃圾回收机制
## 注意事项
1. 首次启动需要较长时间进行预加载,请耐心等待
2. 确保有足够的磁盘空间用于图片缓存
3. someacg CDN 对单 IP 有并发限制,预加载过程中可能遇到 429 错误
4. 建议在服务器环境中运行,以获得更好的网络稳定性
## 许可证
MIT License