gpt4 book ai didi

python - Youtube API 请求凭据

转载 作者:太空狗 更新时间:2023-10-29 17:33:58 24 4
gpt4 key购买 nike

我创建了一个使用 Youtube api 的 python 应用程序(所以示例是在 python 中,但并不重要,概念应该是相同的)。我设法让它在我可以连接和进行 api 调用的地方工作。但是,当我连接到 api 时,我必须定义一个流程来检查凭证存储文件是否存在。如果没有,那么我必须使用流程手动登录。登录文件 (main.py-oauth2.json) 后,使用 token 创建。我希望能够下载凭据而无需手动登录。我希望有一种方法可以为该 token 发出 POST 请求,就像我看到的那样 here ,但我已经能够使用 Youtube api 做到这一点。有谁知道如何实现所需的功能?

主要.py

flow = flow_from_clientsecrets(CLIENT_SECRETS_FILE,
scope=YOUTUBE_UPLOAD_SCOPE,
message=MISSING_CLIENT_SECRETS_MESSAGE)
storage = Storage(OAUTH_CREDENTIALS)

credentials = storage.get()

if credentials is None or credentials.invalid:
# manual / UI login
credentials = run_flow(flow, storage, args)

尝试使用 Google 服务帐户会在上传时引发 401 错误。

credentials = Credentials.from_service_account_file(
SERVICE_ACCOUNT_FILE, scopes=YOUTUBE_UPLOAD_SCOPES)

if credentials is None or credentials.expired:
raise ValueError('Invalid credentials')

return build(YOUTUBE_API_SERVICE_NAME, YOUTUBE_API_VERSION,
credentials=credentials)
...
status, response = insert_request.next_chunk()
# <HttpError 401 "Unauthorized">

证明这是可以做到的

The oauth2client.service_account.ServiceAccountCredentials class is only used with OAuth 2.0 Service Accounts. No end-user is involved for these server-to-server API calls, so you can create this object directly without using a Flow object.

youtube api Oauth flow docs

https://developers.google.com/identity/protocols/OAuth2#serviceaccount

最佳答案

问题是大多数 YouTube 数据都是私有(private)用户数据。由于它是私有(private)用户数据,因此您必须通过身份验证才能访问相关数据。为此,我们使用 Oauth2 并登录到我们的帐户并获取访问 token 和返回的刷新 token 。

访问 token 可用于从 Youtube Api 请求数据,刷新 token 可用于在访问 token 过期(一小时后)时请求新的访问 token

通常我会说您应该考虑使用服务帐户。服务帐户是虚拟用户,可以预先配置为访问用户数据。很遗憾,Youtube api 不支持服务帐户。

你应该做的和我过去做过很多次的是验证你的代码一次。获取刷新 token 并保存。将来,无论何时您希望运行您的应用程序,您只需使用刷新 token 来请求一个新的访问 token ,您就可以访问该 API。您无需手动输入登录名和密码并同意访问,一切都可以使用刷新 token 在后台完成。

注意:您需要注意,在某些情况下可能会导致刷新 token 过期,但在大多数情况下,只要您继续定期使用它们,您就不必担心它们是好的。

我不是 python 开发人员但发现了这个

from oauth2client import client, GOOGLE_TOKEN_URI

CLIENT_ID = "client_id"
CLIENT_SECRET = "client_secret"
REFRESH_TOKEN = "refresh_token"


credentials = client.OAuth2Credentials(
access_token = None,
client_id = CLIENT_ID,
client_secret = CLIENT_SECRET,
refresh_token = REFRESH_TOKEN,
token_expiry = None,
token_uri = GOOGLE_TOKEN_URI,
token_ id = None,
revoke_uri= None)

http = credentials.authorize(httplib2.Http())

关于python - Youtube API 请求凭据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53531822/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com