我正在编写一个简单的应用程序,它从订阅的频道中获取一些新的上传内容并将它们添加到指定的播放列表中。服务帐户类型与以下代码一起使用:
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链接,似乎是一些Core 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 Developers文档网站上使用API资源管理器时,一切正常(使用了Web授权)。在Google Developers Console中,我启用了所有API。也许问题是我缺少服务帐户类型所需的一些信息? 任何人都可以帮我解决这个问题吗?
这是我的GitHub存储库,包含源代码。根据请求在第235行发生错误。
答案 0 :(得分:1)
从官方Google Youtube API文档中引用:
服务帐户不适用于YouTube Data API调用,因为服务帐户需要关联的YouTube频道,您无法将新频道或现有频道与服务帐户相关联。如果您使用服务帐户调用YouTube Data API,则API服务器会返回错误,错误类型设置为未授权,并且原因设置为youtubeSignupRequired。
请refer。
答案 1 :(得分:0)