.NET 코드 샘플

.NET용 Google API 클라이언트 라이브러리를 사용하는 다음 코드 샘플은 YouTube Data API에 사용할 수 있습니다. 이러한 코드 샘플은 GitHub의 YouTube API 코드 샘플 저장소에 있는 dotnet 폴더에서 다운로드할 수 있습니다.

재생목록 만들기

다음 코드 샘플은 API의 playlists.insert 메서드를 호출하여 비공개 재생목록을 만듭니다. 요청을 승인하는 채널에서 소유하는 ID입니다.

using System; using System.IO; using System.Reflection; using System.Threading; using System.Threading.Tasks;  using Google.Apis.Auth.OAuth2; using Google.Apis.Services; using Google.Apis.Upload; using Google.Apis.Util.Store; using Google.Apis.YouTube.v3; using Google.Apis.YouTube.v3.Data;  namespace Google.Apis.YouTube.Samples {   /// <summary>   /// YouTube Data API v3 sample: create a playlist.   /// Relies on the Google APIs Client Library for .NET, v1.7.0 or higher.   /// See https://developers.google.com/api-client-library/dotnet/get_started   /// </summary>   internal class PlaylistUpdates   {     [STAThread]     static void Main(string[] args)     {       Console.WriteLine("YouTube Data API: Playlist Updates");       Console.WriteLine("==================================");        try       {         new PlaylistUpdates().Run().Wait();       }       catch (AggregateException ex)       {         foreach (var e in ex.InnerExceptions)         {           Console.WriteLine("Error: " + e.Message);         }       }        Console.WriteLine("Press any key to continue...");       Console.ReadKey();     }      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 full read/write access to the             // authenticated user's account.             new[] { YouTubeService.Scope.Youtube },             "user",             CancellationToken.None,             new FileDataStore(this.GetType().ToString())         );       }        var youtubeService = new YouTubeService(new BaseClientService.Initializer()       {         HttpClientInitializer = credential,         ApplicationName = this.GetType().ToString()       });        // Create a new, private playlist in the authorized user's channel.       var newPlaylist = new Playlist();       newPlaylist.Snippet = new PlaylistSnippet();       newPlaylist.Snippet.Title = "Test Playlist";       newPlaylist.Snippet.Description = "A playlist created with the YouTube API v3";       newPlaylist.Status = new PlaylistStatus();       newPlaylist.Status.PrivacyStatus = "public";       newPlaylist = await youtubeService.Playlists.Insert(newPlaylist, "snippet,status").ExecuteAsync();        // Add a video to the newly created playlist.       var newPlaylistItem = new PlaylistItem();       newPlaylistItem.Snippet = new PlaylistItemSnippet();       newPlaylistItem.Snippet.PlaylistId = newPlaylist.Id;       newPlaylistItem.Snippet.ResourceId = new ResourceId();       newPlaylistItem.Snippet.ResourceId.Kind = "youtube#video";       newPlaylistItem.Snippet.ResourceId.VideoId = "GNRMeaz6QRI";       newPlaylistItem = await youtubeService.PlaylistItems.Insert(newPlaylistItem, "snippet").ExecuteAsync();        Console.WriteLine("Playlist item id {0} was added to playlist id {1}.", newPlaylistItem.Id, newPlaylist.Id);     }   } } 

내 업로드 검색

다음 코드 샘플은 API의 playlistItems.list 메서드를 호출하여 동영상 목록을 검색합니다. 요청에 연결된 채널에 업로드됩니다. 이 코드는 channels.list 메서드도 호출합니다. 채널에 업로드된 채널을 식별하는 재생목록 ID를 가져오도록 mine 매개변수를 true로 설정 동영상

using System; using System.IO; using System.Reflection; using System.Threading; using System.Threading.Tasks;  using Google.Apis.Auth.OAuth2; using Google.Apis.Services; using Google.Apis.Upload; using Google.Apis.Util.Store; using Google.Apis.YouTube.v3; using Google.Apis.YouTube.v3.Data;  namespace Google.Apis.YouTube.Samples {   /// <summary>   /// YouTube Data API v3 sample: retrieve my uploads.   /// Relies on the Google APIs Client Library for .NET, v1.7.0 or higher.   /// See https://developers.google.com/api-client-library/dotnet/get_started   /// </summary>   internal class MyUploads   {     [STAThread]     static void Main(string[] args)     {       Console.WriteLine("YouTube Data API: My Uploads");       Console.WriteLine("============================");        try       {         new MyUploads().Run().Wait();       }       catch (AggregateException ex)       {         foreach (var e in ex.InnerExceptions)         {           Console.WriteLine("Error: " + e.Message);         }       }        Console.WriteLine("Press any key to continue...");       Console.ReadKey();     }      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;         }       }     }   } } 

키워드로 검색

다음 코드 샘플은 API의 search.list 메서드를 호출하여 검색 결과를 검색합니다. 특정 키워드와 관련이 있는 키워드입니다.

using System; using System.Collections.Generic; using System.IO; using System.Reflection; using System.Threading; using System.Threading.Tasks;  using Google.Apis.Auth.OAuth2; using Google.Apis.Services; using Google.Apis.Upload; using Google.Apis.Util.Store; using Google.Apis.YouTube.v3; using Google.Apis.YouTube.v3.Data;  namespace Google.Apis.YouTube.Samples {   /// <summary>   /// YouTube Data API v3 sample: search by keyword.   /// Relies on the Google APIs Client Library for .NET, v1.7.0 or higher.   /// See https://developers.google.com/api-client-library/dotnet/get_started   ///   /// Set ApiKey to the API key value from the APIs & auth > Registered apps tab of   ///   https://cloud.google.com/console   /// Please ensure that you have enabled the YouTube Data API for your project.   /// </summary>   internal class Search   {     [STAThread]     static void Main(string[] args)     {       Console.WriteLine("YouTube Data API: Search");       Console.WriteLine("========================");        try       {         new Search().Run().Wait();       }       catch (AggregateException ex)       {         foreach (var e in ex.InnerExceptions)         {           Console.WriteLine("Error: " + e.Message);         }       }        Console.WriteLine("Press any key to continue...");       Console.ReadKey();     }      private async Task Run()     {       var youtubeService = new YouTubeService(new BaseClientService.Initializer()       {         ApiKey = "REPLACE_ME",         ApplicationName = this.GetType().ToString()       });        var searchListRequest = youtubeService.Search.List("snippet");       searchListRequest.Q = "Google"; // Replace with your search term.       searchListRequest.MaxResults = 50;        // Call the search.list method to retrieve results matching the specified query term.       var searchListResponse = await searchListRequest.ExecuteAsync();        List<string> videos = new List<string>();       List<string> channels = new List<string>();       List<string> playlists = new List<string>();        // Add each result to the appropriate list, and then display the lists of       // matching videos, channels, and playlists.       foreach (var searchResult in searchListResponse.Items)       {         switch (searchResult.Id.Kind)         {           case "youtube#video":             videos.Add(String.Format("{0} ({1})", searchResult.Snippet.Title, searchResult.Id.VideoId));             break;            case "youtube#channel":             channels.Add(String.Format("{0} ({1})", searchResult.Snippet.Title, searchResult.Id.ChannelId));             break;            case "youtube#playlist":             playlists.Add(String.Format("{0} ({1})", searchResult.Snippet.Title, searchResult.Id.PlaylistId));             break;         }       }        Console.WriteLine(String.Format("Videos:\n{0}\n", string.Join("\n", videos)));       Console.WriteLine(String.Format("Channels:\n{0}\n", string.Join("\n", channels)));       Console.WriteLine(String.Format("Playlists:\n{0}\n", string.Join("\n", playlists)));     }   } } 

동영상 업로드

다음 코드 샘플은 API의 videos.insert 메서드를 호출하여 채널에 동영상을 업로드합니다. 요청 관련 ID입니다.

using System; using System.IO; using System.Reflection; using System.Threading; using System.Threading.Tasks;  using Google.Apis.Auth.OAuth2; using Google.Apis.Services; using Google.Apis.Upload; using Google.Apis.Util.Store; using Google.Apis.YouTube.v3; using Google.Apis.YouTube.v3.Data;  namespace Google.Apis.YouTube.Samples {   /// <summary>   /// YouTube Data API v3 sample: upload a video.   /// Relies on the Google APIs Client Library for .NET, v1.7.0 or higher.   /// See https://developers.google.com/api-client-library/dotnet/get_started   /// </summary>   internal class UploadVideo   {     [STAThread]     static void Main(string[] args)     {       Console.WriteLine("YouTube Data API: Upload Video");       Console.WriteLine("==============================");        try       {         new UploadVideo().Run().Wait();       }       catch (AggregateException ex)       {         foreach (var e in ex.InnerExceptions)         {           Console.WriteLine("Error: " + e.Message);         }       }        Console.WriteLine("Press any key to continue...");       Console.ReadKey();     }      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 an application to upload files to the             // authenticated user's YouTube channel, but doesn't allow other types of access.             new[] { YouTubeService.Scope.YoutubeUpload },             "user",             CancellationToken.None         );       }        var youtubeService = new YouTubeService(new BaseClientService.Initializer()       {         HttpClientInitializer = credential,         ApplicationName = Assembly.GetExecutingAssembly().GetName().Name       });        var video = new Video();       video.Snippet = new VideoSnippet();       video.Snippet.Title = "Default Video Title";       video.Snippet.Description = "Default Video Description";       video.Snippet.Tags = new string[] { "tag1", "tag2" };       video.Snippet.CategoryId = "22"; // See https://developers.google.com/youtube/v3/docs/videoCategories/list       video.Status = new VideoStatus();       video.Status.PrivacyStatus = "unlisted"; // or "private" or "public"       var filePath = @"REPLACE_ME.mp4"; // Replace with path to actual movie file.        using (var fileStream = new FileStream(filePath, FileMode.Open))       {         var videosInsertRequest = youtubeService.Videos.Insert(video, "snippet,status", fileStream, "video/*");         videosInsertRequest.ProgressChanged += videosInsertRequest_ProgressChanged;         videosInsertRequest.ResponseReceived += videosInsertRequest_ResponseReceived;          await videosInsertRequest.UploadAsync();       }     }      void videosInsertRequest_ProgressChanged(Google.Apis.Upload.IUploadProgress progress)     {       switch (progress.Status)       {         case UploadStatus.Uploading:           Console.WriteLine("{0} bytes sent.", progress.BytesSent);           break;          case UploadStatus.Failed:           Console.WriteLine("An error prevented the upload from completing.\n{0}", progress.Exception);           break;       }     }      void videosInsertRequest_ResponseReceived(Video video)     {       Console.WriteLine("Video id '{0}' was successfully uploaded.", video.Id);     }   } }