Bug 修复:
- T-019: 修复品牌API响应解析,正确解析 data[0].brand_name
- T-020: 添加品牌API Bearer Token认证
视频分析功能:
- T-021: SessionID池服务,从内部API获取Cookie列表
- T-022: SessionID自动重试,失效时自动切换重试
- T-023: 巨量云图API封装,支持超时和错误处理
- T-024: 视频分析数据接口 GET /api/v1/videos/{item_id}/analysis
- T-025: 数据库A3指标更新
- T-026: 视频分析前端页面,展示6大类25+指标
测试覆盖率:
- brand_api.py: 100%
- session_pool.py: 100%
- yuntu_api.py: 100%
- video_analysis.py: 99%
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
56 lines
1.4 KiB
Python
56 lines
1.4 KiB
Python
"""
|
||
视频分析API路由 (T-024)
|
||
|
||
GET /api/v1/videos/{item_id}/analysis
|
||
"""
|
||
|
||
from fastapi import APIRouter, Depends, HTTPException
|
||
from sqlalchemy.ext.asyncio import AsyncSession
|
||
|
||
from app.database import get_db
|
||
from app.services.video_analysis import get_video_analysis_data
|
||
from app.services.yuntu_api import YuntuAPIError
|
||
|
||
router = APIRouter(prefix="/videos", tags=["视频分析"])
|
||
|
||
|
||
@router.get("/{item_id}/analysis")
|
||
async def get_video_analysis(
|
||
item_id: str,
|
||
db: AsyncSession = Depends(get_db),
|
||
):
|
||
"""
|
||
获取视频分析数据。
|
||
|
||
返回6大类指标:
|
||
- 基础信息 (8字段)
|
||
- 触达指标 (7字段)
|
||
- A3指标 (3字段)
|
||
- 搜索指标 (5字段)
|
||
- 费用指标 (3字段)
|
||
- 成本指标 (6字段,计算得出)
|
||
|
||
Args:
|
||
item_id: 视频ID
|
||
|
||
Returns:
|
||
视频分析数据
|
||
|
||
Raises:
|
||
404: 视频不存在
|
||
500: API调用失败
|
||
"""
|
||
try:
|
||
result = await get_video_analysis_data(db, item_id)
|
||
return {
|
||
"success": True,
|
||
"data": result,
|
||
}
|
||
except ValueError as e:
|
||
raise HTTPException(status_code=404, detail=str(e))
|
||
except YuntuAPIError as e:
|
||
# API失败但有降级数据时不抛错
|
||
raise HTTPException(status_code=500, detail=f"API Error: {e.message}")
|
||
except Exception as e:
|
||
raise HTTPException(status_code=500, detail=f"Internal error: {str(e)}")
|