94 lines
3.4 KiB
Python
94 lines
3.4 KiB
Python
from fastapi import APIRouter, File, HTTPException, UploadFile
|
|
|
|
from app.schemas.common import ApiResponse
|
|
from app.services.juming_service import (
|
|
get_juming_preferences,
|
|
get_juming_status,
|
|
login_jucha_with_juming_cookie,
|
|
login_juming,
|
|
update_juming_preferences,
|
|
upload_juming_cookie,
|
|
)
|
|
from app.services.juming_task_service import create_juming_task, list_juming_tasks, request_stop_juming_task, retry_juming_task
|
|
|
|
router = APIRouter(tags=["juming"])
|
|
|
|
|
|
@router.get("/juming/status", response_model=ApiResponse)
|
|
def juming_status() -> ApiResponse:
|
|
return ApiResponse(data=get_juming_status())
|
|
|
|
|
|
@router.get("/juming/preferences", response_model=ApiResponse)
|
|
def juming_preferences() -> ApiResponse:
|
|
return ApiResponse(data=get_juming_preferences())
|
|
|
|
|
|
@router.put("/juming/preferences", response_model=ApiResponse)
|
|
def update_juming_preferences_route(payload: dict) -> ApiResponse:
|
|
try:
|
|
data = update_juming_preferences(payload)
|
|
except ValueError as exc:
|
|
raise HTTPException(status_code=400, detail=str(exc)) from exc
|
|
return ApiResponse(message="聚名采集偏好已保存", data=data)
|
|
|
|
|
|
@router.post("/juming/crawl", response_model=ApiResponse)
|
|
def juming_crawl(payload: dict) -> ApiResponse:
|
|
try:
|
|
data = create_juming_task(payload)
|
|
except ValueError as exc:
|
|
raise HTTPException(status_code=400, detail=str(exc)) from exc
|
|
return ApiResponse(message="聚名采集任务已创建", data=data)
|
|
|
|
|
|
@router.get("/juming/tasks", response_model=ApiResponse)
|
|
def juming_tasks() -> ApiResponse:
|
|
return ApiResponse(data=list_juming_tasks())
|
|
|
|
|
|
@router.post("/juming/tasks/{task_id}/retry", response_model=ApiResponse)
|
|
def juming_task_retry(task_id: str) -> ApiResponse:
|
|
try:
|
|
data = retry_juming_task(task_id)
|
|
except ValueError as exc:
|
|
raise HTTPException(status_code=400, detail=str(exc)) from exc
|
|
return ApiResponse(message="聚名采集任务已重新加入队列", data=data)
|
|
|
|
|
|
@router.post("/juming/tasks/{task_id}/stop", response_model=ApiResponse)
|
|
def juming_task_stop(task_id: str) -> ApiResponse:
|
|
try:
|
|
data = request_stop_juming_task(task_id)
|
|
except ValueError as exc:
|
|
raise HTTPException(status_code=400, detail=str(exc)) from exc
|
|
return ApiResponse(message="聚名采集任务已发送停止请求", data=data)
|
|
|
|
|
|
@router.post("/juming/login", response_model=ApiResponse)
|
|
def juming_login(payload: dict) -> ApiResponse:
|
|
try:
|
|
data = login_juming(str(payload.get("email") or ""), str(payload.get("password") or ""))
|
|
except ValueError as exc:
|
|
raise HTTPException(status_code=400, detail=str(exc)) from exc
|
|
return ApiResponse(message="聚名登录成功", data=data)
|
|
|
|
|
|
@router.post("/juming/jucha-login", response_model=ApiResponse)
|
|
def juming_jucha_login() -> ApiResponse:
|
|
try:
|
|
data = login_jucha_with_juming_cookie()
|
|
except ValueError as exc:
|
|
raise HTTPException(status_code=400, detail=str(exc)) from exc
|
|
return ApiResponse(message="聚查联名登录成功", data=data)
|
|
|
|
|
|
@router.post("/juming/cookie/upload", response_model=ApiResponse)
|
|
async def juming_cookie_upload(file: UploadFile = File(...)) -> ApiResponse:
|
|
content = await file.read()
|
|
try:
|
|
data = upload_juming_cookie(file.filename or "juming_cookies.pkl", content)
|
|
except ValueError as exc:
|
|
raise HTTPException(status_code=400, detail=str(exc)) from exc
|
|
return ApiResponse(message="聚名 Cookie 已上传", data=data)
|