2017-02-11 11 views
0

Я использую YouTube API v3 для загрузки видео на YouTube. В настоящее время я могу загрузить видео, обновить заголовок и описание, но для меня очень важно снять флажок (логическое ложное) свойство NotifySubscribers.C# Setting NotifySubscribers на YouTube.Videos.Insert с API YouTube v3

Я смог найти документацию here и here, но без каких-либо примеров реализации, я чувствую себя довольно потерянным.

Ниже приведен код, который я в настоящее время, который способен успешно загружать, не устанавливая NotifySubscribers ложь:

 private async Task Run() 
     { 
      UserCredential credential; 
      using (var stream = new FileStream("youtube_client_secret.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 = "test"; 
      video.Snippet.Description = "test description"; 
      video.Status = new VideoStatus(); 
      video.Status.PrivacyStatus = "unlisted"; // or "private" or "public" 
      var filePath = @"D:\directory\YoutubeUploader\2017-02-05_02-01-32.mp4"; 
      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; 
      } 
     } 

Я бы подумал, что установка этого значения было бы столь же просто, как установка названия, конфиденциальности статус и другие, но это, похоже, не так. Я никогда не делал никакого реального углубленного кодирования на C#, поэтому некоторые из этих концепций для меня довольно новы.

+0

Попробуйте изменить статус конфиденциальности для общественности, это [форум] (https://productforums.google.com/forum/# ! topic/youtube/GjIoVHR3f7M; context-place = themesearchin/youtube/category $ 3Asafari) обсудили, что любая загрузка видео в качестве частного/незарегистрированного может привести к тому, что подписчики не будут уведомлены. Также проверьте свой канал YouTube, если вы вручную отметили подписчика уведомлений для каждой сделанной вами загрузки. По умолчанию [notifySubscribers] (https://developers.google.com/youtube/v3/docs/videos/insert#parameters) установлено значение ** True **. –

ответ

0

Оказывается, это невозможно с текущим пакетом NuGet для Google.Apis.YouTube.v3 (1.21.0.760). Похоже, что они оставили много методов из .dll, что приводит к очень ограниченной функциональности. Чтобы обойти это, я взял код из this репозитория GitHub и поместил его в свой собственный .cs-файл. Затем я смог вызвать все методы в этом файле. Как только это было сделано, все, что я должен был сделать, чтобы изменить этот параметр был следующим:

videosInsertRequest.NotifySubscribers = false;