在 Python 桌面应用程序中保留 Youtube 数据 API 访问令牌

Persist Youtube Data API access token in Python desktop app

我有一个 Python 应用程序可以访问 Youtube-Data-API v3.

程序运行一个小时后,抛出提示访问令牌已过期的错误。

如何才能将令牌保存更长时间?

当您创建 O-Auth2 凭据时,您需要 select "Web App" 我认为您正在尝试创建。 (一个网站,对吗?)。

"Desktop-App" 选项用于制作桌面应用程序,而不是网站。

桌面应用程序和 Web 应用程序处理重定向 URI 的方式不同,这就是导致您出现问题的原因。

现在可以延长 access token 的时间。他们在一小时后过期。使用令牌的唯一方法是使用 api 提供的 refresh_token 获取新令牌。

首先,您在验证用户时通过将 access_type 设置为 offine 来获取离线令牌。

{
    'response_type': 'code',
    'client_id': 'client_id',
    'redirect_uri': '...',
    'access_type':'offline',
    'scope': 'https://www.googleapis.com/auth/youtube.readonly',
}

您将获得 refresh_tokenaccess_tokenid_token 以及 expiry 和一些其他字段,您可以将这些字段保存在数据库中并在需要时获取。

在使用 access_token 之前检查它是否有效

creds = google.oauth2.credentials.Credentials(access_token,refresh_token=refresh_token,id_token=id_token,token_uri=token_uri,client_id=client_id,client_secret=client_secret,scopes=scopes,expiry=expirytime)
if creds.valid == False:
  // Refresh to get the new token
  req =google.auth.transport.requests.Request()
  creds.refresh(req)
  // Now Save new Credentials from "creds" so that you can use later.

验证 access_token 后,您现在可以查询 youtube data api 个请求

youtube = googleapiclient.discovery.build(
    "youtube", "v3",credentials=creds)
req = youtube.videos().getRating(id="xxxxxxxxx")
resp =req.execute()