每10分钟更新一次YouTube缩略图的Python代码在大约一小时后失败。我需要使用刷新令牌吗?

2024-06-07 07:34:43 发布

您现在位置:Python中文网/ 问答频道 /正文

所以,今天早些时候,我在YouTube上做了一个实验,每10分钟更新一次缩略图。因此,我的Python代码基于youtube.thumbnails.set()上Google开发者页面的代码示例:https://developers.google.com/youtube/v3/docs/thumbnails/set

我的代码如下所示:

def doCredentialStuff():
    global youtube
    global flow
    os.environ["OAUTHLIB_INSECURE_TRANSPORT"] = "1"

    # Get credentials and create an API client
    flow = google_auth_oauthlib.flow.InstalledAppFlow.from_client_secrets_file(
        client_secrets_file, scopes)
    credentials = flow.run_console(access_type='offline')
    youtube = googleapiclient.discovery.build(
        api_service_name, api_version, credentials=credentials)

def updateYTthumb(filename):
    try:
        request = youtube.thumbnails().set(
            videoId=VIDEO_ID_UPLOAD,media_body=MediaFileUpload(filename))
        response = request.execute()
        print(response)
    except Exception as exc:
        print("ERROR!!!! I got this exception: "+str(exc)+" at time "+str(time.time()))

出于我的目的,我想每10分钟上传一次缩略图。因此,在开始运行代码时,我只运行一次doCredentials()。然后,每隔10分钟,我重新运行updateYTthumb(),它将在其中实际执行请求。(本部)

它适用于2到12次迭代!(20-120分钟)。但是,如果我让它保持足够长的时间,它最终总会返回以下错误:

 [WinError 10053] An established connection was aborted by the software in your host machine

我不确定如何修复此问题:

  • 我是否应该在doCredentialStuff()中的某个地方获得一个刷新令牌,然后在updateYTthumb()期间使用它

Tags: 代码clienttimeyoutubedefgoogleflowglobal
3条回答

基本文档w.r.t.授权为OAuth 2.0 for Mobile & Desktop Apps

这个docspecifies表示在OAuth流上,您将收到一个短期访问令牌和一个长期刷新令牌

Calling Google APIs节指定使用访问令牌可以发出需要授权的API调用(就像您的API调用一样)。第Refreshing an access token节指定访问令牌定期过期

因此,每次当前的访问令牌失效(即过期)时,您都必须使用之前收到的刷新令牌(除了用户explicitly revoked之外,该令牌根本不会过期)与API交换一个新的访问令牌

错误是说您的计算机上有东西中断了连接,下面是一些您可以尝试的事情:

  • 更新您的google api python客户端
  • 禁用你的防病毒软件
  • 禁用防火墙

尝试使用crontab来完成这样及时的操作

相关问题 更多 >