Files
ViGent2/backend/app/api/publish.py
Kevin Wong 3a76f9d0cf 更新
2026-01-22 17:15:42 +08:00

92 lines
2.9 KiB
Python

"""
发布管理 API
"""
from fastapi import APIRouter, HTTPException, BackgroundTasks
from pydantic import BaseModel
from typing import List, Optional
from datetime import datetime
from loguru import logger
from app.services.publish_service import PublishService
router = APIRouter()
publish_service = PublishService()
class PublishRequest(BaseModel):
video_path: str
platform: str
title: str
tags: List[str] = []
description: str = ""
publish_time: Optional[datetime] = None
class PublishResponse(BaseModel):
success: bool
message: str
platform: str
url: Optional[str] = None
@router.post("/", response_model=PublishResponse)
async def publish_video(request: PublishRequest, background_tasks: BackgroundTasks):
try:
result = await publish_service.publish(
video_path=request.video_path,
platform=request.platform,
title=request.title,
tags=request.tags,
description=request.description,
publish_time=request.publish_time
)
return PublishResponse(
success=result.get("success", False),
message=result.get("message", ""),
platform=request.platform,
url=result.get("url")
)
except Exception as e:
logger.error(f"发布失败: {e}")
raise HTTPException(status_code=500, detail=str(e))
@router.get("/platforms")
async def list_platforms():
return {"platforms": [{"id": pid, **pinfo} for pid, pinfo in publish_service.PLATFORMS.items()]}
@router.get("/accounts")
async def list_accounts():
return {"accounts": publish_service.get_accounts()}
@router.post("/login/{platform}")
async def login_platform(platform: str):
result = await publish_service.login(platform)
if result.get("success"):
return result
else:
raise HTTPException(status_code=400, detail=result.get("message"))
@router.post("/logout/{platform}")
async def logout_platform(platform: str):
"""注销平台登录"""
result = publish_service.logout(platform)
return result
@router.get("/login/status/{platform}")
async def get_login_status(platform: str):
"""检查登录状态 (优先检查活跃的扫码会话)"""
return publish_service.get_login_session_status(platform)
@router.post("/cookies/save/{platform}")
async def save_platform_cookie(platform: str, cookie_data: dict):
"""
保存从客户端浏览器提取的Cookie
Args:
platform: 平台ID
cookie_data: {"cookie_string": "document.cookie的内容"}
"""
cookie_string = cookie_data.get("cookie_string", "")
result = await publish_service.save_cookie_string(platform, cookie_string)
if result.get("success"):
return result
else:
raise HTTPException(status_code=400, detail=result.get("message"))