Примечание: API данных YouTube предназначен для использования партнерами YouTube по контенту и недоступен всем разработчикам или всем пользователям YouTube. Для доступа требуется учетная запись менеджера контента YouTube. Если у вас есть учетная запись менеджера контента YouTube, но вы не видите API данных YouTube в списке сервисов в консоли Google Cloud , обратитесь к своему назначенному менеджеру по работе с партнерами или в службу поддержки партнеров.
В этом пошаговом руководстве объясняется, как создать скрипт, который подключается к ContentOwnersService и получает информацию о заданном владельце контента. Полный пример кода приведен в конце руководства. Хотя этот код написан на Python, доступны также клиентские библиотеки для других популярных языков программирования.
Требования
- Python 3.7 или выше
- google-api-python-client
Создание скрипта для отправки API-запросов.
Следующие шаги описывают, как создать скрипт для отправки запроса к API данных YouTube:
Шаг 1: Создайте базовый скрипт
Следующий скрипт принимает следующие аргументы командной строки:
- Параметр
content_owner_idявляется обязательным и идентифицирует владельца контента CMS, о котором вы получаете информацию. - Параметр
logging_levelопределяет уровень детализации логирования для скрипта. - Параметр
helpзаставляет скрипт выводить список параметров, которые он понимает.
#!/usr/bin/env python3 import argparse import logging import sys # Define command-line arguments using argparse. Run this program with # the '--help' argument to see all parameters that it understands. parser = argparse.ArgumentParser( description='Simple command-line sample for YouTube Data API.') parser.add_argument( '--content_owner_id', required=True, help='Required. Identifies the content owner whose details are printed out.') parser.add_argument( '--logging_level', default='ERROR', choices=['DEBUG', 'INFO', 'WARNING', 'ERROR', 'CRITICAL'], help='Set the level of logging detail.') def main(): args = parser.parse_args() # Set the logging according to the command-line flag logging.getLogger().setLevel(getattr(logging, args.logging_level)) if __name__ == '__main__': main()
Шаг 2: Включите аутентификацию и авторизацию пользователей.
На этом этапе мы интегрируем авторизацию OAuth 2.0 в скрипт. Это позволит пользователю, запускающему скрипт, авторизовать его для выполнения API-запросов, относящихся к учетной записи этого пользователя.
Шаг 2a: Создайте файл client_secrets.json
Для работы API данных YouTube требуется файл client_secrets.json , содержащий информацию из консоли Cloud , для выполнения аутентификации. Вам также необходимо зарегистрировать свое приложение . Более подробное объяснение принципа работы аутентификации см. в руководстве по аутентификации .
{ "web": { "client_id": "INSERT CLIENT ID HERE", "client_secret": "INSERT CLIENT SECRET HERE", "redirect_uris": [], "auth_uri": "https://accounts.google.com/o/oauth2/auth", "token_uri": "https://accounts.google.com/o/oauth2/token" } }
Шаг 2b: Добавьте код аутентификации в свой скрипт.
Для включения аутентификации и авторизации пользователей необходимо добавить следующие операторы import :
from datetime import datetime from oauth2client.file import Storage from oauth2client.client import flow_from_clientsecrets from oauth2client.tools import argparser, run_flow
Далее мы создадим объект FLOW используя секреты клиента, настроенные на шаге 2a. Если пользователь разрешит нашему приложению отправлять API-запросы от его имени, полученные учетные данные будут сохранены в объекте Storage для последующего использования. Пользователю потребуется повторно авторизовать наше приложение, если срок действия учетных данных истечет.
Добавьте следующий код в конец main функции:
# Set up a Flow object to be used if we need to authenticate. FLOW = flow_from_clientsecrets('client_secrets.json', scope='https://www.googleapis.com/auth/youtubepartner', message='error message') # The Storage object stores the credentials. If it doesn't exist, or if # the credentials are invalid or expired, run through the native client flow. storage = Storage('yt_partner_api.dat') credentials = storage.get() if (credentials is None or credentials.invalid or credentials.token_expiry <= datetime.now()): credentials = run_flow(FLOW, storage, args)
Шаг 2c: Создайте объект httplib2 и прикрепите к нему учетные данные.
После того, как пользователь авторизует наш скрипт, мы создаём объект httplib2.Http , который обрабатывает запросы к API, и прикрепляем к этому объекту учетные данные для авторизации.
Добавьте следующую инструкцию импорта:
import httplib2
И добавьте этот код в конец main функции:
# Create httplib2.Http object to handle HTTP requests and # attach auth credentials. http = httplib2.Http() http = credentials.authorize(http)
Шаг 3: Получите услугу
Функция build клиентской библиотеки Python создает ресурс, который может взаимодействовать с API. После авторизации нашего приложения пользователем мы создаем объект service , который предоставляет методы для взаимодействия с ContentOwnerService .
Добавьте следующую инструкцию импорта:
from apiclient.discovery import build
И добавьте этот код в конец main функции:
service = build("youtubePartner", "v1", http=http, static_discovery=False) contentOwnersService = service.contentOwners()
Шаг 4: Выполните запрос к API.
Теперь мы создадим запрос к сервису и выполним его. Следующий код создает и выполняет запрос contentOwnersService.get() , который извлекает информацию об указанном владельце контента.
Добавьте этот код в конец main функции:
# Create and execute get request. request = contentOwnersService.get(contentOwnerId=args.content_owner_id) content_owner_doc = request.execute(http) print('Content owner details: id: %s, name: %s, notification email: %s' % ( content_owner_doc['id'], content_owner_doc['displayName'], content_owner_doc['disputeNotificationEmails']))
Заполните заявку
В этом разделе представлено полное приложение с некоторой информацией о лицензировании и дополнительными комментариями в скрипте. Программа запускается двумя способами:
Эта команда запускает окно браузера, через которое вы можете пройти аутентификацию, если это необходимо, и разрешить приложению отправлять запросы к API. Если вы авторизуете приложение, учетные данные автоматически передаются обратно скрипту.
python3 yt_partner_api.py --content_owner_id=CONTENT_OWNER_ID
Примечание: значение
CONTENT_OWNER_IDдля вашей учетной записи можно найти на странице «Настройки учетной записи» в вашей учетной записи CMS. Это значение указано как «Partner Codeв разделе информации об учетной записи на этой странице.Эта команда выводит URL-адрес, который можно открыть в браузере, а также запрашивает ввод кода авторизации. При переходе по URL-адресу на этой странице вы можете авторизовать приложение для отправки API-запросов от вашего имени. Если вы предоставите эту авторизацию, на странице отобразится код авторизации, который необходимо ввести в появившемся окне для завершения процесса авторизации.
python3 yt_partner_api.py --content_owner_id=CONTENT_OWNER_ID --noauth_local_webserver
Примечание: Модуль
oauth2clientраспознает параметрnoauth_local_webserver, даже если он не указан в скрипте.
client_secrets.json
{ "web": { "client_id": "INSERT CLIENT ID HERE", "client_secret": "INSERT CLIENT SECRET HERE", "redirect_uris": [], "auth_uri": "https://accounts.google.com/o/oauth2/auth", "token_uri": "https://accounts.google.com/o/oauth2/token" } }
yt_partner_api.py
#!/usr/bin/env python3 # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. """Simple command-line sample for YouTube Data API. Command-line application that retrieves the information about given content owner. Usage: $ python3 yt_partner_api.py --content_owner_id=[contentOwnerId] $ python3 yt_partner_api.py --content_owner_id=[contentOwnerId] --noauth_local_webserver You can also get help on all the command-line flags the program understands by running: $ python3 yt_partner_api.py --help To get detailed log output run: $ python3 yt_partner_api.py --logging_level=DEBUG \ --content_owner_id=[contentOwnerId] """ import argparse from datetime import datetime import logging import os import sys from apiclient.discovery import build import httplib2 from oauth2client.client import flow_from_clientsecrets from oauth2client.file import Storage from oauth2client.tools import argparser, run_flow # Define parser. parser = argparse.ArgumentParser( parents=[argparser], description='Simple command-line sample for YouTube Data API.') parser.add_argument( '--content_owner_id', required=True, help='Required. Identifies the content owner id whose details are printed out.') parser.add_argument( '--logging_level', default='ERROR', choices=['DEBUG', 'INFO', 'WARNING', 'ERROR', 'CRITICAL'], help='Set the level of logging detail.') def main(): args = parser.parse_args() # Set the logging according to the command-line flag logging.getLogger().setLevel(getattr(logging, args.logging_level)) # Set up a Flow object to be used if we need to authenticate. FLOW = flow_from_clientsecrets('client_secrets.json', scope='https://www.googleapis.com/auth/youtubepartner', message='error message') # The Storage object stores the credentials. If the credentials are invalid # or expired and the script isn't working, delete the file specified below # and run the script again. storage = Storage('yt_partner_api.dat') credentials = storage.get() if (credentials is None or credentials.invalid or credentials.token_expiry <= datetime.now()): credentials = run_flow(FLOW, storage, args) http = httplib2.Http() http = credentials.authorize(http) service = build("youtubePartner", "v1", http=http, static_discovery=False) contentOwnersService = service.contentOwners() # Create and execute get request. request = contentOwnersService.get(contentOwnerId=args.content_owner_id) content_owner_doc = request.execute(http) print('Content owner details: id: %s, name: %s, notification email: %s' % ( content_owner_doc['id'], content_owner_doc['displayName'], content_owner_doc['disputeNotificationEmails'])) if __name__ == '__main__': main()