YouTube API 服务帐户 returns 'forbidden 403' 插入播放列表项时
YouTube API service account returns 'forbidden 403' when inserting playlist item
我正在编写一个简单的应用程序,它从订阅的频道中获取一些新上传的内容并将它们添加到指定的播放列表中。服务帐户类型与以下代码一起使用:
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
});
我已经成功阅读了所有必要的信息,但是当我尝试将项目插入播放列表时,它总是 return 这个错误:
Error: Google.Apis.Requests.RequestError Access forbidden. The request
may not be properly authorized. [403]
Errors [
Message[Access forbidden. The request may not be properly authorized.] Location[ - ] Reason[forbidden] Domain[yo utube.common] ]
根据 this link.
,这似乎是一些核心 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 资源管理器时一切正常(使用 Web 授权)。在 Google Developers Console 中,我启用了所有 API。也许问题是我缺少服务帐户类型所需的一些信息?
谁能帮我解决这个问题?
这是我的 GitHub 源代码存储库。应要求在第 235 行出现错误。
引用官方 Google Youtube API 文档:
服务帐户不适用于 YouTube 数据 API 调用,因为服务帐户需要关联的 YouTube 频道,并且您无法将新频道或现有频道与服务帐户相关联。如果您使用服务帐户调用 YouTube 数据 API,API 服务器 returns 出现错误,错误类型设置为未授权,原因设置为 youtubeSignupRequired。
请refer。
最简单的方法是转到应用程序的同意屏幕。
通过添加 YouTube 范围编辑您的应用程序(如果需要,您可以添加更多范围)。重新登录并再次测试播放列表功能
为我工作,我设法通过 YouTubeService class
获得了帐户的播放列表
我正在编写一个简单的应用程序,它从订阅的频道中获取一些新上传的内容并将它们添加到指定的播放列表中。服务帐户类型与以下代码一起使用:
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
});
我已经成功阅读了所有必要的信息,但是当我尝试将项目插入播放列表时,它总是 return 这个错误:
Error: Google.Apis.Requests.RequestError Access forbidden. The request may not be properly authorized. [403]
Errors [ Message[Access forbidden. The request may not be properly authorized.] Location[ - ] Reason[forbidden] Domain[yo utube.common] ]
根据 this link.
,这似乎是一些核心 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 资源管理器时一切正常(使用 Web 授权)。在 Google Developers Console 中,我启用了所有 API。也许问题是我缺少服务帐户类型所需的一些信息? 谁能帮我解决这个问题?
这是我的 GitHub 源代码存储库。应要求在第 235 行出现错误。
引用官方 Google Youtube API 文档:
服务帐户不适用于 YouTube 数据 API 调用,因为服务帐户需要关联的 YouTube 频道,并且您无法将新频道或现有频道与服务帐户相关联。如果您使用服务帐户调用 YouTube 数据 API,API 服务器 returns 出现错误,错误类型设置为未授权,原因设置为 youtubeSignupRequired。
请refer。
最简单的方法是转到应用程序的同意屏幕。
通过添加 YouTube 范围编辑您的应用程序(如果需要,您可以添加更多范围)。重新登录并再次测试播放列表功能
为我工作,我设法通过 YouTubeService class
获得了帐户的播放列表