一个现代化的媒体信息生成工具,支持从多个源(豆瓣、IMDb、Bangumi 等)提取元数据并生成 BBCode 格式的内容。
- 🎬 支持多个源:豆瓣、IMDb、Bangumi、Steam、Indienova、Epic Games
- 🚀 现代的 Node.js + Express + TypeScript 技术栈
- 🔍 强大的搜索功能
- 📝 BBCode 格式生成
- 💾 智能缓存(Redis + 内存双层缓存)
- 🛡️ API 密钥认证
- 🌐 Web UI 前端界面
- 📦 友好的部署方式
- Node.js >= 18.0.0
- Redis (可选,不配置时使用内存缓存)
npm install创建 .env 文件:
cp .env.example .env编辑 .env 文件,设置必要的配置:
PORT=3000
NODE_ENV=development
APIKEY=your-secret-key
REDIS_URL=redis://localhost:6379
npm run dev访问 http://localhost:3000
npm run buildnpm run start注意: API 接口与原始 pt-gen-cfworker 项目完全兼容。
GET /?search={keyword}&source={source}
参数:
search: 搜索关键词source: 源站点 (douban, imdb, bangumi)
示例请求:
curl "http://localhost:3000/?search=肖申克的救赎&source=douban"响应示例:
{
"success": true,
"data": [
{
"title": "肖申克的救赎",
"year": 1994,
"subtype": "movie",
"link": "https://movie.douban.com/subject/1291546/"
}
],
"copyright": "© 2024 PT-Gen-Modern",
"version": "1.0.0",
"generate_at": 1699000000000
}GET /?url={resource_url}
参数:
url: 资源完整 URL (例如:豆瓣电影链接)
示例请求:
curl "http://localhost:3000/?url=https://movie.douban.com/subject/1291546/"GET /?site={site}&sid={id}
参数:
site: 源站点 (douban, imdb, bangumi)sid: 资源 ID
示例请求:
curl "http://localhost:3000/?site=douban&sid=1291546"响应示例:
{
"success": true,
"format": "[img]https://...[/img]\n\n【基本信息】\n标题: 肖申克的救赎\n评分: 9.3/10\n...",
"title": "肖申克的救赎",
"rating": "9.3",
"copyright": "© 2024 PT-Gen-Modern",
"version": "1.0.0",
"generate_at": 1699000000000
}如果设置了 APIKEY 环境变量,所有请求必须提供有效的 API 密钥:
# 方式一:查询参数
curl "http://localhost:3000/?search=test&source=douban&apikey=your-key"
# 方式二:HTTP 头
curl -H "X-API-Key: your-key" "http://localhost:3000/?search=test&source=douban"设置 DISABLE_SEARCH=true 可以禁用搜索功能。
FROM node:20-alpine
WORKDIR /app
COPY package*.json ./
RUN npm ci --only=production
COPY . .
RUN npm run build
EXPOSE 3000
CMD ["npm", "start"]npm install -g vercel
vercelnpm install
npm run build
npm start使用 PM2 管理进程:
npm install -g pm2
pm2 start dist/server.js --name "pt-gen-modern"src/
├── server.ts # 主服务器文件
├── logger.ts # 日志配置
├── types/ # TypeScript 类型定义
├── utils/ # 工具函数
│ ├── cache.ts # 缓存管理
│ ├── parser.ts # HTML 解析
│ └── formatter.ts # 数据格式化
├── services/ # 业务逻辑
│ ├── baseService.ts # 基础服务类
│ └── doubanService.ts
├── routes/ # 路由
│ ├── api.ts # API 路由
│ └── web.ts # Web 路由
├── middleware/ # 中间件
│ └── auth.ts # 认证中间件
└── public/ # 静态文件
└── index.html # Web UI
- 创建新的服务类,继承
BaseService:
// src/services/imdbService.ts
import { BaseService } from './baseService';
export class ImdbService extends BaseService {
constructor() {
super('imdb');
}
async search(query: string) {
// 实现搜索逻辑
}
async getInfo(sid: string) {
// 实现信息获取逻辑
}
}
export const imdbService = new ImdbService();- 在 API 路由中注册:
// src/routes/api.ts
import { imdbService } from '../services/imdbService';
// In search endpoint
case 'imdb':
result = await imdbService.search(search as string);
break;
// In info endpoint
case 'imdb':
result = await imdbService.getInfo(id);
break;| 变量 | 说明 | 默认值 |
|---|---|---|
| PORT | 服务器端口 | 3000 |
| NODE_ENV | 运行环境 | development |
| LOG_LEVEL | 日志级别 | info |
| APIKEY | API 密钥 | 无 |
| DISABLE_SEARCH | 禁用搜索 | false |
| REDIS_URL | Redis 连接串 | redis://localhost:6379 |
| CACHE_TTL | 缓存时间(秒) | 172800 |
| AUTHOR | 作者名称 | PT-Gen-Modern |
MIT