Youtube 成绩单 API 无法在服务器上运行

问题描述 投票:0回答:1

我有一个 Django Web 应用程序。 该代码在本地主机上运行得很好,但当我在云(DigitalOcean)应用程序平台上运行它时停止工作。

from youtube_transcript_api import YouTubeTranscriptApi, TranscriptsDisabled, NoTranscriptFound, VideoUnavailable

def transcribe(video_url):
    video_id = video_url.split("v=")[-1]
    logger.debug("Extracted video ID: %s", video_id)

    try:
        transcript_list = YouTubeTranscriptApi.list_transcripts(video_id)
        transcript = None
        for transcript_info in transcript_list:
            try:
                transcript = transcript_info.fetch()
                break
            except Exception as e:
                logger.warning("Error fetching transcript: %s", e, exc_info=True)
                continue
        if transcript is None:
            logger.error("No transcripts available for this video.")
            return "No transcripts available for this video."
    except TranscriptsDisabled as e:
        logger.error("Transcripts are disabled for this video. %s", e, exc_info=True)
        return "Transcripts are disabled for this video."
    except NoTranscriptFound:
        logger.error("No transcript found for this video.")
        return "No transcript found for this video."
    except VideoUnavailable:
        logger.error("Video is unavailable.")
        return "Video is unavailable."
    except Exception as e:
        logger.error("Error in fetching transcript: %s", e, exc_info=True)
        return "Error in fetching transcript."
    
    # Concatenate all text from the transcript into a single string
    transcription_text = ' '.join([item['text'] for item in transcript])
    logger.debug("Transcription text (first 50 characters): %s", transcription_text[:50])

    return transcription_text

引发异常的部分是

transcript_list = YouTubeTranscriptApi.list_transcripts(video_id)
行。

它会抛出一个

TranscriptsDisabled
异常,表示

该视频禁用文字记录。

但我确实知道视频有文字记录,并且如上所述,代码在本地主机上运行得很好。

花了两天时间并尝试了几乎所有我能想到的方法后,我仍然没有解决这个神秘的问题。有谁经历过同样的事情并设法以某种方式解决它吗?

python python-3.x django django-views youtube-api
1个回答
0
投票

此错误是因为您没有使用代理来处理您的请求,当您从服务器发出请求时,您的 IP 地址可能会被 YouTube 阻止。 您可以尝试在 youtube-transcript-api 配置中添加代理并告知我们。

© www.soinside.com 2019 - 2024. All rights reserved.