2016-09-02 3 views
0

Я запускаю процесс без интерфейса, который извлекает загруженные видео с youtube. На машине разработки он аутентифицируется от имени пользователя, и он работает.Authenticate Youtube API для рабочего процесса C#

Проблема заключается в том, что процесс запускается на сервере: окно браузера не запускает для пользователя возможность использовать его учетную запись (для этого требуется только один раз).

Средство просмотра событий не содержит никаких ошибок. Учетные записи служб, похоже, не работают с youtube, с ключом API слишком меньше разрешений и клятва - единственный способ аутентификации и трансляции видео. Или я ошибаюсь?

Итак, вопрос: как запустить службу как одного пользователя и получить его видео без пользовательского интерфейса?

  private async Task Run() 
       { 

        try 
        { 
         UserCredential credential; 
         using (var stream = new FileStream(StartPath + "\\client_secrets.json", FileMode.Open, FileAccess.Read)) 
         { 

          credential = await GoogleWebAuthorizationBroker.AuthorizeAsync(
           GoogleClientSecrets.Load(stream).Secrets, 
           new[] { YouTubeService.Scope.YoutubeReadonly, YouTubeService.Scope.Youtube }, 
           "user", 
           CancellationToken.None, 
           new FileDataStore("Store") 
          ); 
         } 

         var youtubeService = new YouTubeService(new BaseClientService.Initializer() 
         { 
          HttpClientInitializer = credential, 
          ApplicationName = this.GetType().ToString() 
         }); 
    .... 
       } 

Я также попытался:

String serviceAccountEmail = "e-mail"; 

      var certificate = new X509Certificate2(HostingEnvironment.MapPath("~/Content/key.p12"), "notasecret", X509KeyStorageFlags.Exportable); 

      ServiceAccountCredential credential = new ServiceAccountCredential(
       new ServiceAccountCredential.Initializer(serviceAccountEmail) 
       { 
        Scopes = new[] { YouTubeService.Scope.Youtube, YouTubeService.Scope.YoutubepartnerChannelAudit, YouTubeService.Scope.YoutubeUpload } 
       }.FromCertificate(certificate)); 
      var youtubeService = new YouTubeService(new BaseClientService.Initializer() 
      { 
       HttpClientInitializer = credential, 
       ApplicationName = "api", 
      }); 

ответ

0

API данных YouTube позволяет встраивать функции, которые обычно выполняются на веб-сайте YouTube в свой собственный веб-сайт или приложение. В приведенных ниже списках указаны различные типы ресурсов, которые вы можете получить с помощью API. API также поддерживает методы вставки, обновления или удаления многих из этих ресурсов.

В этом справочном руководстве объясняется, как использовать API для выполнения всех этих операций. Руководство организовано по типу ресурсов. Ресурс представляет собой элемент, который включает часть опыта YouTube, например видео, плейлист или подписку. Для каждого типа ресурсов руководство перечисляет одно или несколько представлений данных, а ресурсы представлены как объекты JSON. В руководстве также перечислены один или несколько поддерживаемых методов (LIST, POST, DELETE, etc.) для каждого типа ресурсов и объясняется, как использовать эти методы в приложении.

применяются следующие требования к запросам API данных YouTube:

  • Каждый запрос должен либо указать ключ API (с ключевым параметром) или обеспечивать OAuth 2.0 маркер. Ключ API можно получить в панели Developer Console'sAPI Access для вашего проекта.

  • Вы должны отправить токен авторизации для каждого запроса на вставку, обновление и удаление. Вы также должны отправить токен авторизации для любого запроса, который извлекает личные данные аутентифицированного пользователя.

Кроме того, некоторые методы API для извлечения ресурсов могут поддерживать параметры, требующие авторизации, или могут содержать дополнительные метаданные при разрешении запросов. Например, запрос на получение загруженных видео пользователя может также содержать частные видеоролики, если запрос разрешен этим конкретным пользователем.

  • API поддерживает протокол аутентификации OAuth 2.0. Вы можете указать токен OAuth 2.0 одним из следующих способов:

  • Используйте параметр запроса access_token следующим образом:?access_token=oauth2-token

  • Используйте HTTP Authorization заголовок так: Authorization: Bearer oauth2-token Полные инструкции по реализации аутентификации OAuth 2.0 в приложении можно найти в authentication guide.
0

Так что мне удалось обойти эту ситуацию, создав консольную прикладную программу, которая делает эту вещь. Механизм аутентификации перешел в консольное приложение и передал результаты службе. В сервисе вы делали вызов в это приложение каждые n секунд. Это решение работало как шарм. Уродливый, но это сработало. Теперь я могу предоставить доступ к данным профиля и использовать его там, где я хочу. Если у кого-то будет лучшее решение, я был бы рад прочитать его.

Смежные вопросы