一个用于 Google PrivateID 年龄验证流程的自动化服务,提供前端页面和后端 API。
- 单个验证与批量验证(前端批量上限 6)
- 公网访问使用短期令牌鉴权(
X-Client-Token) - 本地访问(
localhost/127.0.0.1)可免鉴权调试
age_verification_api.py:Flask API 服务入口services/age_verification_service.py:自动化验证核心逻辑frontend/index.html:前端页面.env:运行配置
- 安装依赖
pip install -r requirements.txt
playwright install chromium- 准备
.env
至少确认以下配置:
CLIENT_TOKEN_SECRET:固定随机密钥CLIENT_TOKEN_TTL_SECONDS:令牌有效期(默认 900)RATE_LIMIT_WINDOW_SECONDS:限流窗口(默认 60)RATE_LIMIT_MAX_REQUESTS:窗口内最大请求数(默认 20)TURNSTILE_SECRET_KEY:建议配置(公益站)
- 启动服务
python age_verification_api.py --host 0.0.0.0 --port 5001访问:
http://<host>:5001/
- 打开首页
- 粘贴一个验证链接
- 点击
Start Verification - 页面会显示当前状态:
Ready / Queued / Running / Success / Failed
- 切换到
Batch - 每行粘贴一个链接(最多 6 个)
- 点击
Start Batch Verification - 页面显示整体进度与当前状态
- 前端会自动调用
POST /auth/client-token获取短期令牌 - 之后请求自动携带
X-Client-Token - 默认不需要前端输入 API Key
- 默认视频文件名:
546a131c1b386aa2856940da0f8737b2.mp4 - 默认读取位置(按优先级):
- 项目根目录同名文件
- 当前工作目录同名文件
- 代码中的旧兼容路径(如存在)
- 也可在请求体中显式传
video_file指定绝对/相对路径
示例:
{
"url": "https://age-verification.privateid.com/...",
"video_file": "F:/path/to/your.mp4",
"async": true
}- 服务会在首次使用时将视频转换并缓存到
.video_cache/,后续直接复用 - 请勿将隐私视频提交到仓库(已通过
.gitignore忽略常见视频格式)
- 生产环境建议无头运行(默认
headless=true) - 建议使用反向代理(Apache/Nginx)+ HTTPS
- 请保护好
.env,不要公开CLIENT_TOKEN_SECRET