【发布时间】:2015-10-17 16:05:46
【问题描述】:
我正在编写一个简单的应用程序,它从订阅的频道获取一些新的上传内容并将它们添加到指定的播放列表中。服务帐号类型与以下代码一起使用:
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 Explorer 时,一切正常(使用 Web 授权)。在 Google Developers Console 中,我启用了所有 API。也许问题是我缺少服务帐户类型所需的一些信息? 谁能帮我解决这个问题?
这是我的GitHub 带有源代码的存储库。应请求在第 235 行发生错误。
【问题讨论】:
标签: c# .net api youtube youtube-api