Примеры кода .NET

Следующие примеры кода, использующие клиентскую библиотеку API Google для .NET , доступны для YouTube Data API . Эти примеры кода можно скачать из папки dotnet репозитория примеров кода API YouTube на GitHub .

Создать плейлист

В следующем примере кода вызывается метод playlists.insert API для создания частного списка воспроизведения, принадлежащего каналу, авторизующему запрос.

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);
   
}
 
}
}

Получить мои загрузки

В следующем примере кода вызывается метод playlistItems.list API для получения списка видео, загруженных на канал, связанный с запросом. Код также вызывает метод channels.list с параметром 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)));
   
}
 
}
}

Загрузить видео

В следующем примере кода вызывается метод videos.insert API для загрузки видео на канал, связанный с запросом.

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);
   
}
 
}
}