345 lines
12 KiB
Python
345 lines
12 KiB
Python
|
|
#!/usr/bin/env python3
|
|||
|
|
# -*- coding: utf-8 -*-
|
|||
|
|
|
|||
|
|
"""
|
|||
|
|
API Response Models
|
|||
|
|
API 响应数据模型
|
|||
|
|
"""
|
|||
|
|
|
|||
|
|
from typing import List, Dict, Any, Optional, Union
|
|||
|
|
from pydantic import BaseModel, Field
|
|||
|
|
from datetime import datetime
|
|||
|
|
|
|||
|
|
|
|||
|
|
class ApiResponse(BaseModel):
|
|||
|
|
"""通用API响应"""
|
|||
|
|
success: bool = Field(..., description="是否成功")
|
|||
|
|
message: str = Field(default="", description="响应消息")
|
|||
|
|
data: Optional[Any] = Field(default=None, description="响应数据")
|
|||
|
|
error: Optional[str] = Field(default=None, description="错误信息")
|
|||
|
|
request_id: Optional[str] = Field(default=None, description="请求ID")
|
|||
|
|
timestamp: datetime = Field(default_factory=datetime.now, description="响应时间")
|
|||
|
|
|
|||
|
|
class Config:
|
|||
|
|
schema_extra = {
|
|||
|
|
"example": {
|
|||
|
|
"success": True,
|
|||
|
|
"message": "操作成功",
|
|||
|
|
"data": {"result": "example_data"},
|
|||
|
|
"error": None,
|
|||
|
|
"request_id": "req_123456",
|
|||
|
|
"timestamp": "2024-01-01T12:00:00"
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
class TopicGenerationResponse(ApiResponse):
|
|||
|
|
"""主题生成响应"""
|
|||
|
|
data: Optional[Dict[str, Any]] = Field(default=None, description="生成的主题数据")
|
|||
|
|
|
|||
|
|
class Config:
|
|||
|
|
schema_extra = {
|
|||
|
|
"example": {
|
|||
|
|
"success": True,
|
|||
|
|
"message": "主题生成成功",
|
|||
|
|
"data": {
|
|||
|
|
"topics": [
|
|||
|
|
{
|
|||
|
|
"index": 1,
|
|||
|
|
"date": "2024-02-01",
|
|||
|
|
"logic": "春节期间家庭出游需求旺盛",
|
|||
|
|
"object": "三亚亚龙湾",
|
|||
|
|
"product": "家庭度假套餐",
|
|||
|
|
"style": "温馨家庭",
|
|||
|
|
"targetAudience": "年轻家庭"
|
|||
|
|
}
|
|||
|
|
],
|
|||
|
|
"generation_stats": {
|
|||
|
|
"total_generated": 5,
|
|||
|
|
"processing_time": 2.5
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
class ContentGenerationResponse(ApiResponse):
|
|||
|
|
"""内容生成响应"""
|
|||
|
|
data: Optional[Dict[str, Any]] = Field(default=None, description="生成的内容数据")
|
|||
|
|
|
|||
|
|
class Config:
|
|||
|
|
schema_extra = {
|
|||
|
|
"example": {
|
|||
|
|
"success": True,
|
|||
|
|
"message": "内容生成成功",
|
|||
|
|
"data": {
|
|||
|
|
"content": {
|
|||
|
|
"title": "三亚亚龙湾| 天下第一湾的绝美体验",
|
|||
|
|
"content": "详细的旅游内容描述...",
|
|||
|
|
"tag": ["三亚", "亚龙湾", "海滩度假"]
|
|||
|
|
},
|
|||
|
|
"generation_stats": {
|
|||
|
|
"word_count": 500,
|
|||
|
|
"processing_time": 3.2
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
class ContentJudgingResponse(ApiResponse):
|
|||
|
|
"""内容评判响应"""
|
|||
|
|
data: Optional[Dict[str, Any]] = Field(default=None, description="评判结果数据")
|
|||
|
|
|
|||
|
|
class Config:
|
|||
|
|
schema_extra = {
|
|||
|
|
"example": {
|
|||
|
|
"success": True,
|
|||
|
|
"message": "内容评判完成",
|
|||
|
|
"data": {
|
|||
|
|
"is_passed": False,
|
|||
|
|
"confidence": 0.85,
|
|||
|
|
"analysis": "价格信息与产品资料不符,存在虚假宣传风险",
|
|||
|
|
"suggested_revisions": "建议修改价格为2999元,并添加具体包含项目"
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
class PosterGenerationResponse(ApiResponse):
|
|||
|
|
"""海报生成响应"""
|
|||
|
|
data: Optional[Dict[str, Any]] = Field(default=None, description="海报生成数据")
|
|||
|
|
|
|||
|
|
class Config:
|
|||
|
|
schema_extra = {
|
|||
|
|
"example": {
|
|||
|
|
"success": True,
|
|||
|
|
"message": "海报生成成功",
|
|||
|
|
"data": {
|
|||
|
|
"poster_path": "output/posters/vibrant_poster_20240101.png",
|
|||
|
|
"fabric_json": "output/json/fabric_data_20240101.json",
|
|||
|
|
"content": {
|
|||
|
|
"title": "正佳极地海洋世界",
|
|||
|
|
"slogan": "夜游海洋,梦幻之旅",
|
|||
|
|
"price": "199",
|
|||
|
|
"ticket_type": "夜场票"
|
|||
|
|
},
|
|||
|
|
"template_info": {
|
|||
|
|
"name": "vibrant",
|
|||
|
|
"size": [900, 1200],
|
|||
|
|
"transparent_background": True
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
class DocumentProcessingResponse(ApiResponse):
|
|||
|
|
"""文档处理响应"""
|
|||
|
|
data: Optional[Dict[str, Any]] = Field(default=None, description="文档处理数据")
|
|||
|
|
|
|||
|
|
class Config:
|
|||
|
|
schema_extra = {
|
|||
|
|
"example": {
|
|||
|
|
"success": True,
|
|||
|
|
"message": "文档处理完成",
|
|||
|
|
"data": {
|
|||
|
|
"processed_documents": 2,
|
|||
|
|
"output_files": [
|
|||
|
|
"output/documents/integrated_content.txt",
|
|||
|
|
"output/documents/travel_guide_transformed.txt"
|
|||
|
|
],
|
|||
|
|
"statistics": {
|
|||
|
|
"total_characters": 50000,
|
|||
|
|
"key_topics": ["住宿", "交通", "美食", "景点"],
|
|||
|
|
"processing_time": 15.3
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
class XHSSearchResponse(ApiResponse):
|
|||
|
|
"""小红书搜索响应"""
|
|||
|
|
data: Optional[Dict[str, Any]] = Field(default=None, description="搜索结果数据")
|
|||
|
|
|
|||
|
|
class Config:
|
|||
|
|
schema_extra = {
|
|||
|
|
"example": {
|
|||
|
|
"success": True,
|
|||
|
|
"message": "搜索完成",
|
|||
|
|
"data": {
|
|||
|
|
"keyword": "三亚旅游攻略",
|
|||
|
|
"notes": [
|
|||
|
|
{
|
|||
|
|
"note_id": "123abc",
|
|||
|
|
"title": "三亚7天6晚详细攻略",
|
|||
|
|
"content": "超详细的三亚旅游攻略...",
|
|||
|
|
"author": "旅游达人小明",
|
|||
|
|
"likes": 1500,
|
|||
|
|
"comments": 89,
|
|||
|
|
"tags": ["三亚", "攻略", "海滩"]
|
|||
|
|
}
|
|||
|
|
],
|
|||
|
|
"total_count": 20,
|
|||
|
|
"search_time": "2024-01-01T12:00:00"
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
class KeywordAnalysisResponse(ApiResponse):
|
|||
|
|
"""关键词分析响应"""
|
|||
|
|
data: Optional[Dict[str, Any]] = Field(default=None, description="关键词分析数据")
|
|||
|
|
|
|||
|
|
class Config:
|
|||
|
|
schema_extra = {
|
|||
|
|
"example": {
|
|||
|
|
"success": True,
|
|||
|
|
"message": "关键词分析完成",
|
|||
|
|
"data": {
|
|||
|
|
"keywords": ["三亚", "亚龙湾", "海滩", "度假", "攻略"],
|
|||
|
|
"keyword_scores": {
|
|||
|
|
"三亚": 85.5,
|
|||
|
|
"亚龙湾": 78.2,
|
|||
|
|
"海滩": 65.8
|
|||
|
|
},
|
|||
|
|
"categories": {
|
|||
|
|
"地理位置": ["三亚", "亚龙湾"],
|
|||
|
|
"景点类型": ["海滩"],
|
|||
|
|
"活动体验": ["度假"]
|
|||
|
|
},
|
|||
|
|
"search_suggestions": [
|
|||
|
|
"三亚攻略",
|
|||
|
|
"亚龙湾住宿",
|
|||
|
|
"三亚美食"
|
|||
|
|
]
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
class ContentAnalysisResponse(ApiResponse):
|
|||
|
|
"""内容分析响应"""
|
|||
|
|
data: Optional[Dict[str, Any]] = Field(default=None, description="内容分析数据")
|
|||
|
|
|
|||
|
|
class Config:
|
|||
|
|
schema_extra = {
|
|||
|
|
"example": {
|
|||
|
|
"success": True,
|
|||
|
|
"message": "内容分析完成",
|
|||
|
|
"data": {
|
|||
|
|
"content_quality_score": 78.5,
|
|||
|
|
"engagement_score": 65.2,
|
|||
|
|
"content_themes": ["旅游攻略", "美食体验", "住宿推荐"],
|
|||
|
|
"sentiment_analysis": {
|
|||
|
|
"positive": 0.7,
|
|||
|
|
"negative": 0.1,
|
|||
|
|
"neutral": 0.2,
|
|||
|
|
"overall": "positive"
|
|||
|
|
},
|
|||
|
|
"recommendations": [
|
|||
|
|
"内容质量较好,建议增加更多实用信息",
|
|||
|
|
"互动数据中等,可关注更热门的内容"
|
|||
|
|
]
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
class FileUploadResponse(ApiResponse):
|
|||
|
|
"""文件上传响应"""
|
|||
|
|
data: Optional[Dict[str, Any]] = Field(default=None, description="上传结果数据")
|
|||
|
|
|
|||
|
|
class Config:
|
|||
|
|
schema_extra = {
|
|||
|
|
"example": {
|
|||
|
|
"success": True,
|
|||
|
|
"message": "文件上传成功",
|
|||
|
|
"data": {
|
|||
|
|
"file_id": "upload_123456",
|
|||
|
|
"file_path": "uploads/document_20240101.pdf",
|
|||
|
|
"file_size": 1024000,
|
|||
|
|
"processing_status": "completed"
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
class PipelineResponse(ApiResponse):
|
|||
|
|
"""完整流水线响应"""
|
|||
|
|
data: Optional[Dict[str, Any]] = Field(default=None, description="流水线执行结果")
|
|||
|
|
|
|||
|
|
class Config:
|
|||
|
|
schema_extra = {
|
|||
|
|
"example": {
|
|||
|
|
"success": True,
|
|||
|
|
"message": "流水线执行完成",
|
|||
|
|
"data": {
|
|||
|
|
"topics": [{"index": 1, "title": "三亚亲子游攻略"}],
|
|||
|
|
"content": {"title": "三亚亲子游", "content": "详细内容..."},
|
|||
|
|
"judge_result": {"is_passed": True, "confidence": 0.9},
|
|||
|
|
"poster": {"poster_path": "output/poster.png"},
|
|||
|
|
"execution_time": 30.5
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
class CookieManagementResponse(ApiResponse):
|
|||
|
|
"""Cookie管理响应"""
|
|||
|
|
data: Optional[Dict[str, Any]] = Field(default=None, description="Cookie管理结果")
|
|||
|
|
|
|||
|
|
class Config:
|
|||
|
|
schema_extra = {
|
|||
|
|
"example": {
|
|||
|
|
"success": True,
|
|||
|
|
"message": "Cookie管理操作成功",
|
|||
|
|
"data": {
|
|||
|
|
"total_cookies": 3,
|
|||
|
|
"valid_cookies": 2,
|
|||
|
|
"current_cookie": "xhs_main",
|
|||
|
|
"operation": "add"
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
class PromptBuildResponse(ApiResponse):
|
|||
|
|
"""提示词构建响应"""
|
|||
|
|
data: Optional[Dict[str, Any]] = Field(default=None, description="构建的提示词")
|
|||
|
|
|
|||
|
|
class Config:
|
|||
|
|
schema_extra = {
|
|||
|
|
"example": {
|
|||
|
|
"success": True,
|
|||
|
|
"message": "提示词构建成功",
|
|||
|
|
"data": {
|
|||
|
|
"system_prompt": "你是一位专业的旅游内容创作者...",
|
|||
|
|
"user_prompt": "请为三亚亚龙湾创作内容...",
|
|||
|
|
"prompt_template": "content_generation",
|
|||
|
|
"variables": {"scenic_info": "三亚亚龙湾"}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
class TaskManagementResponse(ApiResponse):
|
|||
|
|
"""任务管理响应"""
|
|||
|
|
data: Optional[Dict[str, Any]] = Field(default=None, description="任务管理数据")
|
|||
|
|
|
|||
|
|
class Config:
|
|||
|
|
schema_extra = {
|
|||
|
|
"example": {
|
|||
|
|
"success": True,
|
|||
|
|
"message": "任务查询成功",
|
|||
|
|
"data": {
|
|||
|
|
"task_id": "task_123456",
|
|||
|
|
"status": "completed",
|
|||
|
|
"created_at": "2024-01-01T12:00:00",
|
|||
|
|
"completed_at": "2024-01-01T12:05:00",
|
|||
|
|
"result_files": ["output/result.json"],
|
|||
|
|
"statistics": {"processing_time": 300}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|