.NET 코드 샘플

다음 코드 샘플에서는 .NET용 Google API 클라이언트 라이브러리를 사용합니다. 콘텐츠 소유자가 콘텐츠 소유자 계정을 대신하여 YouTube Data API (v3)를 호출하여 채널을 관리하는 방법을 보여줍니다.

참고: .NET에서 Content ID API 리소스 (예: 애셋 및 소유권 주장)와 직접 상호작용하려면 Google.Apis.YouTubePartner.v1 NuGet 패키지를 설치하세요.

콘텐츠 소유자가 관리하는 채널 검색

다음 코드 샘플은 YouTube Data API의 channels.list 메서드를 호출하여 API 요청을 하는 콘텐츠 소유자가 관리하는 채널 목록을 가져옵니다.

using System;
using System.Collections;
using System.Collections.Generic;
using System.Reflection;

/*
 * External dependencies, OAuth 2.0 support, and core client libraries are at:
 *   https://developers.google.com/api-client-library/dotnet/apis/
 * Also see the Samples.zip file for the Google.Apis.Samples.Helper classes at:
 *   https://github.com/youtube/api-samples/tree/master/dotnet
 */

using DotNetOpenAuth.OAuth2;

using Google.Apis.Authentication;
using Google.Apis.Authentication.OAuth2;
using Google.Apis.Authentication.OAuth2.DotNetOpenAuth;
using Google.Apis.Samples.Helper;
using Google.Apis.Services;
using Google.Apis.Util;
using Google.Apis.Youtube.v3;
using Google.Apis.Youtube.v3.Data;

namespace dotnet
{
  class papi_my_managed_channels
  {
    static void Main(string[] args)
    {
      CommandLine.EnableExceptionHandling();
      CommandLine.DisplayGoogleSampleHeader("YouTube Partner API: My Managed Channels");

      var credentials = PromptingClientCredentials.EnsureFullClientCredentials();
      var provider = new NativeApplicationClient(GoogleAuthenticationServer.Description)
      {
        ClientIdentifier = credentials.ClientId,
        ClientSecret = credentials.ClientSecret
      };
      var auth = new OAuth2Authenticator<NativeApplicationClient>(provider, GetAuthorization);

      var youtube = new YoutubeService(new BaseClientService.Initializer()
      {
        Authenticator = auth
      });

      var contentOwnerId = CommandLine.RequestUserInput<string>("Content Owner ID");

      var nextPageToken = "";
      while (nextPageToken != null)
      {
        var channelsListRequest = youtube.Channels.List("snippet");
        channelsListRequest.MaxResults = 50;
        channelsListRequest.ManagedByMe = true;
        channelsListRequest.OnBehalfOfContentOwner = contentOwnerId;
        channelsListRequest.PageToken = nextPageToken;

        var channelsListResponse = channelsListRequest.Fetch();

        foreach (var channelItem in channelsListResponse.Items)
        {
          CommandLine.WriteLine(String.Format("{0} ({1})", channelItem.Snippet.Title, channelItem.Id));
        }

        nextPageToken = channelsListResponse.NextPageToken;
      }
      
      CommandLine.PressAnyKeyToExit();
    }

    private static IAuthorizationState GetAuthorization(NativeApplicationClient client)
    {
      var storage = MethodBase.GetCurrentMethod().DeclaringType.ToString();
      var key = "storage_key";

      IAuthorizationState state = AuthorizationMgr.GetCachedRefreshToken(storage, key);
      if (state != null)
      {
        client.RefreshToken(state);
      }
      else
      {
        state = AuthorizationMgr.RequestNativeAuthorization(client, YoutubeService.Scopes.YoutubeReadonly.GetStringValue(), YoutubeService.Scopes.Youtubepartner.GetStringValue());
        AuthorizationMgr.SetCachedRefreshToken(storage, key, state);
      }

      return state;
    }
  }
}