【问题标题】:Youtube API v3 : using service account to list videosYoutube API v3:使用服务帐户列出视频
【发布时间】:2016-06-05 09:08:46
【问题描述】:

我正在尝试使用 Google 服务帐户列出来自 YouTube Data API v3 的视频。我激活了 YouTube API,创建了帐户服务,但每当我尝试列出我频道中的视频时,即使我上传了视频,它也会显示 0 个视频。

我从他们的文档中运行了示例,但我的凭据似乎直接从我的服务帐户中列出了视频,而不是我的真实 YouTube 帐户。

List<String> scopes = Lists.newArrayList("https://www.googleapis.com/auth/youtube");

JsonFactory JSON_FACTORY = JacksonFactory.getDefaultInstance();
HttpTransport httpTransport = GoogleNetHttpTransport.newTrustedTransport();
GoogleCredential credential = new GoogleCredential.Builder()
            .setTransport(httpTransport)
            .setJsonFactory(JSON_FACTORY)
            .setServiceAccountId("youtube-****serviceaccount.com")
            .setServiceAccountScopes(scopes)               
            .setServiceAccountPrivateKeyFromP12File(new File("C:\\tmp\\youtube.p12"))
            .build();

youtube = new YouTube.Builder(Auth.HTTP_TRANSPORT, Auth.JSON_FACTORY, credential).setApplicationName(
            "youtube-cmdline-uploadvideo-sample").build();
YouTube.Channels.List channelRequest = youtube.channels().list("contentDetails");
        channelRequest.setMine(true);
        ChannelListResponse channelResult = channelRequest.execute();

    List<Channel> channelsList = channelResult.getItems();


    String uploadPlaylistId = channelsList.get(0).getContentDetails().getRelatedPlaylists().getUploads();

uploadPlaylistId 应该是我的频道 ID,但我不知道它是什么,我只知道这是一个空频道。 (如果我使用我的真实 ID 频道查看此处,我可以列出我的上传内容,似乎我的服务帐户在我的 YouTube 帐户上没有正确引用...)

【问题讨论】:

  • YouTube API 不支持您需要使用 Oauth2 的服务帐户

标签: java oauth-2.0 youtube-api youtube-data-api


【解决方案1】:

您遇到的问题是您正在尝试通过 YouTube API 使用服务帐户。服务帐户默认是拥有自己帐户的虚拟用户。服务帐户没有任何内容上传到其帐户,我认为您无法向其上传任何内容。

通常使用 Google API,您可以通过将服务帐户添加为用户或以某种方式授予其权限来授予服务帐户访问您帐户的权限。很遗憾,YouTube API 无法做到这一点。

如果您尝试通过 YouTube api 使用服务帐户,您通常会看到此错误。

未经授权 (401) youtubeSignupRequired

如果您尝试使用 OAuth 2.0 服务,通常会出现此错误 账户流量。 YouTube 不支持服务帐户,如果您 尝试使用服务帐户进行身份验证,你会得到这个 错误。

以上信息可以在 YouTube 数据 API 错误文档here中找到

您需要改用 Oauth2

【讨论】:

  • 是的,我读到了,......这太疯狂了,这是不可能的......无论如何,如果每次请求都没有用户同意,我怎么能这样做?
  • 使用 Oauth2 保存刷新令牌,在需要访问数据时使用它来获取访问令牌。
猜你喜欢
  • 2019-01-11
  • 2015-02-20
  • 2017-03-29
  • 2016-06-25
  • 2014-05-02
  • 2015-08-02
  • 2016-08-27
  • 2012-10-07
  • 2018-06-11
相关资源
最近更新 更多