Nota: La API de Content ID de YouTube se diseñó para que la usen los socios de contenido de YouTube, por lo que no todos los desarrolladores ni todos los usuarios de YouTube pueden acceder a ella. Si la API de Content ID de YouTube no aparece 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 línea de comandos a continuación acepta los siguientes parámetros de línea de comandos y establece valores para la variable global FLAGS
:
- El parámetro
content_owner_id
es obligatorio e identifica al propietario del contenido de CMS sobre el que vas a recuperar información. - El parámetro
logging_level
especifica el nivel de detalle de registro de la secuencia de comandos. - El parámetro
help
hace que la secuencia de comandos genere una lista de los parámetros que entiende.
#!/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 Content ID de YouTube requiere un archivo client_secrets.json
, que contiene información de la Consola de API, para realizar la autenticación. También es necesario registrar la aplicación. Para obtener una explicación más completa de cómo funciona 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 código de autenticación a tu secuencia de comandos
Para habilitar la autenticación y autorización de usuarios, debes agregar las siguientes declaraciones 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 que nuestra aplicación envíe solicitudes de API en nombre del usuario, 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 un objeto httplib2
y adjunta credenciales
Después de que el usuario autoriza nuestra secuencia de comandos, creamos un objeto httplib2.Http
, que controla las solicitudes a la API, y adjuntamos las credenciales de autorización a ese objeto.
Agrega la siguiente instrucción de importación:
import httplib2
Además, 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 autoriza nuestra aplicación, creamos el objeto service
, que proporciona métodos para interactuar con ContentOwnerService
.
Agrega la siguiente instrucción de importación:
from apiclient.discovery import build
Además, 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 este 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 adicional sobre licencias y comentarios 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_ID
para tu cuenta en la página Configuración de la cuenta de tu cuenta del CMS. El valor se muestra comoPartner Code
en la sección de información de la cuenta en 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
oauth2client
reconoce el parámetronoauth_local_webserver
aunque el parámetro no se menciona 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)