Browse Source

请求增加代理,gemini增加失败重试

zhangliang 1 week ago
parent
commit
c0699dd830
3 changed files with 70 additions and 54 deletions
  1. 8 2
      utils/dy_ks_get_url.py
  2. 57 48
      utils/google_ai_studio.py
  3. 5 4
      utils/tts_help.py

+ 8 - 2
utils/dy_ks_get_url.py

@@ -16,6 +16,10 @@ from utils.feishu_utils import Feishu
 
 
 class Dy_KS:
+    proxies = {
+        'http': 'http://brd-customer-hl_df373111-zone-data_center:6kr5yzd7q6dw@brd.superproxy.io:33335',
+        'https': 'http://brd-customer-hl_df373111-zone-data_center:6kr5yzd7q6dw@brd.superproxy.io:33335'
+    }
 
     @classmethod
     def get_text_dy_video(cls,url):
@@ -41,7 +45,8 @@ class Dy_KS:
                         'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) '
                                       'Chrome/127.0.0.0 Safari/537.36',
                     }
-                    response = requests.request(url=url, method='GET', headers=headers, allow_redirects=False, timeout=30)
+                    response = requests.request(url=url, method='GET', headers=headers, allow_redirects=False, timeout=30,
+                                                proxies=cls.proxies)
                     logger.info(f"请求{url}响应:{response}")
                     location = response.headers.get('Location', None)
                     match = re.search(r'/video/(\d+)/?', location.split('?')[0] if location else url)
@@ -90,7 +95,8 @@ class Dy_KS:
                 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) '
                               'Chrome/127.0.0.0 Safari/537.36',
             }
-            response = requests.request(url=url, method='GET', headers=headers, allow_redirects=False, timeout= 30)
+            response = requests.request(url=url, method='GET', headers=headers, allow_redirects=False, timeout= 30,
+                                        proxies=cls.proxies)
             logger.info(f"请求{url}响应:{response}")
             location = response.headers.get('Location', None)
             if location == "https://kuaishou.com/":

+ 57 - 48
utils/google_ai_studio.py

@@ -38,55 +38,64 @@ class GoogleAI(object):
 
     @classmethod
     def run(cls, api_key, video_path):
-        try:
-            genai.configure(api_key=api_key)
-            video = genai.upload_file(path=video_path, mime_type='video/mp4')
-            while video.state.name == 'PROCESSING':
-                time.sleep(1)
-                video = genai.get_file(name=video.name)
-            if video.state.name != 'ACTIVE':
+        max_retries = 3  # 最大重试次数
+        for retry in range(max_retries):
+            try:
+                genai.configure(api_key=api_key)
+                video = genai.upload_file(path=video_path, mime_type='video/mp4')
+                while video.state.name == 'PROCESSING':
+                    time.sleep(1)
+                    video = genai.get_file(name=video.name)
+                if video.state.name != 'ACTIVE':
+                    genai.delete_file(name=video.name)
+                    return
+                # 定义 response_schema
+                response_schema = {
+                    "type": "object",
+                    "properties": {
+                        "text": {
+                            "type": "string"
+                        }
+                    },
+                    "required": ["text"]
+                }
+                model = genai.GenerativeModel(
+                    model_name='gemini-1.5-flash',
+                    generation_config=genai.GenerationConfig(response_mime_type='application/json',
+                                                             response_schema=response_schema),
+                    safety_settings={
+                        HarmCategory.HARM_CATEGORY_SEXUALLY_EXPLICIT: HarmBlockThreshold.BLOCK_NONE,
+                    },
+                )
+                response = model.generate_content(
+                    contents=[
+                        video,
+                        '你是一名专业的短视频分析师,请你输出这个视频的完整口播,只输出文字即可。使用以下JSON格式输出,不要包含任何额外的解释、注释或非JSON文本:{"text": string}',
+                    ],
+                    stream=False,
+                    request_options={
+                        'timeout': 600,
+                    },
+                )
+                # 打印响应内容用于调试
+                logger.info(f"[+] 响应内容: {response.text}")
+                # 使用通用 JSON 解析函数解析响应
+                text = parse_general_json(response.text, key='text')
+                if text is None:
+                    return
+                # text = orjson.loads(response.text.strip())['text']
                 genai.delete_file(name=video.name)
-                return
-            # 定义 response_schema
-            response_schema = {
-                "type": "object",
-                "properties": {
-                    "text": {
-                        "type": "string"
-                    }
-                },
-                "required": ["text"]
-            }
-            model = genai.GenerativeModel(
-                model_name='gemini-1.5-flash',
-                generation_config=genai.GenerationConfig(response_mime_type='application/json',
-                                                         response_schema=response_schema),
-                safety_settings={
-                    HarmCategory.HARM_CATEGORY_SEXUALLY_EXPLICIT: HarmBlockThreshold.BLOCK_NONE,
-                },
-            )
-            response = model.generate_content(
-                contents=[
-                    video,
-                    '你是一名专业的短视频分析师,请你输出这个视频的完整口播,只输出文字即可。使用以下JSON格式输出,不要包含任何额外的解释、注释或非JSON文本:{"text": string}',
-                ],
-                stream=False,
-                request_options={
-                    'timeout': 600,
-                },
-            )
-            # 打印响应内容用于调试
-            logger.info(f"[+] 响应内容: {response.text}")
-            # 使用通用 JSON 解析函数解析响应
-            text = parse_general_json(response.text, key='text')
-            if text is None:
-                return
-            # text = orjson.loads(response.text.strip())['text']
-            genai.delete_file(name=video.name)
-            return text
-        except Exception as e:
-            logger.error(f"[内容分析] 处理异常, 异常类型: {type(e).__name__}, 异常信息: {e}\n{traceback.format_exc()}")
-            return
+                return text
+            except Exception as e:
+                # 异常处理逻辑(添加重试延迟和日志)
+                logger.error(
+                    f"[内容分析] 第 {retry + 1}/{max_retries} 次尝试失败, 异常信息: {e}\n{traceback.format_exc()}")
+                if retry < max_retries - 1:  # 非最后一次重试,等待后继续
+                    time.sleep(2 ** retry)  # 指数退避延迟(1s, 2s, 4s)
+                else:  # 最后一次重试失败,返回失败标识
+                    genai.delete_file(name=video.name) if 'video' in locals() else None
+                    logger.error("[内容分析] 已耗尽重试次数,任务失败")
+                    return
 
 
 if __name__ == '__main__':

+ 5 - 4
utils/tts_help.py

@@ -222,12 +222,12 @@ if __name__ == '__main__':
     voice = "zhifeng_emo"
     localpath = "/Users/zhangliang/Downloads/47f26a"
     # pw_srt_text = "讲述张鹏程校长爷爷的故事,不仅让人感动,更让我们看到教育的力量和责任。这样的故事值得让更多人知道,您可以通过下方黄色按钮,把这段感人的视频分享至您的家庭群、老乡群、朋友群,让身边的人一同感受这份温暖和感动。每一次转发,都是在传递这份爱与责任。也请您点击下方绿色按钮,发给三五个好友,尤其是那些有孩子的朋友们,让他们也了解到这位校长爷爷的无私奉献。张鹏程用自己的行动告诉我们,教育不仅仅是知识的传授,更是心灵的关怀,让孩子们在爱的环境中健康成长。您分享一次,可能会启发更多人,让我们共同传递这份爱心,让更多孩子在爱的阳光下茁壮成长。请立即行动起来,分享这个故事,让更多的人加入到关心教育、关爱孩子的行列中来。每一次转发,都是在为孩子们的未来贡献一份力量。让我们一起把这份美好传播开去!"
-    # pw_srt_text = "生活中总有一些故事能让我们感受到温暖和智慧,赵元任的传奇经历就是这样一个值得分享的好故事。各位朋友,看到这里请您立即点击下方的黄色按钮,把这个视频分享至您所在的家庭群、邻里群和兴趣群,让更多人了解这位天才的事迹,激励我们每一个人追求更好的生活。同时,也请您点击绿色按钮,直接发给您身边的朋友们,让他们一起感受这份智慧。每一次分享,都是在传播正能量,鼓励更多人去探索和学习。赵元任不仅是一位语言天才,更是教育的先行者,他用自己的方式告诉我们,学习不仅要有趣,更要通过实践来获得真正的成长。您觉得这条视频内容对您有帮助吗?如果有,请不要犹豫,赶紧分享给更多的朋友和群组,让这些感人的故事温暖每一个人的心。您的每一次分享,都是在让更多人了解到知识的力量和爱的深沉。让我们一起在这个温暖的秋季,传播智慧,分享爱,携手共进,创造更美好的未来!"
+    pw_srt_text = "生活中总有一些故事能让我们感受到温暖和智慧,赵元任的传奇经历就是这样一个值得分享的好故事。各位朋友,看到这里请您立即点击下方的黄色按钮,把这个视频分享至您所在的家庭群、邻里群和兴趣群,让更多人了解这位天才的事迹,激励我们每一个人追求更好的生活。同时,也请您点击绿色按钮,直接发给您身边的朋友们,让他们一起感受这份智慧。每一次分享,都是在传播正能量,鼓励更多人去探索和学习。赵元任不仅是一位语言天才,更是教育的先行者,他用自己的方式告诉我们,学习不仅要有趣,更要通过实践来获得真正的成长。您觉得这条视频内容对您有帮助吗?如果有,请不要犹豫,赶紧分享给更多的朋友和群组,让这些感人的故事温暖每一个人的心。您的每一次分享,都是在让更多人了解到知识的力量和爱的深沉。让我们一起在这个温暖的秋季,传播智慧,分享爱,携手共进,创造更美好的未来!"
     # pw_srt_text = "在这个充满温情与希望的故事中,张鹏程老师用自己的行动改变了无数孩子的命运,您是否也想为这样的善举点赞呢?请您现在就点击下方黄色按钮,分享到您的家庭群、同学群和社区群,让更多人看到张老师的感人故事,感受到教育的力量。同时,别忘了点击绿色按钮,将这份感动分享给您的好友,让他们也能一起传递这份爱与责任。每一次转发,都是对张鹏程老师的支持,也是对无数孩子未来的关注。您知道吗?这样的故事值得让更多人听到,让更多人感受到教育的温暖和希望。每一个孩子都值得被关爱,他们的未来需要我们共同的努力和关心。转发这个视频,或许就能激励更多人加入到关爱贫困儿童的行列中来,赶紧分享给更多的朋友和群组"
-    pw_srt_text="每一句老话都蕴含着深深的智慧,想必大家看完这个视频后也有很多感触。请您马上点击下方黄色按钮,把这段珍贵的内容分享给您的微信群,让更多的人一起感受这些老祖宗的智慧,让我们的社区更加和谐。也别忘了点击绿色按钮,选几个亲密的朋友,单独发给他们,让大家都来思考一下这些道理。生活中,有些真理是我们需要时刻铭记的,尤其是对于我们的晚年生活来说,能帮助我们更好地面对生活的挑战。每一个分享,都是在传递这份智慧,让更多的人受益。您想想,如果大家都能明白这些道理,生活会变得多么美好。现在就动手,让这段视频在您的朋友圈传开,转发到家庭群、邻里群、老友群,让每个人都能感受到这份智慧的力量。您转发一次,就是在为大家的生活添砖加瓦,让我们共同努力,让这份智慧传播得更远。"
+    # pw_srt_text="每一句老话都蕴含着深深的智慧,想必大家看完这个视频后也有很多感触。请您马上点击下方黄色按钮,把这段珍贵的内容分享给您的微信群,让更多的人一起感受这些老祖宗的智慧,让我们的社区更加和谐。也别忘了点击绿色按钮,选几个亲密的朋友,单独发给他们,让大家都来思考一下这些道理。生活中,有些真理是我们需要时刻铭记的,尤其是对于我们的晚年生活来说,能帮助我们更好地面对生活的挑战。每一个分享,都是在传递这份智慧,让更多的人受益。您想想,如果大家都能明白这些道理,生活会变得多么美好。现在就动手,让这段视频在您的朋友圈传开,转发到家庭群、邻里群、老友群,让每个人都能感受到这份智慧的力量。您转发一次,就是在为大家的生活添砖加瓦,让我们共同努力,让这份智慧传播得更远。"
     # TTS.get_pw_zm(pw_srt_text, voice)
-    pw_srt = TTS.get_lone_pw_zm(pw_srt_text, voice,localpath)
-    print(pw_srt)
+    # pw_srt = TTS.get_lone_pw_zm(pw_srt_text, voice,localpath)
+    # print(pw_srt)
     # print(len(pw_srt_text))
     # {'code': 0, 'msg': 'success',
     #  'data': 'http://clipres.yishihui.com/longvideo/crawler/voice/prod/20250516/7bb5e293a0af43b38701419e28a5e3c11747364158315.mp3',
@@ -235,4 +235,5 @@ if __name__ == '__main__':
 
     # mp3_id = "http://clipres.yishihui.com/longvideo/crawler/voice/prod/20250516/7bb5e293a0af43b38701419e28a5e3c11747364158315.mp3"
     # # mp3_id = "http://nls-cloud-cn-shanghai.oss-cn-shanghai.aliyuncs.com/jupiter-flow/tmp/f02e0751b96b4f4ea03d877e11fee4ae.wav?Expires=1747970050&OSSAccessKeyId=LTAI4G588hXC7P47wauY5e2K&Signature=u8Cn2WKpSv7xlmMWDy4Vzos1nV0%3D"
+    # mp3_id = "http://clipres.yishihui.com/longvideo/crawler/longvoice/prod/20250516/47e9c7a769ac4a44a3e14d73ded2e49f.mp3"
     # print(TTS.getSrt(mp3_id))