我正在尝试使用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 配合使用。 默认情况下,服务帐户是具有自己的帐户的虚拟用户。 服务帐户没有将任何内容上传到其帐户,我认为您无法向其上传任何内容。
通常,使用 Google API,您可以通过将服务帐号添加为用户或以某种方式授予其权限来授予服务帐号对你帐号的访问权限。 不幸的是,这在YouTube API中是不可能的。
如果您尝试将服务帐号与 YouTube API 配合使用,通常会看到此错误。
有关未经授权 (401) 优酷注册必填
如果您尝试使用 OAuth 2.0 服务,则通常会看到此错误 帐户流。YouTube 不支持服务帐号,如果您 尝试使用服务帐户进行身份验证,您将获得此消息 错误。
上述信息,请参阅此处的 YouTube 数据 API 错误文档
您需要切换到使用 Oauth2