Почему мой 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 основан на веб-скреппинге, и поэтому может вызывать проблемы