From 4992631aef19d7f644cbcd6cd5e37dde37c6e149 Mon Sep 17 00:00:00 2001
From: cloudroam <cloudroam>
Date: 星期一, 14 七月 2025 10:46:10 +0800
Subject: [PATCH] add:增加对外接口

---
 test2.py |  258 +++++++++++++++++++++++++++++++++------------------
 1 files changed, 165 insertions(+), 93 deletions(-)

diff --git a/test2.py b/test2.py
index d8105ab..1f521bd 100644
--- a/test2.py
+++ b/test2.py
@@ -14,21 +14,164 @@
     api_key="5017c24f-581f-48fb-abef-8ac4654e9018",  # 直接填写密钥
 )
 
+DEFAULT_PROMPTS = {
+    "promptArticle": """请为电影《{film_name}》的拍摄地写一篇小红书风格的文章要求:
+                    1. 标题要吸引人,包含电影名称和拍摄地
+                    2. 开头要吸引人,可以用电影中的经典台词或场景引入
+                    3. 详细介绍每个拍摄地点的特色和亮点
+                    4. 包含实用的参观建议和交通信息
+                    5. 使用emoji表情增加趣味性
+                    6. 最后要有总结和推荐
+                    7. 添加相关标签
+                    请以html格式返回,包含标题、正文和标签.生成内容字体要符合在小程序上合适的大小阅读,标题不要超过h3。""",
+    "promptRoute": """请为电影《{film_name}》的拍摄地设计一条最优游玩路线。要求:
+                   1. 考虑各个景点之间的距离和交通方式
+                   2. 合理安排游览顺序,避免来回奔波
+                   3. 预估每个景点的游览时间
+                   4. 提供具体的交通建议
+                   5. 考虑用餐和休息时间
+                   6. 提供备选方案
+
+                   请以JSON格式返回,格式如下:
+                   {{
+                       "route_name": "路线名称",
+                       "total_time": "预计总时间",
+                       "stops": [
+                           {{
+                               "location_name": "地点名称",
+                               "visit_time": "建议游览时间",
+                               "transportation": "前往下一个地点的交通方式",
+                               "tips": "游览建议"
+                           }}
+                       ],
+                       "alternative_routes": [
+                           {{
+                               "route_name": "备选路线名称",
+                               "description": "路线说明"
+                           }}
+                       ]
+                   }}""",
+    "promptTravel": """请为电影《{film_name}》的拍摄地写一篇小红书风格的路线攻略要求:
+                 1. 标题要吸引人,突出"最佳路线"或"完美行程"等关键词
+                 2. 开头要说明这条路线是如何规划的,为什么这样安排
+                 3. 详细介绍每个景点的游览时间和交通方式
+                 4. 使用emoji表情增加趣味性
+                 5. 提供实用的时间安排建议
+                 6. 包含备选路线方案
+                 7. 最后要有总结和注意事项
+                 8. 添加相关标签
+
+                 请以html格式返回,包含标题、正文和标签,生成内容字体要符合在小程序上合适的大小阅读,标题不要超过h3。""",
+    "promptLocation": """请为电影《{film_name}》生成所有主要拍摄地点细信息。每部电影通常有多个拍摄地点,请尽可能详细地列出所有重要的拍摄地点。
+                对于每个拍摄地点,请提供以下信息:
+                1. 拍摄地点名称
+                2. 详细地址
+                3. 场景类型
+                4. 经典画面描述
+                5. 是否开放参观
+                6. 参观提示
+                7. 地标性建筑描述
+                8. 交通指引说明
+                9. 停车场信息
+                10. 周边设施描述
+
+                请以JSON数组格式返回,格式如下:
+                [
+                    {{
+                        "locationName": "地点1名称",
+                        "address": "地点1详细地址",
+                        "gpsLat": "纬度坐标(精确到小数点后6位)",
+                        "gpsLng": "经度坐标(精确到小数点后6位)",
+                        "sceneType": "场景类型",
+                        "classicScene": "经典画面描述",
+                        "isOpenVisit": 0或1,
+                        "visitInfo": "参观提示",
+                        "landmarkDesc": "地标描述",
+                        "transportGuide": "交通指引",
+                        "parkingInfo": "停车信息",
+                        "surroundingFacilities": "周边设施"
+                    }},
+                    {{
+                        "locationName": "地点2名称",
+                        ...
+                    }}
+                ]
+
+                请确保返回所有重要的拍摄地点,每个地点都要包含完整的信息。"""
+}
+
+
+def get_ai_task_config():
+    """从API获取AI任务配置,保留原始HTML内容"""
+    try:
+        # 设置请求超时时间
+        response = requests.get(
+            "http://14.103.144.28:8090/flower/api/aiTaskConfig/all",
+            timeout=100
+        )
+
+        # 检查HTTP状态码
+        response.raise_for_status()
+
+        # 解析JSON响应
+        response_data = response.json()
+
+        # 验证响应结构
+        if response_data.get("code") != "0" or not isinstance(response_data.get("data"), list):
+            print(f"无效的API响应结构: {response_data}")
+            return {}
+
+        config_list = response_data["data"]
+
+        # 返回第一条有效配置(保留原始HTML内容)
+        if config_list:
+            return {
+                "promptArticle": config_list[0].get("promptArticle", ""),
+                "promptRoute": config_list[0].get("promptRoute", ""),
+                "promptTravel": config_list[0].get("promptTravel", ""),
+                "promptLocation": config_list[0].get("promptLocation", "")  # 注意字段名拼写差异
+            }
+        return {}
+
+    except requests.exceptions.RequestException as e:
+        print(f"请求AI任务配置失败: {str(e)}")
+        return {}
+    except json.JSONDecodeError as e:
+        print(f"解析API响应JSON失败: {str(e)}")
+        return {}
+    except Exception as e:
+        print(f"获取AI任务配置发生未知错误: {str(e)}")
+        return {}
+
+def get_prompt(prompt_type):
+    """获取指定类型的提示模板
+    参数:
+        prompt_type: 提示类型,必须是DEFAULT_PROMPTS中定义的键
+
+    返回:
+        从API获取的提示模板,如果为空则返回默认模板
+    """
+    # 验证输入参数
+    if prompt_type not in DEFAULT_PROMPTS:
+        raise ValueError(f"无效的prompt类型: {prompt_type}")
+
+    # 获取配置
+    config = get_ai_task_config()
+
+    # 获取指定类型的提示,确保内容非空
+#     custom_prompt = config.get(prompt_type, "").strip()
+    custom_prompt = config.get(prompt_type)
+
+    # 更严格的空值检查
+    if custom_prompt is not None and str(custom_prompt).strip():
+        return str(custom_prompt).strip()
+    # 返回有效的提示模板
+    return custom_prompt if custom_prompt else DEFAULT_PROMPTS[prompt_type]
 
 def generate_xiaohongshu_article(film_name, locations):
     """生成小红书风格的文章"""
+    prompt = get_prompt("promptArticle").format(film_name=film_name)
     try:
-        prompt = f"""请为电影《{film_name}》的拍摄地写一篇小红书风格的文章。要求:
-1. 标题要吸引人,包含电影名称和拍摄地
-2. 开头要吸引人,可以用电影中的经典台词或场景引入
-3. 详细介绍每个拍摄地点的特色和亮点
-4. 包含实用的参观建议和交通信息
-5. 使用emoji表情增加趣味性
-6. 最后要有总结和推荐
-7. 添加相关标签
-
-请以html格式返回,包含标题、正文和标签.生成内容字体要符合在小程序上合适的大小阅读,标题不要超过h3。"""
-
         completion = client.chat.completions.create(
             model="bot-20250512103613-6rwj8",
             messages=[
@@ -44,35 +187,8 @@
 
 def generate_travel_route(film_name, locations):
     """生成游玩路线"""
+    prompt = get_prompt("promptRoute").format(film_name=film_name)
     try:
-        prompt = f"""请为电影《{film_name}》的拍摄地设计一条最优游玩路线。要求:
-1. 考虑各个景点之间的距离和交通方式
-2. 合理安排游览顺序,避免来回奔波
-3. 预估每个景点的游览时间
-4. 提供具体的交通建议
-5. 考虑用餐和休息时间
-6. 提供备选方案
-
-请以JSON格式返回,格式如下:
-{{
-    "route_name": "路线名称",
-    "total_time": "预计总时间",
-    "stops": [
-        {{
-            "location_name": "地点名称",
-            "visit_time": "建议游览时间",
-            "transportation": "前往下一个地点的交通方式",
-            "tips": "游览建议"
-        }}
-    ],
-    "alternative_routes": [
-        {{
-            "route_name": "备选路线名称",
-            "description": "路线说明"
-        }}
-    ]
-}}"""
-
         completion = client.chat.completions.create(
             model="bot-20250512103613-6rwj8",
             messages=[
@@ -95,18 +211,8 @@
 
 def generate_xiaohongshu_route(film_name, locations):
     """生成小红书风格的路线攻略"""
+    prompt = get_prompt("promptTravel").format(film_name=film_name)
     try:
-        prompt = f"""请为电影《{film_name}》的拍摄地写一篇小红书风格的路线攻略。要求:
-1. 标题要吸引人,突出"最佳路线"或"完美行程"等关键词
-2. 开头要说明这条路线是如何规划的,为什么这样安排
-3. 详细介绍每个景点的游览时间和交通方式
-4. 使用emoji表情增加趣味性
-5. 提供实用的时间安排建议
-6. 包含备选路线方案
-7. 最后要有总结和注意事项
-8. 添加相关标签
-
-请以html格式返回,包含标题、正文和标签,生成内容字体要符合在小程序上合适的大小阅读,标题不要超过h3。"""
 
         completion = client.chat.completions.create(
             model="bot-20250512103613-6rwj8",
@@ -123,7 +229,7 @@
 
 def get_film_works():
     try:
-        url = "http://192.168.1.213:8090/flower/api/filmWorks/pending/create"
+        url = "http://14.103.144.28:8090/flower/api/filmWorks/pending/create"
         response = requests.get(url)
         if response.status_code == 200:
             return response.json().get("data", [])
@@ -137,44 +243,8 @@
 
 def get_location_info_from_model(film_name):
     """使用模型获取多个拍摄地点信息"""
+    prompt = get_prompt("promptLocation").format(film_name=film_name)
     try:
-        prompt = f"""请为电影《{film_name}》生成所有主要拍摄地点的详细信息。每部电影通常有多个拍摄地点,请尽可能详细地列出所有重要的拍摄地点。
-
-对于每个拍摄地点,请提供以下信息:
-1. 拍摄地点名称
-2. 详细地址
-3. 场景类型
-4. 经典画面描述
-5. 是否开放参观
-6. 参观提示
-7. 地标性建筑描述
-8. 交通指引说明
-9. 停车场信息
-10. 周边设施描述
-
-请以JSON数组格式返回,格式如下:
-[
-    {{
-        "locationName": "地点1名称",
-        "address": "地点1详细地址",
-        "gpsLat": "纬度坐标(精确到小数点后6位)",
-        "gpsLng": "经度坐标(精确到小数点后6位)",
-        "sceneType": "场景类型",
-        "classicScene": "经典画面描述",
-        "isOpenVisit": 0或1,
-        "visitInfo": "参观提示",
-        "landmarkDesc": "地标描述",
-        "transportGuide": "交通指引",
-        "parkingInfo": "停车信息",
-        "surroundingFacilities": "周边设施"
-    }},
-    {{
-        "locationName": "地点2名称",
-        ...
-    }}
-]
-
-请确保返回所有重要的拍摄地点,每个地点都要包含完整的信息。"""
         # Non-streaming:
         print("----- standard request -----")
         completion = client.chat.completions.create(
@@ -221,7 +291,7 @@
 
 def create_film_location(film_id, film_name, location_info, article, route_article):
     try:
-        url = "http://192.168.1.213:8090/flower/api/filmLocation/new"
+        url = "http://14.103.144.28:8090/flower/api/filmLocation/new"
 
         # 默认值设置
         default_data = {
@@ -294,7 +364,7 @@
     except Exception as e:
         print(f"保存文件失败: {str(e)}")
 
-def main():
+def process_films():
     # 获取所有电影作品
     try:
         film_works = get_film_works()
@@ -343,7 +413,7 @@
                 
                 # 保存到新接口
                 try:
-                    save_url = "http://192.168.1.213:8090/flower/api/filmWorks/edit"
+                    save_url = "http://14.103.144.28:8090/flower/api/filmWorks/edit"
                     save_data = {
                         "id": film_id,
                         "type": "sys",
@@ -373,6 +443,8 @@
             print(f"处理电影 {film.get('nameCn', '未知电影')} 时发生错误: {str(e)}")
             continue
 
+def main():
+   process_films()
 
-if __name__ == "__main__":
-    main()
\ No newline at end of file
+# if __name__ == "__main__":
+#     main()
\ No newline at end of file

--
Gitblit v1.9.3