2016-05-17 3 views
3

Я пытаюсь извлечь субтитры из видео YouTube с помощью API данных YouTube (v3) https://developers.google.com/youtube/v3/guides/implementation/captionsYouTube API без пользовательского процесса OAuth

Итак, сначала я попытался получить список субтитров, используя этот адрес: https://www.googleapis.com/youtube/v3/captions?part=snippet&videoId=KK9bwTlAvgo&key= {Моего API KEY}

Я мог бы получить идентификатор подписи, который я хотел бы скачать (jEDP-pmNCIqoB8QGlXWQf4Rh3faalD_l) из приведенной выше ссылки.

Затем я следовал этой инструкции, чтобы загрузить подпись: https://developers.google.com/youtube/v3/docs/captions/download

Однако, даже если я ввести заголовок идентификатор и мой ключ API правильно, он показывает ошибку «Логин требуется».

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

Мой вопрос: есть ли способ обработать аутентификацию OAuth только один раз, чтобы получить токен доступа моей учетной записи YouTube, а затем повторно использовать его, когда мне это нужно в моем приложении?

+0

У меня также есть эта проблема. Меня действительно раздражает, что API позволяет вам делать практически все остальное через Key, но затем спонтанно ожидает, что пользователи также будут загружать OAuth2-Creds только потому, что по какой-то причине их ужасным машинным переводам требуются номер вашей водительской лицензии, паспорт, 3 последних телефонных счета, доказательство вашего адреса, фотографии высокого разрешения. Кстати, страница API, похоже, не упоминает об этом повышенном требовании безопасности ... – 1owk3y

ответ

8

Я не могу говорить с разрешениями, необходимыми для API подписей, в частности, но в общем, да, вы можете использовать OAuth для своего приложения один раз, используя свою собственную учетную запись, и использовать токены доступа и обновления, чтобы сделать следующий OAuth'd запросы к API. Вы можете найти подробную информацию о генерации токенов здесь:

https://developers.google.com/youtube/v3/guides/auth/server-side-web-apps#Obtaining_Access_Tokens

Чтобы выполнить действия вручную (к счастью, вам нужно только сделать это один раз):

  1. Если доступ уже предоставляется на приложения, его необходимо удалить, чтобы можно было установить новые учетные данные. Перейдите к https://security.google.com/settings/security/permissions (во время входа в свою учетную запись) и удалите доступ к приложению. Если идентификатор клиента или секретное изменение (или вам необходимо создать), найдите их в https://console.developers.google.com в Менеджере API.
  2. Чтобы предоставить доступ и получить временный код, введите этот URL в браузере:

    https://accounts.google.com/o/oauth2/auth? 
    client_id=<client_id>& 
    redirect_uri=http://www.google.com& 
    scope=https://www.googleapis.com/auth/youtube.force-ssl& 
    response_type=code& 
    access_type=offline& 
    approval_prompt=force 
    

    Следуйте подсказкам, чтобы предоставить доступ к приложению.

  3. Это перенаправит на google.com параметр code (например, https://www.google.com/?code=4/ux5gNj-_mIu4DOD_gNZdjX9EtOFf&gws_rd=ssl#). Сохраните код.
  4. Отправить запрос POST (например, с помощью Postman Chrome plugin), чтобы https://accounts.google.com/o/oauth2/token следующее в теле запроса:

    code=<code>& 
    client_id=<client_id>& 
    client_secret=<client_secret>& 
    redirect_uri=http://www.google.com& 
    grant_type=authorization_code 
    
  5. Ответ будет содержать как маркер доступа и обновить маркер. Сохраните оба, но особенно токен обновления (поскольку токен доступа истечет через 1 час).

Вы можете использовать маркер доступа, чтобы отправить запрос OAuth'd вручную, следуя один из вариантов here, по сути:

curl -H "Authorization: Bearer ACCESS_TOKEN" https://www.googleapis.com/youtube/v3/captions/<id> 

или

curl https://www.googleapis.com/youtube/v3/captions/<id>?access_token=ACCESS_TOKEN 

(Когда я попытался второй вариант для титров, однако, я получил сообщение: «Тоник OAuth был получен в строке запроса, который этот API запрещает для форматов ответов, отличных от JSON или XML. По возможности попробуйте отправить токен OAuth в Autho rization header вместо. ")

Вы также можете использовать токен обновления в своем коде для создания учетных данных, необходимых при создании объекта YouTube. В Java, это выглядит следующим образом:

String clientId = <your client ID> 
String clientSecret = <your client secret> 
String refreshToken = <refresh token> 

HttpTransport transport = new NetHttpTransport(); 
JsonFactory jsonFactory = new JacksonFactory(); 

GoogleCredential credential = new GoogleCredential.Builder() 
    .setTransport(transport) 
    .setJsonFactory(jsonFactory) 
    .setClientSecrets(clientId, clientSecret) 
    .build() 
    .setRefreshToken(refreshToken); 

try { 
    credential.refreshToken(); 
} catch (IOException e) { 
    e.printStackTrace(); 
} 

youtube = new YouTube.Builder(transport, jsonFactory, credential).build(); 

Я полагаю, что вы можете сделать что-то подобное в Python с API Client Libraries, хотя я не пробовал Python.

+0

Спасибо за эту запись @Tyler C., вы избавили меня от огромного количества боли! –

+0

На втором этапе я получил «Ошибка 400: redirect_uri_mismatch» (я использовал идентификатор клиента и секрет для серверных веб-приложений). Когда я попытался получить идентификатор клиента для приложения Android, вместо этого, тогда я не получу секретов для шага 4. Что может быть решением? – Elia12345

+1

@ Elia12345 Я не уверен, что вызывает вашу проблему, но обсуждение здесь может быть полезным: http://stackoverflow.com/questions/11485271. Возможно, вам потребуется добавить «разрешенный URI перенаправления» для вашего идентификатора клиента в консоли разработчиков Google (https://console.developers.google.com/). –

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