Observação: a API Content ID do YouTube é destinada ao uso por parceiros de conteúdo do YouTube e não é acessível para todos os desenvolvedores ou usuários do YouTube. Se a API Content ID do YouTube não estiver listada no Console de APIs do Google, acesse a Central de Ajuda do YouTube para saber mais sobre o Programa de Parcerias do YouTube.
Este tutorial passo a passo explica como criar um script que se conecta ao ContentOwnersService
e recupera informações sobre um determinado proprietário de 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
- Python 2.5 ou superior
- google-api-python-client
Criar um script para enviar solicitações de API
As etapas a seguir explicam como criar um script para enviar uma solicitação da API Content ID do YouTube:
Etapa 1: criar o script básico
O script a seguir aceita os seguintes parâmetros de linha de comando e define valores na variável FLAGS
global:
- O parâmetro
content_owner_id
é obrigatório e identifica o proprietário do conteúdo do CMS sobre o qual você está recuperando informações. - O parâmetro
logging_level
especifica o nível de detalhe da geração de registros para o script. - O parâmetro
help
faz com que o script gere uma lista com os 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 Content ID do YouTube exige um arquivo client_secrets.json
, que contém informações do Console de APIs, para realizar a autenticação. Você também precisa registrar o aplicativo. Para uma explicação mais completa sobre 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 o código de autenticação ao script
Para ativar a autenticação e autorização do usuário, é necessário adicionar as seguintes instruções import
:
from oauth2client.file import Storage from oauth2client.client import flow_from_clientsecrets from oauth2client.tools import run
Em seguida, vamos criar um objeto FLOW
usando as chaves secretas do cliente configuradas na etapa 2a. Se o usuário autorizar nosso 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 fim 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 as solicitações de API, e anexamos 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 do Python constrói um recurso que pode interagir com uma API. Depois que o usuário autoriza nosso aplicativo, criamos 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 fim 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 completo 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: o valor
CONTENT_OWNER_ID
da sua conta está disponível na página Configurações da conta da sua conta do CMS. O valor aparece comoPartner Code
na seção de informações da conta na 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âmetronoauth_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)