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(未经授权)消息

从使用 YouTube 数据 API 的个人项目中删除 Google 未经验证的警告

未发送 Google YouTube API 刷新令牌

用于通过PHP访问Youtube的Google API密钥