12

我需要使用 YouTube 分析和报告 API 从视频中提取信息。

当我使用我的 Google 帐户登录 YouTube 时,我可以访问多个 YouTube 品牌帐户。

使用“试用”来测试 API,我只能在切换到该频道所属的品牌帐户后检索该频道的数据,否则我会收到 403 - Forbidden 错误。

有什么方法可以使用我用来登录的 Google 帐户提取数据?因为一旦我在开发者控制台中创建了凭据,它们就会与 Google 帐户相关联,而不是与品牌帐户相关联。

我的谷歌账户在品牌账户上有经理角色。

我已经搜索要在请求中使用的onBehalfOfContentOwner字段,但我不知道如何获取此 ID,并且我不确定这是否适用于我的情况,因为我们正在谈论品牌帐户,正确如果我错了。

4

4 回答 4

18

就在两天前,我和这个打过架。事实证明这是可能的,它只是没有记录,并且工作方式与您预期的有点不同:

在开发者控制台中创建凭据后,它们将与 Google 帐户相关联,而不是与品牌帐户相关联。

当我第一次尝试时,我有同样的误解(甚至找到了品牌帐户的 client_id)。事实证明,您不想使用品牌的 oauth 信息——您想使用自己的 client_id/client_secret 代表品牌帐户创建刷新令牌,然后使用它来创建身份验证令牌。

脚步:

  1. 使用您的主帐户通过https://console.developers.google.com/apis/credentials创建一个 oauth client_id 和 client_secret
  2. 编辑您刚刚添加的 client_id/client_secret 条目,并将“ https://developers.google.com/oauthplayground ”添加到页面底部的“授权重定向 URI”中。
  3. 我们将以懒惰的方式创建一个刷新令牌。转到https://developers.google.com/oauthplayground/
  4. 单击右上角的齿轮并将访问类型设置为“离线”,然后单击“使用您自己的 OAuth 凭据”并输入您在步骤 1 中创建的 client_id 和 client_secret。
  5. 选择您要授予其访问权限的范围。单击授权 API。
  6. 神奇之处在于:您现在会被要求“选择一个帐户”。在此处选择您要访问的品牌帐户,而不是您的主帐户。由于您有权访问它,即使您使用自己的 client_id 和 client_secret 也可以正常工作
  7. 当它提示您时允许权限访问,然后您将被带回 oauth 游乐场。
  8. 点击“兑换代币授权码”
  9. 获取刷新令牌并像往常一样使用它来根据需要生成身份验证令牌。

恭喜,您现在可以通过 api 访问品牌帐户!

希望有帮助。

于 2017-07-14T15:01:36.797 回答
4

YouTube API 与其他谷歌 API 不同。使用其他 API,您可以验证对完整帐户的访问权限。然而,YouTube API 是基于其频道的。您将需要为每个通道对您的应用程序进行一次身份验证。

代表内容所有者

此参数适用于拥有和管理许多不同 YouTube 频道的YouTube 内容合作伙伴。它允许内容所有者进行一次身份验证并访问其所有视频和频道数据,而无需为每个单独的频道提供身份验证凭据。用户进行身份验证的实际CMS 帐户需要与指定的 YouTube 内容所有者相关联。

您需要成为 YouTube 合作伙伴,然后才能联系您的客户经理并获取 CMS id。我还没有弄清楚要成为 YouTube 合作伙伴必须存档什么魔法。

于 2016-12-07T11:45:27.053 回答
0

如果您遵循获取永久刷新令牌的解决方案并使用 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>

拥有刷新令牌后,这些资源也可能会有所帮助:

于 2019-10-31T23:45:39.817 回答
0

我将更新@Paolo 令人难以置信的答案。就我而言,我试图使用Playlist.listapi 获取我的私人视频。我从来没有见过像 youtube 的 api 那样记录不充分、笨拙和 CONVOLUTED 的 api。

背景:我有一个主要的 google 帐户,我的 youtube api 凭据绑定到该帐户(没有 youtube 品牌帐户的 google 开发人员帐户),但想获取我的 youtube 帐户(品牌帐户)的私人播放列表(和视频) . mine=true, key, channelId, onBehalfOfContentOwner, 和onBehalfOfContentOwnerChannel所有对我都没有用。我得到了公共播放列表或这些参数的各种组合和值的 api 错误。

最后,这些是我运行节点脚本以从我的品牌帐户获取私人视频的步骤:

  1. 转到https://console.developers.google.com/获取您的主要 Google 帐户。
  2. 在侧边栏中,转到 APIs & Services,然后转到 Credentials
  3. 在顶部,点击 +Create Credentials,然后点击 Service account
  4. 在服务帐户详细信息下,输入任何名称,然后单击创建并继续
  5. 在“授予此服务帐户对项目的访问权限”下,单击继续
  6. 在“授予用户访问此服务帐户的权限”下,点击完成
  7. 在加载的主凭据页面上,单击服务帐户下新创建的服务帐户
  8. 在选项卡中,单击键
  9. 单击添加密钥按钮,然后单击创建新密钥
  10. 保留JSON,然后点击创建
  11. 将文件保存为 nodejs 项目根目录中的 client-key.json
  12. 转到https://developers.google.com/oauthplayground
  13. 滚动到范围底部并选择 YouTube Data API v3 v3,然后选择https://www.googleapis.com/auth/youtubehttps://www.googleapis.com/auth/youtube.readonly
  14. 在弹出的窗口中,点击您的 youtube(品牌)帐户,然后允许
  15. 在下一步中,单击交换令牌的授权代码
  16. 复制访问令牌
  17. 返回到您的节点脚本并像这样使用:
  const auth = new google.auth.GoogleAuth({
    keyFile: "client-key.json",
    scopes: [
      "https://www.googleapis.com/auth/youtube",
      "https://www.googleapis.com/auth/youtube.force-ssl",
      "https://www.googleapis.com/auth/youtube.readonly",
      "https://www.googleapis.com/auth/youtubepartner",
      "https://www.googleapis.com/auth/youtubepartner-channel-audit",
    ],
  })

  const authClient = await auth.getClient()
  google.options({ auth: authClient })

  const youtube = google.youtube("v3")

  const token = "your token here"

  const results = await youtube.playlists.list({
    part: [
      "snippet",
      "id",
      "contentDetails",
      "status",
      "localizations",
      "status",
    ],
    mine: true,
    auth: token,
    oauth_token: token,
    maxResults: 50,
  })

请注意mine: true,令牌必须传递给 BOTHauthoauth_token,但不能传递给key。如果缺少任何一个参数,则调用将失败。(为什么?不知道。请告诉我。)此外,您必须在操场上不断更新您的访问令牌过期后。

现在,说了这么多,我鼓励你给我找一个比 youtube api 更糟糕的 api。我的猜测是,你很难找到一个比这更荒谬的人。

PS 我相信在此之前还需要做一些额外的事情,比如启用 youtube api 并在 OAUTH 同意屏幕上做一些事情,但我对这件事感到筋疲力尽,无法继续。希望 Google 控制台 UX 足以指导您完成这些步骤,但坦率地说,我对此表示怀疑。

希望这会有所帮助并祝您好运,因为您可能确实需要它。

于 2022-02-19T16:52:11.067 回答