2017-05-31 255 views
1

我目前正在为我的学校开发一款软件。该软件必须能够发布视频,但它也必须能够将这些视频添加到播放列表中。 问题:如何列出帐户的所有现有播放列表(甚至是空的或私人的)?我正在使用YouTube数据API v3,并且我无法获得空的。 这里是代码:c#使用Youtube数据API获取youtube播放列表v3

private async Task Run() 
    { 
     UserCredential credential; 
     using (var stream = new FileStream("client_secrets.json", FileMode.Open, FileAccess.Read)) 
     { 
      credential = await GoogleWebAuthorizationBroker.AuthorizeAsync(
       GoogleClientSecrets.Load(stream).Secrets, 
       // This OAuth 2.0 access scope allows for read-only access to the authenticated 
       // user's account, but not other types of account access. 
       new[] { YouTubeService.Scope.YoutubeReadonly }, 
       "user", 
       CancellationToken.None, 
       new FileDataStore(this.GetType().ToString()) 
      ); 
     } 

     var youtubeService = new YouTubeService(new BaseClientService.Initializer() 
     { 
      HttpClientInitializer = credential, 
      ApplicationName = this.GetType().ToString() 
     }); 

     var channelsListRequest = youtubeService.Channels.List("contentDetails"); 
     channelsListRequest.Mine = true; 

     // Retrieve the contentDetails part of the channel resource for the authenticated user's channel. 
     var channelsListResponse = await channelsListRequest.ExecuteAsync(); 

     foreach (var channel in channelsListResponse.Items) 
     { 
      // From the API response, extract the playlist ID that identifies the list 
      // of videos uploaded to the authenticated user's channel. 
      var uploadsListId = channel.ContentDetails.RelatedPlaylists.Uploads; 

      Console.WriteLine("Videos in list {0}", uploadsListId); 

      var nextPageToken = ""; 
      while (nextPageToken != null) 
      { 
       var playlistItemsListRequest = youtubeService.PlaylistItems.List("snippet"); 
       playlistItemsListRequest.PlaylistId = uploadsListId; 
       playlistItemsListRequest.MaxResults = 50; 
       playlistItemsListRequest.PageToken = nextPageToken; 

       // Retrieve the list of videos uploaded to the authenticated user's channel. 
       var playlistItemsListResponse = await playlistItemsListRequest.ExecuteAsync(); 

       foreach (var playlistItem in playlistItemsListResponse.Items) 
       { 
        // Print information about each video. 
        Console.WriteLine("{0} ({1})", playlistItem.Snippet.Title, playlistItem.Snippet.ResourceId.VideoId); 
       } 

       nextPageToken = playlistItemsListResponse.NextPageToken; 
      } 
     } 
    } 

在此先感谢您。

回答

0

我得到这个代码做这个工作:

private async Task Run() 
    { 
     UserCredential credential; 
     using (var stream = new FileStream("client_secrets.json", FileMode.Open, FileAccess.Read)) 
     { 
      credential = await GoogleWebAuthorizationBroker.AuthorizeAsync(
       GoogleClientSecrets.Load(stream).Secrets, 
       // This OAuth 2.0 access scope allows for read-only access to the authenticated 
       // user's account, but not other types of account access. 
       new[] { YouTubeService.Scope.YoutubeReadonly }, 
       "user", 
       CancellationToken.None, 
       new FileDataStore(this.GetType().ToString()) 
      ); 
     } 

     var youtubeService = new YouTubeService(new BaseClientService.Initializer() 
     { 
      HttpClientInitializer = credential, 
      ApplicationName = this.GetType().ToString() 
     }); 

     // var channelsListRequest = youtubeService.Channels.List("contentDetails"); 
     var playlistListRequest = youtubeService.Playlists.List("snippet"); 
     playlistListRequest.Mine = true; 

     // Retrieve the contentDetails part of the channel resource for the authenticated user's channel. 
     var playlistListResponse = await playlistListRequest.ExecuteAsync(); 

     foreach (var playlist in playlistListResponse.Items) 
     { 
      // From the API response, extract the playlist ID that identifies the list 
      // of videos uploaded to the authenticated user's channel. 
      var playlistListId = playlist.Id; 

      Console.WriteLine("Videos in list {0}", playlistListId); 
     } 
    } 

感谢“not_a_bot”对我的帮助。

+0

我试图做同样的事情,但它失败了。什么是''snippet''魔术串? –

+0

您需要更改请求类型。 – SuperCoder

+0

示例:'var channelsListRequest = youtubeService.Channels.List(“contentDetails”); channelsListRequest.Mine = true;'成为:'var playlistListRequest = youtubeService.Playlists.List(“snippet”); playlistListRequest.Mine = true;' @VioletGiraffe – SuperCoder

相关问题