YouTube API - 使用 Google 管理员帐户访问多个 youtube 频道(品牌帐户)
Posted
技术标签:
【中文标题】YouTube API - 使用 Google 管理员帐户访问多个 youtube 频道(品牌帐户)【英文标题】:YouTube APIs - Access mutiple youtube channels (Brand Accounts) using Google Admin account 【发布时间】:2017-04-22 08:12:27 【问题描述】:我需要使用 YouTube 分析和报告 API 从视频中提取信息。
当我使用我的 Google 帐户登录 YouTube 时,我可以访问多个 YouTube 品牌帐户。
使用“试用”来测试 API,我只能在切换到该频道所属的品牌帐户后检索该频道的数据,否则我会收到 403 - Forbidden 错误。
有没有什么方法可以使用我用来登录的 Google 帐户提取数据?因为一旦我在开发者控制台中创建了凭据,它们就会与 Google 帐户相关联,而不是与品牌帐户相关联。
我的 Google 帐户在品牌帐户上有经理角色。
我已搜索要在请求中使用的 onBehalfOfContentOwner 字段,但我不知道如何获取此 ID,我不确定这是否适用于我的情况,因为我们谈论的是品牌帐户,如果我错了,请纠正我。
【问题讨论】:
【参考方案1】:就在两天前,我曾与此作斗争。事实证明这是可能的,只是没有记录,而且工作方式与您预期的有点不同:
在开发者控制台中创建凭据后,它们将与 Google 帐户相关联,而不是与品牌帐户相关联。
当我第一次尝试时,我也有同样的误解(甚至发现品牌帐户的 client_id)。事实证明,您不想使用品牌的 oauth 信息 - 您想使用自己的 client_id/client_secret 代表品牌帐户创建刷新令牌,然后使用它来创建身份验证令牌。
步骤:
-
使用您的主帐户通过https://console.developers.google.com/apis/credentials 创建一个oauth client_id 和client_secret
编辑您刚刚添加的 client_id/client_secret 条目,并将“https://developers.google.com/oauthplayground”添加到页面底部的“授权重定向 URI”中。
我们将以惰性方式创建刷新令牌。转至https://developers.google.com/oauthplayground/
点击右上角的齿轮并将访问类型设置为“离线”,然后点击“使用您自己的 OAuth 凭据”并输入您在步骤 1 中创建的 client_id 和 client_secret。
选择您要授予其访问权限的范围。点击授权 API。
神奇之处在于:您现在会被要求“选择一个帐户”。在此处选择您要访问的品牌帐户,而不是您的主帐户。由于您有权访问它,即使您使用自己的 client_id 和 client_secret 也可以正常工作
在提示您时允许权限访问,然后您将被带回 oauth 操场。
点击“兑换代币授权码”
获取刷新令牌并像往常一样使用它来根据需要生成身份验证令牌。
恭喜,您现在可以通过 api 访问品牌帐号了!
希望对您有所帮助。
【讨论】:
你能请教一下吗?详细说明#9?您的意思是必须使用它而不是客户 ID 并在集中屏幕中选择品牌帐户吗?或者在这样做之后,我可以使用谷歌账户访问品牌账户 api 报告? 您可以使用刷新令牌生成一个普通的自动令牌,使用您想要的任何 sdk(或手动调用)。然后你像往常一样使用身份验证令牌发出 api 请求。 清除。谢谢你。我会试一试的。 最后我使用刷新令牌得到了它。感谢您提供的解决方案。 你能帮我解决第 9 点吗?我已经完成了所有步骤,当我点击“交换令牌授权码”时,它返回 “error_description”:“Unauthorized”,“error”:“unauthorized_client” JSON 对象并且没有刷新令牌返回。我什至在隐身模式下尝试过,但没有成功......【参考方案2】:YouTube API 与其他谷歌 API 不同。使用其他 API,您可以验证对完整帐户的访问权限。然而,YouTube API 是基于其频道的。您将需要为每个通道对您的应用程序进行一次身份验证。
onBehalfOfContentOwner
此参数适用于拥有和 管理许多不同的 YouTube 频道。它允许内容所有者 验证一次并访问他们所有的视频和频道数据, 无需为每个人提供身份验证凭据 个别频道。用户验证的实际 CMS 帐户 需要与指定的 YouTube 内容所有者相关联。
您需要成为 YouTube 合作伙伴,然后才能联系您的客户经理并获取 CMS ID。我还没有弄清楚要成为 YouTube 合作伙伴必须存档什么魔法。
【讨论】:
@DalmTo 所以总结一下,我必须要求我的每个品牌客户(渠道)经理给我 CMS ID?因为老实说,我不知道我们需要在哪一方面拥有 CMS 帐户,在品牌帐户方面还是在我的 Google 帐户方面。 我认为应该能够得到它的经理。我只能解决另一个问题,即该人拥有 cms 帐户,对此我帮不上什么忙。如果记忆有用,Google 必须启用它并为他们提供所需的 ID。【参考方案3】:如果您按照获取永久刷新令牌的解决方案并使用 Java,这对我有用
GoogleCredential credential = new GoogleCredential.Builder().setTransport(httpTransport)
.setJsonFactory(JSON_FACTORY)
.setClientSecrets(oauth2ClientId, oauth2ClientSecret)
.build()
.setRefreshToken(oauth2RefreshToken);
this.youTubeClient = new YouTube.Builder(httpTransport, JSON_FACTORY, credential)
.setApplicationName(APPLICATION_NAME)
.build();
必需的依赖项
<dependency>
<groupId>com.google.apis</groupId>
<artifactId>google-api-services-youtube</artifactId>
<version>v3-rev212-1.25.0</version>
</dependency>
<dependency>
<groupId>com.google.auth</groupId>
<artifactId>google-auth-library-oauth2-http</artifactId>
<version>0.18.0</version>
</dependency>
获得刷新令牌后,这些资源也可能会有所帮助:
Authenticate programmatically to Google with OAuth2 https://blog.timekit.io/google-oauth-invalid-grant-nightmare-and-how-to-fix-it-9f4efaf1da35【讨论】:
以上是关于YouTube API - 使用 Google 管理员帐户访问多个 youtube 频道(品牌帐户)的主要内容,如果未能解决你的问题,请参考以下文章
Youtube Data API V3 - 使用 google.youtube.videos.list() 获取视频时出错
在Google网站上自行使用Google API(例如在youtube.com上)
使用 Youtube Data API V3 和 Google API Client PHP 将视频上传到 Youtube - 获取 401(未经授权)消息