当前位置: 首页 > 知识库问答 >
问题:

优酷 API 请求凭据

童铭晨
2023-03-14

我创建了一个使用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)

尝试使用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">

证据这是可以做到的

oauth2client.service_account。ServiceAccountCredentials类仅用于OAuth 2.0服务帐户。这些服务器到服务器API调用不涉及最终用户,因此您可以直接创建此对象,而无需使用Flow对象。

youtube api Oauth流文档

https://developers . Google . com/identity/protocols/oauth 2 # service account

共有1个答案

梁宪
2023-03-14

问题是,大多数YouTube数据都是私人用户数据。由于这是私人用户数据,因此您必须作为有权访问相关数据的用户进行身份验证,才能访问该数据。为此,我们使用Oauth2并登录到我们的帐户,获取访问令牌和返回的刷新令牌。

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

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

你应该做的,我过去做过很多次的是对你的代码进行一次身份验证。获取刷新令牌并保存它。将来,每当你想运行你的应用程序时,你只需使用刷新令牌请求一个新的访问令牌,你就可以访问api。你不必手动输入你的登录名和密码,并同意访问。一切都可以在后台使用refesh令牌完成。

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

我不是蟒蛇开发人员,但发现了这一点

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来检索基于Youtube搜索查询的结果。 我已经创建了我的OAuth凭证,并拥有一个client_secrets JSON。每次我运行我的python程序时,它总是要求我获得一个授权密钥,这样我就可以进行查询。我必须打开chrome,找到API给我的URL,登录我的谷歌账户,粘贴密钥。 有人能证明我如何使这个过程自动化吗?我在

  • 如何设置与凭据=真到返回promise。以下内容是否正确: 我认为MDN文档讨论了http请求的所有内容,除了这一点:

  • 优酷土豆路由宝L1固件下载 youku rom downloads rom版本 正式版硬件 公测版硬件 2.0.0629.54182 下载 下载 1.5.0507.51292 下载 1.5.0421.50378 下载 1.5.0417.50253 下载 下载 1.5.0327.49004 下载 1.5.0327.48994 下载 1.5.0320.48610 下载 1.5.0211.47252 下

  • 我在玩谷歌YouTube API Java客户端库。我已经编写了一个Spring Boot服务,您可以使用Spring Security OAuth使用您的Google帐户登录。这一切都很好。 现在,在RESTendpoint方法中,我有类似的东西 其中实例是的实例。 理想情况下,我希望我的服务使用登录用户的凭据进行YouTube API调用,但我无法弄清楚如何从给定的实例构建实例。 我知道我可以

  • 问题内容: 我正在寻找使用Windows用户调用应用程序的系统凭据在Go HTTP请求中进行NTLM身份验证的阻力最小的路径。 在C#/。NET中,我将能够通过 在Python中,可以通过以下方式获得等效结果 但我无法找到有关如何在Go中执行相同操作的任何资源。我当然可以使用一个库进行NTLM身份验证,并手动提供用户名/密码,但是这里的目标是避免将它们输入。 问题答案: 在进一步深入研究之后,看起

  • 问题内容: 我想知道如何一次获取多个GET URL,然后将获取的JSON数据放入我的React DOM元素中。 这是我的代码: 但是,我想从服务器中获取其他JSON数据,然后使用传递到其中的所有这些JSON数据呈现我的ReactDOM。例如: 这可能吗?如果不是,将多个JSON数据提取到我的渲染ReactDOM元素中的其他解决方案是什么? 问题答案: 您可以在解决方案之前依靠Promises来执行