在 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_token
、access_token
、id_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()
我有一个 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_token
、access_token
、id_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()