Отправка первого запроса

Примечание: API данных YouTube предназначен для использования партнерами YouTube по контенту и недоступен всем разработчикам или всем пользователям YouTube. Для доступа требуется учетная запись менеджера контента YouTube. Если у вас есть учетная запись менеджера контента YouTube, но вы не видите API данных YouTube в списке сервисов в консоли Google Cloud , обратитесь к своему назначенному менеджеру по работе с партнерами или в службу поддержки партнеров.

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

Требования

Создание скрипта для отправки 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()