AJ_*_*AJ_ 13 python google-api youtube-api oauth-2.0 youtube-data-api
我创建了一个使用Youtube api的python应用程序(所以示例是在python中,但实际上并不重要,概念应该是相同的).我设法让它在我可以连接的地方工作并进行api调用.但是,当我连接到api时,我必须定义一个流程来检查凭证存储文件是否存在.如果没有,那么我必须使用流程手动登录.登录文件(main.py-oauth2.json)后,使用令牌创建.我希望能够下载凭证,而无需手动登录.我希望有一种方法可以为该令牌发出POST请求,就像我在这里看到的那样,但我已经能够使用Youtube进行此操作API.有谁知道如何实现所需的功能?
main.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)
Run Code Online (Sandbox Code Playgroud)
尝试使用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">
Run Code Online (Sandbox Code Playgroud)
证据可以做到这一点
oauth2client.service_account.ServiceAccountCredentials类仅用于OAuth 2.0服务帐户.这些服务器到服务器API调用不涉及最终用户,因此您可以直接创建此对象而无需使用Flow对象.
https://developers.google.com/identity/protocols/OAuth2#serviceaccount
问题是大多数YouTube数据都是私人用户数据.由于它是私人用户数据,因此您必须作为有权访问相关数据才能访问的用户进行身份验证.为此,我们使用Oauth2并登录到我们的帐户并获取访问令牌和返回的刷新令牌.
访问令牌可用于从Youtube Api请求数据,刷新令牌可用于在访问令牌到期时请求新的访问令牌(一小时后)
通常我会说你应该考虑使用服务帐户.服务帐户是虚拟用户,可以预先配置访问用户数据.不幸的是,Youtube api不支持服务帐户.
您应该做的以及我过去多次做过的事情就是验证您的代码一次.获取刷新令牌并保存.将来,只要您希望运行应用程序,只需使用刷新令牌来请求新的访问令牌,您就可以访问api.您不必手动输入您的登录名和密码并同意访问权限,可以使用refesh令牌在后台完成所有操作.
注意:您需要观察它有一些可能导致刷新令牌过期的情况,但只要您继续经常使用它们,您就不必担心它们的好处.
我不是一个python dev但是发现了这个
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())
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
820 次 |
最近记录: |