Como enviar uma primeira solicitação

Observação: a API Content ID do YouTube é destinada a parceiros de conteúdo do YouTube e não pode ser acessada por todos os desenvolvedores ou usuários do YouTube. Se você não encontrar a API Content ID do YouTube como um dos serviços listados no Console de APIs do Google, consulte a Central de Ajuda do YouTube para saber mais sobre o Programa de Parcerias do YouTube.

Neste tutorial detalhado, explicamos como criar um script que se conecta ao ContentOwnersService e recupera informações sobre um determinado proprietário do conteúdo. Uma amostra de código completa está disponível no final do tutorial. Este código é escrito em Python, mas há também bibliotecas cliente disponíveis para outras linguagens de programação populares.

Requisitos

Criar um script para enviar solicitações de API

As etapas a seguir explicam como criar um script para enviar uma solicitação de API de Content ID do YouTube.

Etapa 1: criar o script básico

O script abaixo aceita os parâmetros de linha de comando a seguir e define os valores na variável FLAGS global:

  • O parâmetro content_owner_id é obrigatório e identifica o proprietário do conteúdo do CMS do qual você está recuperando informações.
  • O parâmetro logging_level especifica o nível de detalhes de geração de registros do script.
  • O parâmetro help faz com que o script gere uma lista dos parâmetros que ele entende.
#!/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)

Etapa 2: ativar a autenticação de usuário e autorização

Nesta etapa, incorporaremos a autorização do OAuth 2.0 no script. Ela possibilita ao usuário executar o script para autorizar solicitações de API atribuídas à conta do usuário.

Etapa 2a: criar um arquivo client_secrets.json

A API do Content ID do YouTube exige um arquivo client_secrets.json, que contém informações do Console de API, para realizar a autenticação. Você também precisa registrar seu aplicativo. Para uma explicação mais completa de como funciona a autenticação, consulte o guia de autenticação.

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

Etapa 2b: adicionar código de autenticação ao script

Para ativar a autenticação e a autorização do usuário, é necessário adicionar estas instruções import:

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

Em seguida, criaremos um objeto FLOW usando as chaves secretas do cliente configuradas na etapa 2a. Se o usuário autorizar o aplicativo a enviar solicitações de API em nome dele, as credenciais resultantes serão armazenadas em um objeto Storage para uso posterior. O usuário precisará reautorizar nosso aplicativo caso as credenciais expirem.

Adicione o seguinte código ao final da função 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)

Etapa 2c: criar o objeto httplib2 e anexar credenciais

Depois que o usuário autoriza nosso script, criamos um objeto httplib2.Http, que processa solicitações de API e anexa as credenciais de autorização a esse objeto.

Adicione a seguinte declaração de importação:

  import httplib2

E adicione este código ao final da função main:

  # Create httplib2.Http object to handle HTTP requests and
  # attach auth credentials.
  http = httplib2.Http()
  http = credentials.authorize(http)

Etapa 3: obter um serviço

A função build da biblioteca de cliente Python constrói um recurso que pode interagir com uma API. Depois que o usuário autorizar o aplicativo, vamos criar o objeto service, que fornece métodos para interagir com o ContentOwnerService.

Adicione a seguinte declaração de importação:

from apiclient.discovery import build

E adicione este código ao final da função main:

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

Etapa 4: executar uma solicitação de API

Agora, vamos criar uma solicitação de serviço e executá-la. O código a seguir cria e executa uma solicitação contentOwnersService.get(), que recupera informações sobre o proprietário do conteúdo especificado.

Adicione este código ao final da função 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'])

Finalizar o aplicativo

Esta seção mostra o aplicativo finalizado com algumas informações de licenciamento e comentários adicionais no script. Há duas formas de executar o programa:

  • Este comando abre uma janela do navegador por meio da qual você pode autenticar, se necessário, e autorizar o aplicativo a enviar solicitações de API. Se você autorizar o aplicativo, as credenciais serão automaticamente transmitidas de volta ao script.

    python yt_partner_api.py --content_owner_id=CONTENT_OWNER_ID.

    Observação:você encontra o valor CONTENT_OWNER_ID na página Configurações da conta na sua conta do CMS. O valor é listado como Partner Code na seção de informações da conta da página.

  • Este comando gera um URL que pode ser aberto em um navegador e também solicita que você digite um código de autorização. Ao navegar até o URL, a página permite que você autorize o aplicativo para enviar solicitações de API em seu nome. Se você conceder essa autorização, a página exibirá o código de autorização que você precisa digitar assim que solicitado para finalizar o fluxo de autorização.

    python yt_partner_api.py --content_owner_id=CONTENT_OWNER_ID --noauth_local_webserver.

    Observação:o módulo oauth2client reconhece o parâmetro noauth_local_webserver, mesmo que ele não seja mencionado no script.

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)