Youtube Data API v.3 - полностью автоматизированный поток oAuth (Python)? - PullRequest
0 голосов
/ 24 сентября 2019

Я изучал API данных YouTube.Суть моего проекта проста: с помощью API выполнить аутентификацию (да, у меня есть учетные данные для учетной записи), а затем просто получить список всех моих видео, как публичных, так и приватных.

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

Это выглядит примерно так:

Пожалуйста, посетите этот URL, чтобы авторизовать это приложение: https://accounts.google.com/o/oauth2/auth?response_type=code&client_id=7932902759886-cb8ai84grcqshe24nn459ka46uh45ssj.apps.googleusercontent.com&redirect_uri=urn%3Aietf%3Awg%3Aoauth%3A2.0%3Aoob&scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fyoutube.readonly&state=zNVvgEyO47nmacvdEEAhDsQipY194k&prompt=consent&access_type=offline&code_challenge=aF7uTCghjwgwjg49o3fgiIU-_ryK19rDeX4l1uzr37w&code_challenge_method=S256 Введите код авторизации:

....

Вот фрагмент моего кода Python:

import google_auth_oauthlib.flow
import googleapiclient.discovery
import googleapiclient.errors
...
...

# Get credentials and create an API client
flow = google_auth_oauthlib.flow.InstalledAppFlow.from_client_secrets_file(
    client_secrets_file, scopes)
credentials = flow.run_console()
youtube = googleapiclient.discovery.build(
    api_service_name, api_version, credentials=credentials)
## MAKE youtube SEARCH REQUEST
last_date = '2018-10-01T00:00:00Z'
request = youtube.search().list(
    part="snippet",
    forMine=True,
    maxResults=50,
    order="date",
    type="video"
)
all_items = []
response = request.execute()

Мой вопрос здесь следующий: Можно ли программно выполнить авторизацию, чтобы приложение могло работать автономно и не ждать этого действия пользователя (буквально скопировать URL-адрес изCMD, зайдите, чтобы получить токен, а затем скопируйте и снова вставьте токен)?Я хотел бы запланировать это и, следовательно, хотел бы, чтобы он запускался и аутентифицировался без вмешательства человека.Это вообще возможно?Если это так, Может кто-нибудь указать мне некоторые рабочие примеры и / или другие ресурсы, чтобы помочь мне туда добраться?Спасибо миллион.

1 Ответ

0 голосов
/ 24 сентября 2019

скопировано с https://developers.google.com/identity/protocols/OAuth2InstalledApp

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

На этом этапе вашему приложению не нужно ничего делать, так как он ожидает ответа от сервера Google OAuth 2.0, указывающего, был ли предоставлен доступ.Этот ответ объясняется на следующем шаге.

Где это важно:

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

Так что, по крайней мере, как я понимаю, то, что вы хотите сделать, не следует делать из соображений безопасности.Тем не менее: вы можете «симулировать» браузер тем, что у python есть библиотеки для этого.С другой стороны: как только вы получите токен авторизации, вы можете использовать его повторно вместо того, чтобы каждый раз запрашивать новый токен.Я не смог найти его в предоставленном документе на GitHub, но Java в качестве примера поддерживает сохранение полученного токена вместе с его токеном обновления, чтобы его можно было повторно использовать после получения и автоматического обновления.Возможно, python предоставляет какой-то способ хранения полученного токена (проверьте, содержит ли он токен обновления) и перезагрузите его.Также: если вы загружаете такой токен, сначала вам нужно обновить его перед использованием.Java предоставляет способ просто сохранить токен обновления вместо всего токена авторизации, который можно использовать в дальнейшем для автоматического получения нового токена авторизации.Поскольку ответом является JSON, возможно, вы могли бы создать его самостоятельно, если библиотека еще не предлагает этого.

// edit

В дополнение к https://github.com/googleapis/google-auth-library-python/blob/master/google/oauth2/credentials.py Есть методы для загрузкиобъект учетных данных либо из "информации об авторизованном пользователе" (которую я также где-то нашел, можно загрузить из файла), либо загрузить его непосредственно из файла.Итак, я думаю, вам просто нужно выяснить, как хранить токен.Как говорит doc для from_authorized_user_file:

Создает экземпляр Credentials из файла json авторизованного пользователя.

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

...