Загрузка видео из локальной папки на YouTube с помощью API

#c#

Вопрос:

Вот код, который я использовал для загрузки видео с локального хоста на YouTube.

 namespace YouTubeUpload_Console {
  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() {
      try {
        string[] scopes = new string[] {
          YouTubeService.Scope.YoutubeUpload,
            YouTubeService.Scope.Youtube
        };

        GoogleAuthorizationCodeFlow flow = new GoogleAuthorizationCodeFlow(new GoogleAuthorizationCodeFlow.Initializer {
          ClientSecrets = new ClientSecrets {
              ClientId = "", //< -Put your own values here
                ClientSecret = "" //< //-Put your own values here
            },
            Scopes = scopes,
            DataStore = new FileDataStore("Daimto.YouTube.Auth.Store")
        });

        TokenResponse token = new TokenResponse {
          AccessToken = "", //-Put your own values here
            RefreshToken = "", //-Put your own values here
            TokenType = "Bearer",
            ExpiresInSeconds = 3600

        };

        UserCredential credential1 = new UserCredential(flow, Environment.UserName, token);

        var youtubeService = new YouTubeService(new BaseClientService.Initializer() {
          HttpClientInitializer = credential1,
            ApplicationName = "" // //-Put your own values heree
        });

        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 = "UCycmrK4RRMNY6CTn58r6gNA"; // See https://developers.google.com/youtube/v3/docs/videoCategories/list
        video.Status = new VideoStatus();
        video.Status.PrivacyStatus = "public"; // or "private" or "public"
        var filePath = @ "C:UsersadminDownloadsbig_buck_bunny_720p_1mb.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();
        }
      } catch (Exception ex) {
        throw ex;
      }

    }

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

Ошибка, которую я получил, заключается в :

API данных YouTube: Загрузка видео

Ошибка не позволила завершить загрузку. Google.Api.Auth.OAuth2.Ответы.Исключение TokenResponseException: Ошибка:»неавторизованный клиент», Описание:»Неавторизованный», Uri:»» в Google.Api.Auth.OAuth2.Ответы.TokenResponse.d__36.MoveNext() в C:Apiary2021-02-09.10-36-01SrcSupportGoogle.Apis.AuthOAuth2ОтветыTokenResponse.cs:строка 141 — Конец трассировки стека из предыдущего местоположения, где было выдано исключение — в System.Runtime.Услуги компиляторов.Дежурный.ThrowForNonSuccess(Задача задачи) в System.Runtime.Услуги компиляторов.Дежурный.HandleNonSuccessAndDebuggerNotification(Задание задачи) в Google.Api.Auth.OAuth2.Запросы.Tokenrequestextensions.d__1.MoveNext() в C:Apiary2021-02-09.10-36-01SrcSupportGoogle.Apis.AuthOAuth2Запросыtokenrequestextensions.cs:строка 57 — Конец трассировки стека из предыдущего местоположения, где было выдано исключение — в System.Runtime.Услуги компиляторов.Дежурный.ThrowForNonSuccess(Задача задачи) в System.Runtime.Услуги компиляторов.Дежурный.HandleNonSuccessAndDebuggerNotification(задача) в Google.Api.Авт.OAuth2.Потоки.AuthorizationCodeFlow.d__35.MoveNext() в C:Apiary2021-02-09.10-36-01SrcSupportGoogle.Apis.AuthOAuth2ПотокиAuthorizationCodeFlow.cs:строка 313 — Конец трассировки стека из предыдущего места, где было выдано исключение — в Google.Api.Auth.OAuth2.Потоки.AuthorizationCodeFlow.d__35.MoveNext() в C:Apiary2021-02-09.10-36-01SrcSupportGoogle.Apis.AuthOAuth2ПотокиAuthorizationCodeFlow.cs:строка 329 — Конец трассировки стека из предыдущего местоположения, где было выдано исключение — в System.Runtime.Услуги компиляторов.Дежурный.Бросьте успешный процесс(Задание задачи) в систему.Время выполнения.Услуги компиляторов.Дежурный.HandleNonSuccessAndDebuggerNotification(Задание задачи) в Google.Api.Auth.OAuth2.Потоки.AuthorizationCodeFlow.d__31.MoveNext() в C:Apiary2021-02-09.10-36-01SrcSupportGoogle.Apis.AuthOAuth2ПотокиAuthorizationCodeFlow.cs:строка 262 — Конец трассировки стека из предыдущего местоположения, где было вызвано исключение — в System.Runtime.Услуги компиляторов.Дежурный.ThrowForNonSuccess(Задача задачи) в System.Runtime.Услуги компиляторов.Дежурный.HandleNonSuccessAndDebuggerNotification(задача) в Google.Api.Авт.OAuth2.Учетные данные пользователя.d__22.MoveNext() в C:Apiary2021-02-09.10-36-01SrcSupportGoogle.Apis.AuthOAuth2UserCredential.cs:строка 157 — Конец трассировки стека из предыдущего местоположения, где было выдано исключение — в System.Runtime.Услуги компиляторов.Дежурный.ThrowForNonSuccess(Задача задачи) в System.Runtime.Услуги компиляторов.Дежурный.HandleNonSuccessAndDebuggerNotification(Задание задачи) в Google.Api.Auth.OAuth2.TokenRefreshManager.d__12.MoveNext() в C:Apiary2021-02-09.10-36-01SrcSupportGoogle.Apis.AuthOAuth2TokenRefreshManager.resulttaskfromresulttask cs:строка 129 — Конец трассировки стека из предыдущего местоположения, где было создано исключение — в System.Runtime.Исключительные услуги.ExceptionDispatchInfo.Бросьте() в Google.Api.Auth.OAuth2.TokenRefreshManager.ResultWithUnwrappedExceptions[T](Задача 1 task) in C:Apiary2021-02-09.10-36-01SrcSupportGoogle.Apis.AuthOAuth2TokenRefreshManager.cs:line 174 at Google.Apis.Auth.OAuth2.TokenRefreshManager.<>c.<GetAccessTokenForRequestAsync>b__10_0(Task 1 задача) в C:Apiary2021-02-09.10-36-01SrcSupportGoogle.Apis.AuthOAuth2TokenRefreshManager.cs:строка 109 в системе.Нарезание резьбы.Задачи.Продолжение 2.InnerInvoke() at System.Threading.Tasks.Task.Execute() --- End of stack trace from previous location where exception was thrown --- at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at Google.Apis.Auth.OAuth2.TokenRefreshManager.<GetAccessTokenForRequestAsync>d__10.MoveNext() in C:Apiary2021-02-09.10-36-01SrcSupportGoogle.Apis.AuthOAuth2TokenRefreshManager.cs:line 114 --- End of stack trace from previous location where exception was thrown --- at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at Google.Apis.Auth.OAuth2.UserCredential.<GetAccessTokenWithHeadersForRequestAsync>d__21.MoveNext() in C:Apiary2021-02-09.10-36-01SrcSupportGoogle.Apis.AuthOAuth2UserCredential.cs:line 135 --- End of stack trace from previous location where exception was thrown --- at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at Google.Apis.Auth.OAuth2.UserCredential.<InterceptAsync>d__17.MoveNext() in C:Apiary2021-02-09.10-36-01SrcSupportGoogle.Apis.AuthOAuth2UserCredential.cs:line 92 --- End of stack trace from previous location where exception was thrown --- at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at Google.Apis.Http.ConfigurableMessageHandler.<CredentialInterceptAsync>d__71.MoveNext() in C:Apiary2021-02-09.10-36-01SrcSupportGoogle.Apis.CoreHttpConfigurableMessageHandler.cs:line 651 --- End of stack trace from previous location where exception was thrown --- at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd(Task task) at Google.Apis.Http.ConfigurableMessageHandler.<SendAsync>d__69.MoveNext() in C:Apiary2021-02-09.10-36-01SrcSupportGoogle.Apis.CoreHttpConfigurableMessageHandler.cs:line 447 --- End of stack trace from previous location where exception was thrown --- at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at Google.Apis.Upload.ResumableUpload 1.d__25.MoveNext() в C:Apiary2021-02-09.10-36-01SrcSupportGoogle.ApiUploadResumableUpload.cs:строка 1123 — Конец трассировки стека из предыдущего местоположения, где было выдано исключение — в System.Runtime.Услуги компиляторов.Дежурный.ThrowForNonSuccess(Задача задачи) в System.Runtime.Услуги компиляторов.Дежурный.HandleNonSuccessAndDebuggerNotification(Задание задачи) в Google.Api.Upload.Возобновляемая загрузка.d__67.MoveNext() в C:Apiary2021-02-09.10-36-01SrcSupportGoogle.ApiЗагрузкаВозобновляемая загрузка.cs:строка 411 Нажмите любую клавишу, чтобы продолжить…

Пожалуйста, предоставьте любые решения или предложения. Заранее спасибо..!

Комментарии:

1. Вы действительно добавили учетные данные в свое приложение или оставили их пустыми? unauthorized_client можно предположить, что вы либо не предоставляете учетные данные, либо предоставляете неверные учетные данные.