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

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

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

Требования

Создание скрипта для отправки запросов API

Следующие шаги объясняют, как создать сценарий для отправки запроса API Content ID YouTube.

Шаг 1. Создайте базовый сценарий.

Приведенный ниже сценарий принимает следующие параметры командной строки и устанавливает значения глобальной переменной FLAGS :

  • Параметр content_owner_id является обязательным и идентифицирует владельца контента CMS, информацию о котором вы получаете.
  • Параметр logging_level указывает уровень детализации журналирования для сценария.
  • Параметр help заставляет сценарий выводить список параметров, которые он понимает.
#!/usr/bin/python2.6
# -*- coding: utf-8 -*-

import gflags
import logging
import sys
import os

from datetime import *

# Define flags. The gflags module makes it easy to define command-line params
# for an application. Run this program with the '--help' argument to see all
# of the flags that it understands.
FLAGS = gflags.FLAGS
gflags.DEFINE_string('content_owner_id', None, ('Required flag. '
     'Identifies the content owner whose details are printed out.'))
gflags.MarkFlagAsRequired('content_owner_id')
gflags.DEFINE_enum('logging_level', 'ERROR',
    ['DEBUG', 'INFO', 'WARNING', 'ERROR', 'CRITICAL'],
    'Set the level of logging detail.')


def main(argv):
  # Let the gflags module process the command-line arguments
  try:
    argv = FLAGS(argv)
  except gflags.FlagsError, e:
    print '%s\nUsage: %s ARGS\n%s' % (e, argv[0], FLAGS)
    sys.exit(1)

  # Set the logging according to the command-line flag
  logging.getLogger().setLevel(getattr(logging, FLAGS.logging_level))

if __name__ == '__main__':
  main(sys.argv)

Шаг 2. Включите аутентификацию и авторизацию пользователя.

На этом этапе мы включим в скрипт авторизацию OAuth 2.0. Это позволяет пользователю, запускающему сценарий, авторизовать сценарий для выполнения запросов API, приписываемых учетной записи пользователя.

Шаг 2а. Создайте файл client_secrets.json.

Для аутентификации API Content ID YouTube требуется файл client_secrets.json , содержащий информацию из консоли API . Вам также необходимо зарегистрировать свое приложение . Более полное объяснение того, как работает аутентификация, смотрите в руководстве по аутентификации .

 {
  "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"
  }
}

Шаг 2б. Добавьте код аутентификации в свой скрипт.

Чтобы включить аутентификацию и авторизацию пользователя, вам необходимо добавить следующие операторы import :

from oauth2client.file import Storage
from oauth2client.client import flow_from_clientsecrets
from oauth2client.tools import run

Далее мы создадим объект 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, storage)

Шаг 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=FLAGS.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. Если вы авторизуете приложение, учетные данные автоматически передаются обратно в сценарий.

    python yt_partner_api.py --content_owner_id=CONTENT_OWNER_ID.

    Примечание. Значение CONTENT_OWNER_ID для вашей учетной записи можно найти на странице настроек учетной записи в вашей учетной записи CMS. Значение указано как Partner Code в разделе информации об учетной записи на этой странице.

  • Эта команда выводит URL-адрес, который вы можете открыть в браузере, а также предлагает ввести код авторизации. Когда вы переходите по URL-адресу, эта страница позволяет вам разрешить приложению отправлять запросы API от вашего имени. Если вы предоставите эту авторизацию, на странице отобразится код авторизации, который вам необходимо ввести в командной строке для завершения процесса авторизации.

    python 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/python2.6
# -*- coding: utf-8 -*-
#
# 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 Content ID API.

Command-line application that retrieves the information
about given content owner.

Usage:
  $ python yt_partner_api.py --content_owner_id=[contentOwnerId]
  $ python 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:

  $ python yt_partner_api.py --help

To get detailed log output run:

  $ python yt_partner_api.py --logging_level=DEBUG \
    --content_owner_id=[contentOwnerId]
"""

import gflags
import httplib2
import logging
import sys
import os

from datetime import *
from apiclient.discovery import build
from oauth2client.file import Storage
from oauth2client.client import flow_from_clientsecrets
from oauth2client.tools import run

# Define flags. The gflags module makes it easy to define command-line options
# for an application. Run this program with the '--help' argument to see all
# of the flags that it understands.
FLAGS = gflags.FLAGS
gflags.DEFINE_string('content_owner_id', None, ('Required flag. '
     'Identifies the content owner id whose details are printed out.'))
gflags.MarkFlagAsRequired('content_owner_id')
gflags.DEFINE_enum('logging_level', 'ERROR',
    ['DEBUG', 'INFO', 'WARNING', 'ERROR', 'CRITICAL'],
    'Set the level of logging detail.')

  
def main(argv):
  # Let the gflags module process the command-line arguments
  try:
    argv = FLAGS(argv)
  except gflags.FlagsError, e:
    print '%s\nUsage: %s ARGS\n%s' % (e, argv[0], FLAGS)
    sys.exit(1)
  
  # Set the logging according to the command-line flag
  logging.getLogger().setLevel(getattr(logging, FLAGS.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, storage)

  http = httplib2.Http()
  http = credentials.authorize(http)

  service = build("youtubePartner", "v1", http=http)
  contentOwnersService = service.contentOwners()

  # Create and execute get request.
  request = contentOwnersService.get(contentOwnerId=FLAGS.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(sys.argv)