Lista de canales de CMS usando la API de Youtube con onBehalfOfContentOwner

Estoy usando la API de datos de Youtube para hacer consultas dirigidas ( como este ejemplo ) para unas pocas cuentas de CMS en un MCN. Permití las API adecuadas y configuré una oAuth para una aplicación instalada en la consola de desarrolladores de Google. Me aseguré de llamar a los ámbitos correctos:

YOUTUBE_SCOPES = ["https://www.googleapis.com/auth/youtube.readonly", "https://www.googleapis.com/auth/yt-analytics-monetary.readonly", "https://www.googleapis.com/auth/youtubepartner"] 

La autenticación no tiene ningún problema …

 (youtube, youtube_analytics) = get_authenticated_services(args) 

Hasta que se realice una comprobación de validez para enumerar los canales asociados con el CMS:

 youtube.channels().list( part='snippet,contentDetails', managedByMe=True, maxResults=50, onBehalfOfContentOwner=CONTENT_OWNER_ID ).execute() 

devolviendo un error 403 “Acceso Prohibido”. Me pregunto si esto es porque no tengo privilegios de administrador con mi cuenta de CMS.

    Una de las dos cosas es probablemente en el trabajo aquí:

    1. Se está autenticando con la cuenta que otorga acceso al CMS, pero el CONTENT_OWNER_ID que proporcionó en su método youtube.channels().list() CONTENT_OWNER_ID youtube.channels().list() es incorrecto.
    2. Usted está proporcionando el CONTENT_OWNER_ID correcto, pero se autentica con la cuenta incorrecta.

    Caso 1

    Es posible que simplemente CONTENT_OWNER_ID incluir el CONTENT_OWNER_ID correcto para el parámetro onBehalfOfContentOwner en tu método youtube.channels().list() onBehalfOfContentOwner youtube.channels().list() (aunque es posible que hayas dejado este espacio en blanco en tu publicación por privacidad).

    Para CONTENT_OWNER_ID verificar, puede encontrar el valor para CONTENT_OWNER_ID invocando la API a través de este formulario . Asegúrese de que está autenticado correctamente (es decir, si utiliza la cuenta con acceso al CMS que desea) y recibirá una respuesta JSON, algo como esto:

     { "kind": "youtubePartner#contentOwnerList", "items": [ { "kind": "youtubePartner#contentOwner", "id": CONTENT_OWNER_ID, "displayName": DISPLAY_NAME etc. } ] } 

    Simplemente incluya cualquier CONTENT_OWNER_ID que desee de esta respuesta en su método de los channels().list() CONTENT_OWNER_ID channels().list() (asegurándose, una vez más, de que está debidamente autenticado), y listo.

    Caso 2

    Si eso no resuelve su problema, entonces puede que esté proporcionando el CONTENT_OWNER_ID correcto, pero se está autenticando con la cuenta incorrecta.

    Antes de volver a ejecutar el script, vuelva a verificar que elimine el archivo que contiene su token de acceso temporal (tendrá un nombre de archivo como “YOUR_FILENAME-oauth2.json”). Luego, ejecute su script de nuevo; asegurándose de que, cuando se le solicite que seleccione una cuenta para la autenticación, seleccione la que corresponda con el CONTENT_OWNER_ID que estableció.

    tl: dr;

    Básicamente, debe haber un acuerdo entre la cuenta con la que se autentica y el CONTENT_OWNER_ID que proporciona.

    Finalmente, no necesita una clave API para invocar la API de esta manera; o bien necesita una clave API o un token de acceso OAuth 2.0 debidamente autenticado. Aquí están los documentos .