Skip to content

Repository files navigation

Publish Helper 2.0

🚀 现代化PT资源发布助手 - 重构版本

Python Version License Code Style

✨ 重构亮点

本版本是对原项目的全面重构,在完全保持向后兼容性的同时,大幅提升了代码质量和开发体验:

🏗️ 现代化架构 - 模块化设计,符合Python最佳实践
⚙️ 智能配置 - 分层配置系统,支持环境变量覆盖
📝 专业日志 - 彩色输出,结构化记录
🛡️ 类型安全 - 完整的异常体系和类型检查
🧪 测试保证 - 完整的测试框架和代码覆盖
🔧 开发工具 - 自动化代码质量保证

🎯 功能特性

核心功能

  • 🎬 自动获取PT-Gen简介信息 - 支持多个API源 + 备用接口
  • 📋 MediaInfo信息提取 - 智能媒体分析
  • 📸 自动截图生成 - 可配置截图参数
  • 🖼️ 缩略图制作 - 自动生成预览图
  • ☁️ 图床上传 - 支持多种图床服务(多线程并发上传)
  • 🏷️ 智能命名 - 根据模板自动生成标题和文件名
  • 📁 文件整理 - 自动创建目录结构
  • 🌱 种子制作 - 一键生成torrent文件
  • 🖌️ 海报下载 - 自动下载并上传豆瓣海报
  • 💻 交互式CLI - python src/main_cli.py 命令行一键发布工作流

高级功能

  • 📺 剧集批量处理 - 支持批量重命名和分集处理
  • 🔗 硬链接支持 - 节省存储空间
  • 🎭 短剧特殊处理 - 专门的短剧命名和简介生成
  • 🚀 API接口 - 完整的RESTful API(可选Bearer鉴权 + CORS白名单)
  • 🐳 Docker支持 - 容器化部署

🚀 快速开始

安装

# 克隆项目
git clone https://github.com/bjdbjd/publish-helper.git
cd publish-helper

# 安装依赖
pip install -r requirements.txt

# 配置环境(可选)
cp .env.example .env
# 编辑 .env 文件配置你的API密钥

系统依赖

本项目使用 pymediainfo 提取视频信息,需要 libmediainfo 库支持。

Windows & macOS: 无需手动安装,pymediainfo 已打包所需库文件。

Linux: 需要手动安装 libmediainfo:

# Debian/Ubuntu
apt install libmediainfo0v5

# CentOS/RHEL/Fedora
yum install libmediainfo  # 或 dnf install libmediainfo

# Arch Linux
pacman -S libmediainfo

中文字体(Linux 服务器)

如果在 Linux 服务器上运行时中文显示为方块或乱码,需要安装中文字体:

# Debian/Ubuntu
apt install fonts-wqy-zenhei fonts-wqy-microhei
# 或使用 Noto CJK 字体(更全面)
apt install fonts-noto-cjk

# CentOS/RHEL/Fedora
yum install wqy-zenhei-fonts

# Arch Linux
pacman -S wqy-zenhei

# 刷新字体缓存
fc-cache -f -v

运行

# GUI模式
python src/main_gui.py

# API模式
python src/main_api.py

# CLI模式(交互式命令行)
python src/main_cli.py

Docker部署

统一镜像内含 Vue 前端 + Flask API + nginx(同一个容器),前端由镜像自行构建, 无需预先打包。镜像已发布到 GHCR:

# 拉取官方镜像启动(推荐,无需源码)
docker run -d --name publish-helper \
  -p 15373:15373 \
  -v ./volume/static:/app/static \
  -v ./volume/media:/app/media \
  ghcr.io/bjdbjd/publish-helper:latest
# 访问 http://localhost:15373

用 compose(docs/publish-helper.yml 为拉取式,deploy/docker-compose.yml 为本地构建式):

docker compose -f deploy/docker-compose.yml up -d

从源码构建统一镜像时,context 必须是两个仓库的公共父目录(前端是独立仓库 publish-helper-vue,与后端同级):

cd ..   # 进入同时包含 publish-helper/ 与 publish-helper-vue/ 的目录
docker build -f publish-helper/deploy/Dockerfile -t publish-helper:local .
# 或在后端目录直接 make docker-build(会自动切到父目录)

只需暴露 15373(nginx,同时提供界面与 /api 反代);15372 是容器内的 Flask, 默认不对外暴露。旧文档里的 docker build -f deploy/Dockerfile . 已不再适用。

⚙️ 配置说明

环境变量配置

创建 .env 文件:

# API配置
API_PORT=15372
API_DEBUG=false

# PT-Gen配置(留空则用 static/settings.json 中的默认地址)
PTGEN_API_URL=

# 图床配置
IMAGE_HOST_TYPE=freeimage
IMAGE_HOST_API_KEY=your_image_host_key

# 日志配置
LOG_LEVEL=INFO
LOG_FILE=logs/app.log

支持的图床

免费图床

商业图床

自建图床

🛠️ 开发指南

开发环境设置

# 安装开发依赖
pip install -r requirements-dev.txt

# 安装pre-commit钩子
pre-commit install

# 运行测试
pytest tests/ -v --cov=src

代码质量

# 代码格式化
black src/ tests/
isort src/ tests/

# 代码检查
flake8 src/ tests/
mypy src/

# 或使用Makefile
make format  # 格式化代码
make lint    # 代码检查
make test    # 运行测试

项目结构

publish-helper/
├── src/
│   ├── config/            # 配置管理
│   │   ├── __init__.py
│   │   └── settings.py
│   ├── utils/             # 工具模块
│   │   ├── logger.py      # 日志系统
│   │   ├── exceptions.py  # 异常定义
│   │   └── file_utils.py  # 文件工具
│   ├── core/              # 核心功能(按领域拆分:data/text/video/torrent/picturebed/ptgen/...)
│   ├── gui/               # GUI界面
│   ├── api/               # API接口
│   ├── tools/             # 独立调试脚本(debug_ptgen.py)
│   ├── main_gui.py        # GUI入口
│   ├── main_api.py        # API入口
│   └── main_cli.py        # CLI入口(交互式命令行)
├── libs/                  # 跨平台二进制(deb/、macos/、pinyin/)
├── tests/                 # 测试代码
├── docs/                  # 文档
├── deploy/                # Dockerfile + docker-compose.yml
├── requirements.txt       # 生产依赖
├── requirements-dev.txt   # 开发依赖

📚 文档

🤝 贡献

欢迎贡献代码!请遵循以下步骤:

  1. Fork 项目
  2. 创建功能分支 (git checkout -b feature/amazing-feature)
  3. 提交更改 (git commit -m 'Add amazing feature')
  4. 推送到分支 (git push origin feature/amazing-feature)
  5. 创建 Pull Request

代码规范

  • 遵循 PEP 8 代码风格
  • 使用 Black 进行代码格式化
  • 添加类型注解
  • 编写测试用例
  • 更新文档

📝 更新日志

v2.0.0 - 架构重构版 (2025-07-21)

🚀 新增功能

  • 现代化项目架构
  • 分层配置管理系统
  • 专业日志框架
  • 完整的异常处理体系
  • 自动化开发工具链
  • 完整的测试框架

🔧 改进

  • 代码质量大幅提升
  • 更好的错误处理
  • 改进的Docker配置
  • 完善的文档系统

🛡️ 兼容性

  • 完全向后兼容
  • 保持所有原有功能
  • 现有配置自动迁移

v2.0.0 后续增强 (2026-09)

在 v2.0.0 架构重构基础上持续迭代的稳定性与安全增强:

  • 交互式 CLI - python src/main_cli.py 命令行一键发布工作流
  • 豆瓣海报自动下载上传
  • API 可选鉴权 + CORS 白名单(API_AUTH_TOKEN / API_CORS_ORIGINS,默认关闭、向后兼容)
  • API 安全加固 - media 目录越权读写、/api/getFile 路径逃逸等 S1-S17 系列缺陷修复
  • 核心层缺陷修复 - 中文转数字万进位、PT-Gen 分辨率误判、重命名重复追加扩展名等
  • 截图多线程上传 - 结果按顺序回填、修复乱序与线程生命周期崩溃(0xC0000409)
  • 多平台打包发布流水线 - Windows/macOS/Linux 三平台 PyInstaller 产物 + GitHub Release 自动化
  • 打包版数据目录修正 - 用户设置不再因 onefile 临时目录重置,随包静态资源播种

📞 支持

📄 许可证

本项目基于 GNU General Public License v3.0 开源。

🙏 致谢

贡献者

  • bjdbjd - 原作者和主要维护者
  • Pixel-LH - 核心贡献者
  • EasonWong0603 - 功能开发
  • sertion1126 - Docker支持
  • TommyMerlin - 功能改进

特别感谢

感谢所有为项目贡献代码、报告问题、提供建议的开发者和用户!


如果这个项目对你有帮助,请给我们一个 ⭐ Star!

Releases

Used by

Contributors

Languages