Почему мой API транскриптов youtube работает только в non-prod, но не в prod?

В моей непроизводственной среде я могу использовать API транскрипта youtube для получения транскрипта.

В моей производственной среде, после долгих отладок и ведения журналов, я не могу этого сделать. Вот журналы:

Я знаю, что мой код в порядке, так как он работает в непроизводственной среде.

def generate_youtube_summary(video_url, custom_form_options=None):
    logger.info(f"Generating summary for video URL: {video_url}")

    connectivity_results = test_youtube_connectivity()
    if not (connectivity_results["dns_resolution"] and connectivity_results["connection_status"]):
        logger.error("YouTube connectivity check failed. Details: %s", connectivity_results)
        return "Unable to connect to YouTube. Please check your internet connection and try again."

    logger.info(f"Attempting to connect to: {urlparse(video_url).netloc}")

    video_id = None
    if 'youtu.be/' in video_url:
        video_id = video_url.split('youtu.be/')[1]
    elif 'youtube.com/watch?v=' in video_url:
        video_id = video_url.split('v=')[1]
    elif 'youtube.com/embed/' in video_url:
        video_id = video_url.split('embed/')[1]

    logger.info(f"Extracted video ID: {video_id}")

    if video_id:
        try:
            transcript_list = YouTubeTranscriptApi.list_transcripts(video_id)
            logger.info(f"Retrieved transcript list for video ID: {video_id}")

            transcript = transcript_list.find_transcript(['en'])
            logger.info("Found English transcript")

            transcript_data = transcript.fetch()
            logger.info("Fetched transcript data")

            transcript_text = ' '.join([entry['text'] for entry in transcript_data])
            logger.info(f"Extracted transcript text (first 100 chars): {transcript_text[:100]}...")

            summary_prompt = f"""
            <role>YouTube Video Summarizer</role> """
            logger.info("Sending summary prompt to process_text function")

            summary = process_text(summary_prompt)
            logger.info(f"Received summary from process_text (first 100 chars): {summary[:100]}...")

            return summary
        except Exception as e:
            logger.error(f"Error generating YouTube summary: {str(e)}", exc_info=True)
            if "TranscriptsDisabled" in str(e):
                return "Unable to generate summary. Subtitles are disabled for this video."
            elif "NoTranscriptFound" in str(e):
                return "No transcript found for this video. It may not have subtitles available."
            else:
                return f"Failed to generate video summary. Error: {str(e)}"
    else:
        logger.warning(f"Invalid YouTube video URL: {video_url}")
        return "Invalid YouTube video URL. Please provide a valid URL."

Согласно логам и тому факту, что мой API openAI работает, это не может быть проблемой сети.

Помимо решения этой проблемы, мне очень интересно, почему так происходит?

Отладка / ведение журнала

проверка сетевых настроек

Примечание в нем говорится, что субтитры отключены для этого видео, однако я могу подтвердить, что это не так - похоже, что это общее сообщение об ошибке, бросаемое на любое видео.

Вполне вероятно, что это связано с сетевой проблемой конкретно с YouTube, как видно в этой проблеме на Github, а также здесь: Ошибка при получении транскрипта YouTube с помощью YouTubeTranscriptApi на сервере, но работает локально. Попробуйте использовать прокси или назначить новый IP для машины, используемой в производстве, и убедитесь, что версии библиотек совпадают в обеих средах - API основан на веб-скреппинге, и поэтому может вызывать проблемы

Вернуться на верх