Files
JieXi/CLAUDE.md

6.9 KiB
Raw Blame History

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) - 自动检测视频链接所属平台

所有解析器继承自 BaseParserparsers/base.py必须实现 parse(video_url) 方法,返回统一格式:

{
    "cover": "封面URL",
    "video_url": "视频URL",
    "title": "标题",
    "description": "简介"
}

添加新平台解析器

  1. parsers/ 目录创建新的解析器文件(如 kuaishou.py
  2. 继承 BaseParser 并实现 parse() 方法
  3. parsers/factory.pycreate_parser() 中添加平台映射
  4. 在数据库 parser_apis 表中添加新接口配置
  5. 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_statusfail_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 - 健康检查配置和日志

限流机制utils/limiter.py

RateLimiter 类实现基于用户分组的每日限流:

  • check_limit(user_id, ip_address) - 检查是否超过限制,返回 {allowed, current, limit, remaining}
  • increment_count(user_id, ip_address, success) - 增加解析计数

默认限流配置:

  • 游客:可通过 site_configs 表的 guest_daily_limit 配置默认5次/天)
  • 普通用户group_id=210次/天
  • VIP用户group_id=350次/天
  • SVIP用户group_id=4200次/天

限流数据存储在 daily_parse_stats 表,按 user_id 或 ip_address 统计。

管理员认证utils/admin_auth.py

  • @admin_required - 装饰器保护管理后台路由API返回401 JSON页面重定向到登录
  • verify_2fa(admin, code) - 验证TOTP 2FA代码
  • generate_2fa_secret() / get_2fa_qrcode_url() - 2FA设置辅助函数

应用初始化流程app.py

  1. 创建Flask应用并加载配置config.py
  2. 初始化数据库Flask-SQLAlchemy
  3. 初始化登录管理器Flask-Login
  4. 初始化Redis连接支持降级到内存队列
  5. 注册蓝图auth, parser, admin, main
  6. 启动定时任务调度器(非调试模式或主进程)

环境变量配置(.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.pyinit_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 表中,可通过管理后台动态启用/禁用