我正在编写一个简单的应用程序,它从订阅的频道中获取一些新上传的内容并将它们添加到指定的播放列表中。服务帐户类型与以下代码一起使用:
var certificate = new X509Certificate2(certificateFileName, "notasecret", X509KeyStorageFlags.Exportable);
var serviceInitializer = new ServiceAccountCredential.Initializer(serviceAccountEmail)
{
Scopes = new[] { YouTubeService.Scope.Youtube }
};
var serviceInitializerInstance = serviceInitializer.FromCertificate(certificate);
var credential = new ServiceAccountCredential(serviceInitializerInstance);
var youtubeService = new YouTubeService(new BaseClientService.Initializer
{
HttpClientInitializer = credential,
ApplicationName = applicationName
});
我已成功读取所有必要的信息,但是当我尝试将项目插入播放列表时,它总是返回此错误:
错误:Google.Apis.Requests.RequestError 访问被禁止。请求 可能没有得到适当的授权。 [403]
错误[ 消息[禁止访问。该请求可能未得到正确授权。] 位置[ - ] 原因[禁止] 域名[yo utube.common] ]
根据this链接,这似乎是一些核心API一般错误。
我看过很多样品,都是一样的。我的代码是:
var newPlaylistItemClone = new PlaylistItem();
newPlaylistItem.Snippet = new PlaylistItemSnippet();
newPlaylistItem.Snippet.PlaylistId = playlist.Id;
newPlaylistItem.Snippet.ResourceId = new ResourceId();
newPlaylistItem.Snippet.ResourceId.VideoId = existingPlaylistItem.Snippet.ResourceId.VideoId;
newPlaylistItem.Snippet.ResourceId.Kind = existingPlaylistItem.Snippet.ResourceId.Kind;
await youTubeService.PlaylistItems.Insert(newPlaylistItem, "snippet").ExecuteAsync();
其中
newPlaylistItem
是我要插入的项目,existingPlaylistItem
是频道上传播放列表中的现有项目。我只是复制这些值并更改播放列表 ID。
此外,在 Google 开发者文档网站上使用 API 资源管理器时,一切正常(使用网络授权)。在 Google Developers Console 中,我启用了所有 API。也许问题是我缺少服务帐户类型所需的一些信息? 谁能帮我解决这个问题吗?
这是我的 GitHub 存储库及其源代码。根据请求,第 235 行发生错误。
引用Google Youtube API官方文档:
服务帐户不适用于 YouTube 数据 API 调用,因为服务帐户需要关联的 YouTube 频道,并且您无法将新的或现有的频道与服务帐户关联。如果您使用服务帐户调用 YouTube 数据 API,API 服务器会返回错误,错误类型设置为未经授权,原因设置为 youtubeSignupRequired。
请参考。