Files
pixiv/backend

Pixiv 后端服务

Pixiv 后端服务架构,提供作品信息获取、作者信息查询、文件下载等功能。

🏗️ 项目架构

backend/
├── server.js              # 主服务器文件
├── core.js                # 核心后端逻辑
├── auth.js                # 认证模块
├── config.js              # 代理配置
├── start.js               # 启动脚本
├── test-login.js          # 登录测试脚本
├── middleware/            # 中间件
│   ├── auth.js           # 认证中间件
│   └── errorHandler.js   # 错误处理中间件
├── routes/               # 路由模块
│   ├── auth.js          # 认证路由
│   ├── artwork.js       # 作品路由
│   ├── artist.js        # 作者路由
│   ├── download.js      # 下载路由
│   ├── ranking.js       # 排行榜路由
│   └── repository.js    # 仓库管理路由
├── services/            # 服务层
│   ├── artwork.js       # 作品服务
│   ├── artist.js        # 作者服务
│   ├── download.js      # 下载服务
│   ├── ranking.js       # 排行榜服务
│   └── repository.js    # 仓库管理服务
└── utils/               # 工具类
    └── response.js      # 响应工具

📡 API 接口

认证相关

  • GET /api/auth/status - 获取登录状态
  • GET /api/auth/login-url - 获取登录URL
  • POST /api/auth/callback - 处理登录回调
  • POST /api/auth/relogin - 重新登录
  • POST /api/auth/logout - 登出

作品相关

  • GET /api/artwork/search - 搜索作品
    • 参数: keyword, type, sort, duration, offset, limit
  • GET /api/artwork/:id - 获取作品详情
    • 参数: include_user, include_series
  • GET /api/artwork/:id/preview - 获取作品预览
  • GET /api/artwork/:id/images - 获取作品图片URL
    • 参数: size (small/medium/large/original)
  • GET /api/artwork/:id/related - 获取相关推荐作品
    • 参数: offset, limit

排行榜相关

  • GET /api/ranking - 获取排行榜数据
    • 参数: mode (day/week/month), type (art/manga/novel), offset, limit

作者相关

  • GET /api/artist/following - 获取当前用户关注的作者列表
    • 参数: offset, limit
  • GET /api/artist/:id/artworks - 获取作者作品列表
    • 参数: type, filter, offset, limit
  • GET /api/artist/:id/following - 获取作者关注列表
    • 参数: restrict, offset, limit
  • GET /api/artist/:id/followers - 获取作者粉丝列表
    • 参数: restrict, offset, limit
  • POST /api/artist/:id/follow - 关注/取消关注作者
    • 参数: restrict (public/private)

下载相关

  • POST /api/download/artwork/:id - 下载单个作品
    • 参数: size, quality, format
  • POST /api/download/artworks - 批量下载作品
    • 参数: artworkIds, size, quality, format, concurrent
  • POST /api/download/artist/:id - 下载作者作品
    • 参数: type, filter, size, quality, format, concurrent
  • POST /api/download/ranking - 下载排行榜作品
    • 参数: mode, type, limit, size, quality, format
  • GET /api/download/progress/:taskId - 获取下载进度
  • DELETE /api/download/cancel/:taskId - 取消下载任务
  • GET /api/download/history - 获取下载历史
    • 参数: offset, limit

任务管理API(优化版本)

  • GET /api/download/tasks - 获取所有任务(完整数据)
  • GET /api/download/tasks/active - 获取活跃任务(下载中或暂停)
  • GET /api/download/tasks/summary - 获取任务摘要(快速状态检查)
  • GET /api/download/tasks/changes - 获取任务变更(增量更新)
    • 参数: since (时间戳,获取指定时间后的变更)
  • GET /api/download/tasks/completed - 获取已完成任务(分页)
    • 参数: offset, limit

代理相关

  • GET /api/proxy/image - 图片代理服务
    • 参数: url (图片URL)
  • GET /api/proxy/cache/stats - 获取图片缓存统计信息
  • DELETE /api/proxy/cache - 清理所有图片缓存
  • DELETE /api/proxy/cache/expired - 清理过期图片缓存
  • GET /api/proxy/cache/config - 获取缓存配置
  • PUT /api/proxy/cache/config - 更新缓存配置
  • POST /api/proxy/cache/config/reset - 重置缓存配置为默认值

API缓存管理相关

  • GET /api/proxy/api-cache/stats - 获取API缓存统计信息
  • DELETE /api/proxy/api-cache - 清理所有API缓存
  • DELETE /api/proxy/api-cache/expired - 清理过期API缓存
  • GET /api/proxy/api-cache/config - 获取API缓存配置
  • PUT /api/proxy/api-cache/config - 更新API缓存配置
  • POST /api/proxy/api-cache/config/reset - 重置API缓存配置为默认值

仓库管理相关

  • POST /api/repository/initialize - 初始化仓库
  • GET /api/repository/config - 获取仓库配置
  • PUT /api/repository/config - 更新仓库配置
  • GET /api/repository/stats - 获取仓库统计信息
  • GET /api/repository/artists - 获取作者列表
    • 参数: offset, limit
  • GET /api/repository/artists/:artistName/artworks - 获取作者作品列表
    • 参数: offset, limit
  • GET /api/repository/search - 搜索作品
    • 参数: q, offset, limit
  • GET /api/repository/artworks/:artworkId - 获取作品详情
  • DELETE /api/repository/artworks/:artworkId - 删除作品
  • POST /api/repository/migrate - 自动迁移旧项目
    • 参数: sourceDir (源目录路径)
  • GET /api/repository/preview - 文件预览代理
    • 参数: path (文件路径)
  • GET /api/repository/file-info - 获取文件信息
    • 参数: path (文件路径)
  • GET /api/repository/directory - 获取目录结构
    • 参数: path (目录路径)
  • GET /api/repository/check-downloaded/:artworkId - 检查作品是否已下载
  • GET /api/repository/check-directory - 检查目录是否存在
    • 参数: path (目录路径)
  • POST /api/repository/migrate-old-to-new - 从旧目录迁移到新目录
    • 参数: oldDir (旧目录路径), newDir (新目录路径)

待看名单相关

  • GET /api/watchlist - 获取所有待看项目
  • POST /api/watchlist - 添加待看项目
    • 参数: url (必填), title (可选,不提供则自动生成)
  • PUT /api/watchlist/:id - 更新待看项目
    • 参数: title (项目标题)
  • DELETE /api/watchlist/:id - 删除待看项目

🔧 配置说明

代理配置

config.js 中配置代理设置:

环境变量

  • PORT - 服务器端口 (默认: 3000)
  • NODE_ENV - 运行环境 (development/production)
  • FRONTEND_URL - 前端URL (用于CORS)

📁 文件结构说明

核心模块

  • server.js: 主服务器类,负责初始化、配置和启动服务器
  • core.js: 核心后端逻辑,管理认证状态和配置
  • auth.js: 认证模块,处理OAuth2.0登录流程

中间件

  • auth.js: 认证中间件,验证用户登录状态
  • errorHandler.js: 全局错误处理中间件

路由模块

  • auth.js: 认证相关路由
  • artwork.js: 作品相关路由
  • artist.js: 作者相关路由
  • download.js: 下载相关路由
  • repository.js: 仓库管理路由
  • proxy.js: 代理服务路由
  • watchlist.js: 待看名单路由

服务层

  • artwork.js: 作品服务,处理作品API调用
  • artist.js: 作者服务,处理作者API调用
  • download.js: 下载服务,处理文件下载
  • repository.js: 仓库管理服务,处理文件管理和配置
  • image-cache.js: 图片缓存服务,管理图片代理缓存
  • api-cache.js: API缓存服务,管理API请求缓存

工具类

  • response.js: 统一API响应格式工具

🎯 主要功能

1. 作品信息获取

  • 获取作品详细信息
  • 获取作品预览信息
  • 获取作品图片URL
  • 搜索作品

2. 作者信息查询

  • 获取作者基本信息
  • 获取作者作品列表
  • 获取作者关注/粉丝列表
  • 关注/取消关注作者

3. 排行榜功能

  • 获取日/周/月排行榜数据
  • 支持插画、漫画、小说类型筛选
  • 分页浏览排行榜作品
  • 批量下载排行榜作品

4. 文件下载

  • 下载单个作品
  • 批量下载作品
  • 下载作者作品
  • 下载进度跟踪
  • 下载历史记录

5. 认证管理

  • OAuth2.0 登录流程
  • 自动刷新令牌
  • 登录状态管理

6. 仓库管理

  • 文件存储配置管理
  • 作品文件浏览和搜索
  • 按作者分类浏览
  • 文件预览和下载
  • 自动迁移旧项目
  • 磁盘使用情况监控
  • 作品删除管理

7. 图片缓存管理

  • 图片代理缓存功能
  • 自动缓存过期清理
  • 缓存大小限制管理
  • 缓存统计信息查看
  • 手动缓存清理功能

8. API缓存管理

  • 作者相关API请求缓存功能
  • 作品搜索API请求缓存功能
  • 作品详情API请求缓存功能
  • 自动缓存过期清理(默认5分钟)
  • 缓存大小限制管理(默认50MB
  • 缓存统计信息查看
  • 手动缓存清理功能
  • 支持配置缓存策略和端点白名单

🔒 安全特性

  • 统一的错误处理
  • 请求参数验证
  • 认证中间件保护
  • CORS 配置
  • 代理支持

📊 监控和日志

  • 请求日志记录
  • 错误日志记录
  • 健康检查接口
  • 下载进度跟踪

🛠️ 开发指南

添加新路由

  1. routes/ 目录下创建新的路由文件
  2. server.js 中注册路由
  3. 添加相应的中间件保护

添加新服务

  1. services/ 目录下创建新的服务类
  2. 实现相应的业务逻辑
  3. 在路由中调用服务

添加新中间件

  1. middleware/ 目录下创建新的中间件文件
  2. server.js 中注册中间件

📝 注意事项

  1. 确保代理配置正确
  2. 首次使用需要登录获取访问令牌
  3. 下载功能需要足够的磁盘空间
  4. 建议在生产环境中使用PM2等进程管理器

🤝 贡献

欢迎提交 Issue 和 Pull Request

许可证

MIT License