YouTube API v3, перечисляющий плейлистItems, всегда нуждается в OAuth - PullRequest
1 голос
/ 04 мая 2020

Я уже некоторое время работаю над этой проблемой,

Я использую API YouTube для вывода списка всех элементов списка воспроизведения в канале, я прочитал это ниже: API данных Youtube - Как избегайте авторизации URL-адреса перенаправления Google OAuth

Но мне все равно нужно открывать браузер и выполнять проверку подлинности моей программы для доступа к моей собственной учетной записи YouTube при каждом запуске.

Согласно этой странице: https://developers.google.com/youtube/v3/getting-started

4. If your application will use any API methods that require user authorization, 
read the authentication guide to learn how to implement OAuth 2.0 authorization.

Все, что мне нужно, это перечислить все доступные видео на канале.

Примеры кодов предоставлены Google:

import os
import google_auth_oauthlib.flow
import googleapiclient.discovery
import googleapiclient.errors
from google_auth_oauthlib.flow import Flow

scopes = ["https://www.googleapis.com/auth/youtube.readonly"]

def main():
    os.environ["OAUTHLIB_INSECURE_TRANSPORT"] = "1"

    api_service_name = "youtube"
    api_version = "v3"
    client_secrets_file = "CREDFILE.json"

    # 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)

    request = youtube.playlistItems().list(
        part="snippet",
        maxResults=30,
        playlistId="PLAYLISTID"
    )
    response = request.execute()

    print(response)

if __name__ == "__main__":
    main()

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

Кажется, что credentials = flow.run_console() вызвало это, возможно ли использование другого метода для получения учетных данных?

Ответы [ 2 ]

0 голосов
/ 04 мая 2020

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

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

Со страницы https://developers.google.com/youtube/v3/docs

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

Ваш HTTP-вызов будет выглядеть следующим образом:

https://www.googleapis.com/youtube/v3/playlistItems?part=contentDetails&playlistId=PLeskMkEaHJYc_B6QFIaEwps1LXUpXx0_s&maxResults=50&key=[API_KEY]
0 голосов
/ 04 мая 2020

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

Вы всегда должны будете дать согласие хотя бы один раз, с YouTube API это никак не обойти.

Другой вопрос, который вы просматриваете ( API данных Youtube - Как избежать авторизации URL-адреса перенаправления Google OAuth ), объясняет, что только один раз токен refre sh сохраняется только тогда, когда он вам не нужен загрузить его снова. Это возможно с клиентской библиотекой Google api Java, поскольку в эту библиотеку встроено хранилище учетных данных пользователя.

Вам придется кодировать нечто подобное в клиентской библиотеке python, которая, я думаю, не поддерживает это.

...