Nota: La API de Content ID de YouTube está diseñada para que la usen los socios de contenido de YouTube, y no todos los desarrolladores ni todos los usuarios de YouTube pueden acceder a ella. Si no ves la API de Content ID de YouTube como uno de los servicios enumerados en la Consola de API de Google, consulta el Centro de ayuda de YouTube para obtener más información sobre el Programa de socios de YouTube.
En este instructivo paso a paso, se explica cómo compilar una secuencia de comandos que se conecte a ContentOwnersService y recupere información sobre un propietario de contenido determinado. Al final del tutorial se incluye el código de ejemplo completo. El código está escrito en Python; sin embargo, hay bibliotecas cliente disponibles para otros lenguajes de programación.
Requisitos
- Python 2.5 o superior
- google-api-python-client
Compilación de una secuencia de comandos para enviar solicitudes de API
Los siguientes pasos explican cómo crear una secuencia de comandos para enviar una solicitud de la API de Content ID de YouTube:
Paso 1: Creación de la secuencia de comandos básica
La siguiente secuencia de comandos acepta los siguientes parámetros de línea de comandos y establece valores en la variable FLAGS global:
- El parámetro
content_owner_ides obligatorio y permite identificar al propietario del contenido del CMS sobre el que recuperas información. - El parámetro
logging_levelespecifica el nivel de detalle de registro de la secuencia de comandos. - El parámetro
helphace que la secuencia de comandos genere una lista de los parámetros que comprende.
#!/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)
Paso 2: Habilitación de la autenticación de usuario y autorización
En este paso, incorporaremos la autorización de OAuth 2.0 en la secuencia de comandos. Esto permite que el usuario que ejecuta la secuencia de comandos autorice que esta realice solicitudes de API atribuidas a la cuenta del usuario.
Paso 2a: Crea un archivo client_secrets.json
La API de YouTube Content ID requiere un archivo client_secrets.json, que contiene información de la Consola de APIs, para realizar la autenticación. También es necesario registrar la aplicación. Para obtener una explicación más completa sobre el funcionamiento de la autenticación, consulta la guía de autenticación.
{ "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" } }
Paso 2b: Agrega el código de autenticación a la secuencia de comandos
Para habilitar la autenticación y autorización de usuarios, debes agregar las siguientes instrucciones import:
from oauth2client.file import Storage from oauth2client.client import flow_from_clientsecrets from oauth2client.tools import run
A continuación, crearemos un objeto FLOW con los secretos del cliente configurados en el paso 2a. Si el usuario autoriza a nuestra aplicación para que envíe solicitudes a la API en su nombre, las credenciales resultantes se almacenan en un objeto Storage para su uso posterior. Si las credenciales caducan, el usuario tendrá que volver a autorizar nuestra aplicación.
Agrega el siguiente código al final de la función 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)
Paso 2c: Crea el objeto httplib2 y adjunta las credenciales
Después de que el usuario autorice nuestra secuencia de comandos, crearemos un objeto httplib2.Http, que se encargará de las solicitudes a la API, y le adjuntaremos las credenciales de autorización a ese objeto.
Agrega la siguiente instrucción de importación:
import httplib2
Agrega este código al final de la función main:
# Create httplib2.Http object to handle HTTP requests and # attach auth credentials. http = httplib2.Http() http = credentials.authorize(http)
Paso 3: Obtención de un servicio
La función build de la biblioteca cliente de Python construye un recurso que puede interactuar con una API. Después de que el usuario autorice nuestra aplicación, crearemos el objeto service, que proporciona métodos para interactuar con el ContentOwnerService.
Agrega la siguiente instrucción de importación:
from apiclient.discovery import build
Y agrega este código al final de la función main:
service = build("youtubePartner", "v1", http=http, static_discovery=False) contentOwnersService = service.contentOwners()
Paso 4: Ejecución de una solicitud de API
En este paso vamos a crear una solicitud de servicio y ejecutarla. Con el siguiente código, se crea y ejecuta una solicitud contentOwnersService.get(), que recupera información sobre el propietario del contenido especificado.
Agrega el siguiente código al final de la función 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'])
Solicitud completa
En esta sección, se muestra la solicitud completa con información de la licencia y comentarios adicionales en la secuencia de comandos. Puedes ejecutar el programa de dos formas:
-
Este comando abre una ventana del navegador para llevar a cabo la autenticación, si es necesario, y autorizar a la aplicación para que envíe solicitudes de API. Si se autoriza la aplicación, las credenciales se retransmiten automáticamente a la secuencia de comandos.
python yt_partner_api.py --content_owner_id=CONTENT_OWNER_ID.
Nota: Puedes encontrar el valor de
CONTENT_OWNER_IDde tu cuenta en la página Configuración de la cuenta de tu cuenta del CMS. El valor aparece comoPartner Codeen la sección de información de la cuenta de esa página. -
Este comando genera una URL que se puede abrir en un navegador y también te pedirá que escribas un código de autorización. Cuando ingresas a la URL, la página te permite autorizar que la aplicación pueda enviar solicitudes de API en tu nombre. Si concedes la autorización, la página muestra el código de autorización que debes escribir para completar el flujo de autorización.
python yt_partner_api.py --content_owner_id=CONTENT_OWNER_ID --noauth_local_webserver.
Nota: El módulo
oauth2clientreconoce el parámetronoauth_local_webserver, aunque no se mencione en la secuencia de comandos.
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)