109 lines
No EOL
4.1 KiB
Python
109 lines
No EOL
4.1 KiB
Python
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())
|
|
|
|
# 更新Cookie
|
|
@router.post("/update_cookie",
|
|
response_model=ResponseModel,
|
|
summary="更新Cookie/Update Cookie")
|
|
async def update_cookie_api(request: Request,
|
|
service: str = Body(example="douyin", description="服务名称/Service name"),
|
|
cookie: str = Body(example="YOUR_NEW_COOKIE", description="新的Cookie值/New Cookie value")):
|
|
"""
|
|
# [中文]
|
|
### 用途:
|
|
- 更新指定服务的Cookie
|
|
### 参数:
|
|
- service: 服务名称 (如: douyin_web)
|
|
- cookie: 新的Cookie值
|
|
### 返回:
|
|
- 更新结果
|
|
|
|
# [English]
|
|
### Purpose:
|
|
- Update Cookie for specified service
|
|
### Parameters:
|
|
- service: Service name (e.g.: douyin_web)
|
|
- cookie: New Cookie value
|
|
### Return:
|
|
- Update result
|
|
|
|
# [示例/Example]
|
|
service = "douyin_web"
|
|
cookie = "YOUR_NEW_COOKIE"
|
|
"""
|
|
try:
|
|
if service == "douyin":
|
|
from crawlers.douyin.web.web_crawler import DouyinWebCrawler
|
|
douyin_crawler = DouyinWebCrawler()
|
|
await douyin_crawler.update_cookie(cookie)
|
|
return ResponseModel(code=200,
|
|
router=request.url.path,
|
|
data={"message": f"Cookie for {service} updated successfully"})
|
|
elif service == "tiktok":
|
|
# 这里可以添加TikTok的cookie更新逻辑
|
|
# from crawlers.tiktok.web.web_crawler import TikTokWebCrawler
|
|
# tiktok_crawler = TikTokWebCrawler()
|
|
# await tiktok_crawler.update_cookie(cookie)
|
|
return ResponseModel(code=200,
|
|
router=request.url.path,
|
|
data={"message": f"Cookie for {service} will be updated (not implemented yet)"})
|
|
else:
|
|
raise ValueError(f"Service '{service}' is not supported. Supported services: douyin, tiktok")
|
|
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()) |