6.3 KiB
6.3 KiB
CLAUDE.md
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
项目概述
这是一个短视频解析平台,聚合多家短视频解析接口(抖音、TikTok、哔哩哔哩),提供用户系统、限流控制、队列管理和管理后台。
技术栈:Python + Flask + MySQL + Redis
常用命令
开发环境设置
# 安装依赖
pip install -r requirements.txt
# 配置环境变量
cp .env.example .env
# 然后编辑 .env 文件配置数据库和Redis连接
# 创建数据库
mysql -u root -p
CREATE DATABASE video_parser CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
# 导入数据库表结构
mysql -u root -p video_parser < database/schema.sql
# 初始化管理员账号(用户名: shihao, 密码: 80012029Lz)
python init_admin.py
# 初始化解析接口数据
python init_data.py
运行应用
# 开发模式
python app.py
# 生产模式(使用Gunicorn)
gunicorn -w 4 -b 0.0.0.0:5000 app:app
测试和调试
# 测试数据库连接
python test_db.py
# 检查环境配置
python check_env.py
# 测试邮件发送功能
python test_email.py
# 单独运行定时任务(健康检查)
python scheduler.py
Redis 服务
# Windows下启动Redis(项目包含Redis-x64-5.0.14.1)
cd Redis-x64-5.0.14.1
redis-server.exe redis.windows.conf
核心架构
解析器工厂模式(parsers/factory.py)
ParserFactory.create_parser(api_config)- 根据API配置创建对应平台的解析器实例ParserFactory.get_parser_for_platform(platform)- 获取指定平台的解析器,支持负载均衡(哔哩哔哩使用加权随机选择)ParserFactory.detect_platform(video_url)- 自动检测视频链接所属平台
所有解析器继承自 BaseParser(parsers/base.py),必须实现 parse(video_url) 方法,返回统一格式:
{
"cover": "封面URL",
"video_url": "视频URL",
"title": "标题",
"description": "简介"
}
添加新平台解析器:
- 在
parsers/目录创建新的解析器文件(如kuaishou.py) - 继承
BaseParser并实现parse()方法 - 在
parsers/factory.py的create_parser()中添加平台映射 - 在数据库
parser_apis表中添加新接口配置 - 在
ParserFactory.detect_platform()中添加 URL 检测规则
队列与并发控制(utils/queue.py)
-
ParseQueue- 解析任务队列管理器,支持Redis和内存队列双模式add_task()- 添加任务到队列get_task()- 从队列获取任务complete_task()- 完成任务并存储结果get_result()- 获取任务结果- 降级机制:Redis 连接失败时自动降级到内存队列(重启后数据丢失)
-
ConcurrencyController- 并发控制器can_process()- 检查是否可以处理新任务(基于max_concurrent配置)wait_for_slot()- 等待可用槽位
健康检查与定时任务(scheduler.py)
使用 APScheduler 定时检查各平台解析接口的健康状态:
- 根据
health_check_config表配置的间隔执行检查 - 检查结果记录到
health_check_logs表 - 更新
parser_apis表的health_status和fail_count
路由结构
routes/main.py- 主页路由routes/auth.py- 用户认证(注册、登录、验证码、重置密码)routes/parser.py- 解析API(/api/parse,/api/task/<task_id>,/api/queue-status)routes/admin.py- 管理后台(用户管理、接口管理、配置管理、统计数据)
数据模型(models/init.py)
核心模型:
User/UserGroup- 用户和分组(支持不同限流策略)Admin- 管理员(支持2FA)ParserAPI- 解析接口配置(支持权重、健康状态、统计数据)SMTPConfig- SMTP配置(支持多配置负载均衡)ParseLog/DailyParseStat- 解析日志和统计HealthCheckConfig/HealthCheckLog- 健康检查配置和日志
限流机制
基于用户分组的每日限流:
- 游客(group_id=1):5次/天
- 普通用户(group_id=2):10次/天
- VIP用户(group_id=3):50次/天
- SVIP用户(group_id=4):200次/天
限流数据存储在 daily_parse_stats 表,按 user_id 或 ip_address 统计。
应用初始化流程(app.py)
- 创建Flask应用并加载配置(config.py)
- 初始化数据库(Flask-SQLAlchemy)
- 初始化登录管理器(Flask-Login)
- 初始化Redis连接(支持降级到内存队列)
- 注册蓝图(auth, parser, admin, main)
- 启动定时任务调度器(非调试模式或主进程)
环境变量配置(.env)
必需配置:
SECRET_KEY- Flask密钥DB_HOST,DB_PORT,DB_USER,DB_PASSWORD,DB_NAME- MySQL配置REDIS_HOST,REDIS_PORT,REDIS_DB,REDIS_PASSWORD- Redis配置(可选,失败时降级到内存队列)MAX_CONCURRENT- 最大并发解析数(默认3)SESSION_LIFETIME- 会话过期时间(秒,默认7200)
注意:
- SMTP 配置存储在数据库
smtp_configs表中,通过管理后台管理 - 站点配置(Logo、标题、公告等)存储在
site_configs表中 - 首次运行前必须执行
init_admin.py和init_data.py初始化数据
访问地址
- 前台首页:
http://localhost:5000 - 管理后台:
http://localhost:5000/admin/login(默认账号:shihao / 80012029Lz) - API文档:参考
API文档.md
常见问题
数据库相关
- 修改数据库表结构后,需手动执行 SQL 更新语句(项目未使用迁移工具)
- 确保数据库字符集为
utf8mb4,避免 emoji 等特殊字符存储问题
Redis 相关
- Windows 环境已包含 Redis 服务端(
Redis-x64-5.0.14.1/) - Redis 不可用时系统会自动降级到内存队列,但重启后队列数据会丢失
- 生产环境建议使用独立的 Redis 服务
邮件发送
- 首次部署需在管理后台配置 SMTP(或使用
开发文档/默认SMPT.md中的默认配置) - 使用
python test_email.py测试邮件发送功能 - 支持多 SMTP 配置负载均衡,提高邮件发送成功率
解析接口
- 哔哩哔哩平台支持 3 个接口负载均衡,通过权重分配流量
- 健康检查失败会发送邮件告警给管理员
- 接口配置在
parser_apis表中,可通过管理后台动态启用/禁用