Nota: La API de YouTube Data está diseñada para que la usen los socios de contenido de YouTube y no es accesible para todos los desarrolladores ni para todos los usuarios de YouTube. Para acceder, se requiere una cuenta del Administrador de contenido de YouTube. Si tienes una cuenta de Administrador de contenido de YouTube, pero no ves la API de YouTube Data como uno de los servicios que se enumeran en la consola de Google Cloud, comunícate con tu administrador de socios o el equipo de asistencia para socios asignado.
En este instructivo paso a paso, se explica cómo compilar una secuencia de comandos que se conecta a ContentOwnersService y recupera información sobre un propietario del contenido determinado. Al final del instructivo, se proporciona una muestra de código completa. El código está escrito en Python; sin embargo, hay bibliotecas cliente disponibles para otros lenguajes de programación.
Requisitos
- Python 3.7 o una versión posterior
- google-api-python-client
Compilación de una secuencia de comandos para enviar solicitudes de API
En los siguientes pasos, se explica cómo crear un script para enviar una solicitud a la API de YouTube Data:
Paso 1: Creación de la secuencia de comandos básica
La siguiente secuencia de comandos acepta los siguientes argumentos de línea de comandos:
- 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 del 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/env python3 import argparse import logging import sys # Define command-line arguments using argparse. Run this program with # the '--help' argument to see all parameters that it understands. parser = argparse.ArgumentParser( description='Simple command-line sample for YouTube Data API.') parser.add_argument( '--content_owner_id', required=True, help='Required. Identifies the content owner whose details are printed out.') parser.add_argument( '--logging_level', default='ERROR', choices=['DEBUG', 'INFO', 'WARNING', 'ERROR', 'CRITICAL'], help='Set the level of logging detail.') def main(): args = parser.parse_args() # Set the logging according to the command-line flag logging.getLogger().setLevel(getattr(logging, args.logging_level)) if __name__ == '__main__': main()
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 Data requiere un archivo client_secrets.json, que contiene información de la consola de Cloud, para realizar la autenticación. También debes registrar tu aplicación. Para obtener una explicación más completa sobre 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 el código de autenticación a tu secuencia de comandos
Para habilitar la autenticación y autorización de usuarios, debes agregar las siguientes instrucciones import:
from datetime import datetime from oauth2client.file import Storage from oauth2client.client import flow_from_clientsecrets from oauth2client.tools import argparser, run_flow
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 a enviar 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(FLOW, storage, args)
Paso 2c: Crea el objeto httplib2 y adjunta las credenciales
Después de que el usuario autoriza nuestra secuencia de comandos, creamos un objeto httplib2.Http, que controla las solicitudes de API, y adjuntamos 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 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
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. El siguiente código 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=args.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 aplicación completa con información sobre licencias 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.
python3 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.
python3 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 el 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/env python3 # # 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 Data API. Command-line application that retrieves the information about given content owner. Usage: $ python3 yt_partner_api.py --content_owner_id=[contentOwnerId] $ python3 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: $ python3 yt_partner_api.py --help To get detailed log output run: $ python3 yt_partner_api.py --logging_level=DEBUG \ --content_owner_id=[contentOwnerId] """ import argparse from datetime import datetime import logging import os import sys from apiclient.discovery import build import httplib2 from oauth2client.client import flow_from_clientsecrets from oauth2client.file import Storage from oauth2client.tools import argparser, run_flow # Define parser. parser = argparse.ArgumentParser( parents=[argparser], description='Simple command-line sample for YouTube Data API.') parser.add_argument( '--content_owner_id', required=True, help='Required. Identifies the content owner id whose details are printed out.') parser.add_argument( '--logging_level', default='ERROR', choices=['DEBUG', 'INFO', 'WARNING', 'ERROR', 'CRITICAL'], help='Set the level of logging detail.') def main(): args = parser.parse_args() # Set the logging according to the command-line flag logging.getLogger().setLevel(getattr(logging, args.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(FLOW, storage, args) http = httplib2.Http() http = credentials.authorize(http) service = build("youtubePartner", "v1", http=http, static_discovery=False) contentOwnersService = service.contentOwners() # Create and execute get request. request = contentOwnersService.get(contentOwnerId=args.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()