我尝试使用简单的C#应用程序删除一个或多个视频(我打算稍后使用Windows服务)并且我收到此错误:
Google.Apis.Auth.OAuth2.Responses.TokenResponseException: Error:"unauthorized_client", Description:"Unauthorized client or scope in request.", Uri:""
at Google.Apis.Requests.ClientServiceRequest`1.Execute() in c:\code\google.com\google-api-dotnet-client\default\Tools\Google.Apis.Release\bin\Debug\test\default\Src\GoogleApis\Apis\Requests\ClientServiceRequest.cs:line 93
上传视频效果很好。对于这两个操作,我使用相同的初始化方法:
private static YouTubeService AuthorizeYoutubeService()
{
string serviceAccountEmail = "...@developer.gserviceaccount.com";
string keyFilePath = "Warehouse<...>.p12";
string userAccountEmail = "login@gmail.com";
if (!File.Exists(keyFilePath))
{
System.Windows.Forms.MessageBox.Show("Secret file not found!");
return null;
}
var scope = new string[] { YouTubeService.Scope.Youtube };
var cert = new X509Certificate2(keyFilePath, "notasecret", X509KeyStorageFlags.Exportable);
try
{
ServiceAccountCredential credential = new ServiceAccountCredential
(new ServiceAccountCredential.Initializer(serviceAccountEmail)
{
Scopes = scope,
User = userAccountEmail
}.FromCertificate(cert));
var service = new YouTubeService(new BaseClientService.Initializer
{
HttpClientInitializer = credential,
ApplicationName = "warehouse"
});
return service;
}
catch (Exception ex)
{
System.Windows.Forms.MessageBox.Show(ex.Message);
return null;
}
}
与简单上传视频相比,差异在于定义的范围: YouTubeService.Scope.YoutubeUpload 。当我尝试使用它删除视频时,出现不足(403)错误。 因此,在查看documentation之后,我已将其更改为 YouTubeService.Scope.Youtube 。
这是我尝试使用的代码:
var youtubeService = AuthorizeYoutubeService();
foreach (string id in deleteIds)
{
var videoDeleteRequest = youtubeService.Videos.Delete(id);
var result = videoDeleteRequest.Execute();
}
其中 deleteIds 是包含现有视频ID的11个字符串的列表。 我在开发者控制台中启用了YouTube Data API。 我已经通过NuGet安装了API,我不认为这些包有什么问题。
我对Google开发很陌生,所有类似的问题都与日历API有关。
我感谢任何帮助。
答案 0 :(得分:0)
我最终做的是重新设置连接到Google帐户的应用列表并从头开始重新设置。我的应用程序因某种原因被添加了2次。