youtube通过C#添加订阅

问题描述 投票:1回答:1

我正在为windows 8.1构建一个YouTube应用程序。

我有一个麻烦,添加(插入)订阅失败。

我的代码。

var credential = await GoogleWebAuthorizationBroker.AuthorizeAsync(
                new Uri("ms-appx:///Assets/client_secrets.json"),
                new[] { Uri.EscapeUriString(YouTubeService.Scope.Youtube) },
                "user",
                CancellationToken.None);

var youtubeService = new YouTubeService(new BaseClientService.Initializer()
                {
                    ApiKey = "XXXXXXXXXXXXXXXXXXXXXXXXXXXX",
                    HttpClientInitializer = credential,
                    ApplicationName = "AppName"
                });

Subscription body = new Subscription();
body.Snippet = new SubscriptionSnippet();

body.Snippet.ChannelId = "UC-kezFAw46x-9ctBUqVe86Q"; 
try
{
    var addSubscriptionRequest = youtubeService.Subscriptions.Insert(body, "snippet");
    var addSubscriptionResponse = await addSubscriptionRequest.ExecuteAsync();
}
catch (Exception e)
{
    throw e;
}

当我在第一行设置一个断点时,

当执行到最后一行时,中断这个函数

更新(2015-11-14)。

错误信息。请求中指定的订阅资源必须使用的是 snippet.resorceId 属性,用于标识正在订阅的频道[400] 。

成功的代码。

var credential = await GoogleWebAuthorizationBroker.AuthorizeAsync(
         new Uri("ms-appx:///Assets/client_secrets.json"),
         new[] { Uri.EscapeUriString(YouTubeService.Scope.Youtube) },
         "user",
         CancellationToken.None);

var youtubeService = new YouTubeService(new BaseClientService.Initializer()
{
    //ApiKey = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
    HttpClientInitializer = credential,
    ApplicationName = "4GameTV"
});


try
{
    Subscription body = new Subscription();
    body.Snippet = new SubscriptionSnippet();
    body.Snippet.ResourceId = new ResourceId();
    body.Snippet.ResourceId.ChannelId = "UC-kezFAw46x-9ctBUqVe86Q";  //replace with specified channel id

    var addSubscriptionRequest = youtubeService.Subscriptions.Insert(body, "snippet");
    var addSubscriptionResponse = await addSubscriptionRequest.ExecuteAsync();

}
catch (Exception e)
{
    throw e;
}
c# youtube-api google-oauth google-api-dotnet-client
1个回答
0
投票

你的认证似乎与我平时使用的有点不一样。另外ApiKey只有在你想访问公共数据时才需要。

string[] scopes = new string[] { YouTubeService.Scope.Youtube };


 // here is where we Request the user to give us access, or use the Refresh Token that was previously stored in %AppData%
UserCredential credential = GoogleWebAuthorizationBroker.AuthorizeAsync(new ClientSecrets { ClientId = clientId, ClientSecret = clientSecret }
, scopes
, "test"
, CancellationToken.None
, new FileDataStore("Daimto.YouTube.Auth.Store")).Result;

YouTubeService service = new YouTubeService(new YouTubeService.Initializer()
     {
     HttpClientInitializer = credential,
     ApplicationName = "YouTube Data API Sample",
     });
© www.soinside.com 2019 - 2024. All rights reserved.