Примечание. API Content ID YouTube предназначен для использования контент-партнерами YouTube и доступен не всем разработчикам и не всем пользователям YouTube. Если вы не видите API Content ID YouTube в качестве одной из служб, перечисленных в консоли API Google , посетите Справочный центр YouTube , чтобы узнать больше о Партнерской программе YouTube.
В этом пошаговом руководстве объясняется, как создать сценарий, который подключается к ContentOwnersService и получает информацию о данном владельце контента. Полный пример кода приведен в конце руководства. Хотя этот код написан на Python, также доступны клиентские библиотеки для других популярных языков программирования.
Требования
- Питон 2.5 или выше
- google-api-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)
Примечание. API Content ID YouTube предназначен для использования контент-партнерами YouTube и доступен не всем разработчикам и не всем пользователям YouTube. Если вы не видите API Content ID YouTube в качестве одной из служб, перечисленных в консоли API Google , посетите Справочный центр YouTube , чтобы узнать больше о Партнерской программе YouTube.
В этом пошаговом руководстве объясняется, как создать сценарий, который подключается к ContentOwnersService и получает информацию о данном владельце контента. Полный пример кода приведен в конце руководства. Хотя этот код написан на Python, также доступны клиентские библиотеки для других популярных языков программирования.
Требования
- Питон 2.5 или выше
- google-api-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)