import asyncio from fastapi import APIRouter, Body, Query, Request, HTTPException # 导入FastAPI组件 from app.api.models.APIResponseModel import ResponseModel, ErrorResponseModel # 导入响应模型 # 爬虫/Crawler from crawlers.hybrid.hybrid_crawler import HybridCrawler # 导入混合爬虫 HybridCrawler = HybridCrawler() # 实例化混合爬虫 router = APIRouter() @router.get("/video_data", response_model=ResponseModel, tags=["Hybrid-API"], summary="混合解析单一视频接口/Hybrid parsing single video endpoint") async def hybrid_parsing_single_video(request: Request, url: str = Query(example="https://v.douyin.com/L4FJNR3/"), minimal: bool = Query(default=False)): """ # [中文] ### 用途: - 该接口用于解析抖音/TikTok单一视频的数据。 ### 参数: - `url`: 视频链接、分享链接、分享文本。 ### 返回: - `data`: 视频数据。 # [English] ### Purpose: - This endpoint is used to parse data of a single Douyin/TikTok video. ### Parameters: - `url`: Video link, share link, or share text. ### Returns: - `data`: Video data. # [Example] url = "https://v.douyin.com/L4FJNR3/" """ try: # 解析视频/Parse video data = await HybridCrawler.hybrid_parsing_single_video(url=url, minimal=minimal) # 返回数据/Return data return ResponseModel(code=200, router=request.url.path, data=data) except Exception as e: status_code = 400 detail = ErrorResponseModel(code=status_code, router=request.url.path, params=dict(request.query_params), ) raise HTTPException(status_code=status_code, detail=detail.dict())