1

Я пытаюсь загрузить трек с надписью YouTube API v3 (https://developers.google.com/youtube/v3/docs/captions/download) и официальный пакет .NET SDK nuget (https://www.nuget.org/packages/Google.Apis.YouTube.v3/, версия 1.9.0.1360).YouTube v3 API caption скачать с использованием пакета SDK nuget

Возвращенный поток содержит следующий текст:.

«Маркер OAuth был получен в строке запроса, который этот API запрещает для целей, отличных JSON или XML форматов ответа Если возможно, попробуйте отправить маркер OAuth в авторизации вместо заголовка. "

вместо текстового содержимого SRT, которое я только что загрузил и проверил вручную через интерфейс YouTube.com.

Я нашел тип ошибки: lockedDomainCreationFailure

Мой код:

... 
     _service = new YTApi.YouTubeService(new BaseClientService.Initializer { 
      ApplicationName = config.AppName, 
      ApiKey = config.DeveloperKey 
     }); 
    ... 

    public Stream CaptionsDownload(
     string accessToken, 
     string trackId 
     ) 
    { 
     var request = _service.Captions.Download(trackId); 
     request.OauthToken = accessToken; 
     request.Tfmt = YTApi.CaptionsResource.DownloadRequest.TfmtEnum.Srt; 

     var trackStream = new MemoryStream(); 
     request.Download(trackStream); 
     trackStream.Position = 0; 

     return trackStream; 
    } 

Я не могу найти способ, чтобы установить любые заголовки на _service.HttpClient, и я предполагаю, что я не должен делать это вручную. Я ожидаю, что DownloadRequest (или YouTubeBaseServiceRequest) поставит

/// <summary> 
/// OAuth 2.0 token for the current user. 
/// </summary> 
[RequestParameter("oauth_token", RequestParameterType.Query)] 
public virtual string OauthToken { get; set; } 

в правильный заголовок авторизации. Я не вижу этого в версии 1.9.0.1360.

Возможно, я что-то не замечаю? Любая помощь приветствуется.

Примечание: Я использую другие методы, связанные с надписью, с этим SDK, и «загрузка» - это единственная проблема, с которой я столкнулся.

ответ

1

Вы инициализировали службу БЕЗ учетных данных пользователя (вы использовали только ключ API). Взгляните на один из образцов в нашем developers guide (и выберите правильный поток ... используете ли вы установленное приложение, телефон для Windows и т. Д.?)

Вам придется изменить способ создания своего сервиса сделать что-то вроде следующего:

 UserCredential credential; 
     using (var stream = new FileStream("client_secrets.json", FileMode.Open, FileAccess.Read)) 
     { 
      credential = await GoogleWebAuthorizationBroker.AuthorizeAsync(
       GoogleClientSecrets.Load(stream).Secrets, 
       new[] { YoutubeService.Scope.<THE_RIGHT_SCOPE_HERE> }, 
       "user", CancellationToken.None); 
     } 

     // Create the service. 
     _service = new YouTubeService(new BaseClientService.Initializer { 
     ApplicationName = config.AppName, 
       HttpClientInitializer = credential, 
       ApplicationName = "Books API Sample", 
      }); 

Затем для каждого запроса к сервису YouTube, ваш маркер доступа OAuth будет включен в качестве дополнительного заголовка на запрос HTTP сам.

+0

Я использую серверное приложение, и мой поток OAuth2 был реализован до выхода v3, и я начал использовать SDK. Брокер auth не работает для меня - пошел с http://stackoverflow.com/questions/27573272/googlewebauthorizationbroker-authorizeasync-hangs. –

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