No puedo descargar subtítulos de video usando la API de YouTube v3 en python

Estoy intentando descargar subtítulos para este video público de YouTube (solo para pruebas) https://www.youtube.com/watch?v=Txvud7wPbv4

Estoy utilizando el ejemplo de código (captions.py) a continuación que recibí de este enlace https://developers.google.com/youtube/v3/docs/captions/download

Ya he almacenado el cliente secrets.json (autenticación de oauth2) y youtube-v3-api-captions.json en el mismo directorio (preguntado en el código de muestra)

Pongo esta línea de código en cmd: python captions.py –videoid = ‘Txvud7wPbv4’ –action = ‘download’

Me sale este error: introduzca la descripción de la imagen aquí No sé por qué no reconoce la identificación de video de este video público.

    ¿Alguien tuvo un problema similar?

    Gracias a todos de antemano.

    Ejemplo de código:

    # Usage example: # python captions.py --videoid=' 

    Su aplicación parece demasiado compleja … está estructurada para poder hacer todo lo que se puede hacer con subtítulos, no solo descargar. Eso hace que sea más difícil de depurar, así que escribí una versión abreviada (Python 2 o 3) que solo descarga subtítulos:

     # Usage example: $ python captions-download.py Txvud7wPbv4 from __future__ import print_function from apiclient import discovery from httplib2 import Http from oauth2client import file, client, tools SCOPES = 'https://www.googleapis.com/auth/youtube.force-ssl' store = file.Storage('storage.json') creds = store.get() if not creds or creds.invalid: flow = client.flow_from_clientsecrets('client_secret.json', SCOPES) creds = tools.run_flow(flow, store) YOUTUBE = discovery.build('youtube', 'v3', http=creds.authorize(Http())) def process(vid): caption_info = YOUTUBE.captions().list( part='id', videoId=vid).execute().get('items', []) caption_str = YOUTUBE.captions().download( id=caption_info[0]['id'], tfmt='srt').execute() caption_data = caption_str.split('\n\n') for line in caption_data: if line.count('\n') > 1: i, cap_time, caption = line.split('\n', 2) print('%02d) [%s] %s' % ( int(i), cap_time, ' '.join(caption.split()))) if __name__ == '__main__': import sys if len(sys.argv) == 2: VID = sys.argv[1] process(VID) 

    La forma en que funciona es esta:

    1. sys.argv[1] el ID de video (VID) como el único argumento ( sys.argv[1] )
    2. Utiliza ese VID para buscar los ID de subtítulos con YOUTUBE.captions().list()
    3. Suponiendo que el video tiene (al menos) una pista de subtítulos, tomo su ID ( caption_info[0]['id'] )
    4. Luego llama a YOUTUBE.captions().download() con ese ID de título solicitando el formato de seguimiento srt
    5. Todos los subtítulos individuales están delimitados por dobles NEWLINEs, así que divídalos
    6. Recorre cada título; hay datos si hay al menos 2 NEWLINEs en la línea, por lo que solo se split() en el primer par
    7. Muestra el número de subtítulo, la línea de tiempo de cuando aparece, luego el subtítulo, cambiando todos los NEWLINE restantes a espacios

    Cuando lo ejecuto, obtengo el resultado esperado … aquí en un video que tengo:

     $ python captions-download.py MY_VIDEO_ID 01) [00:00:06,390 --> 00:00:09,280] iterator cool but that's cool 02) [00:00:09,280 --> 00:00:12,280] your the moment 03) [00:00:13,380 --> 00:00:16,380] and sellers very thrilled : 

    Un par de cosas…

    1. Creo que necesitas ser el propietario del video para el que intentas descargar los subtítulos.
      • Probé mi script en tu video y obtengo un error 403 HTTP Forbidden
      • Aquí hay otros errores que puede obtener de la API
    2. En su caso, parece que algo está estropeando la identificación del video que está pasando.
      • ¿Cree que le está dando y (observe los valores hexadecimales 0x3c y 0x3e) … texto enriquecido?
      • De todos modos, es por eso que escribí mi propia versión más corta … así que tengo un entorno más controlado para experimentar.

    FWIW, ya que es nuevo en el uso de las API de Google, he hecho un par de videos de introducción que hice para que los desarrolladores utilicen las API de Google en esta lista de reproducción . El código de autenticación es el más difícil, así que concéntrate en los videos 3 y 4 de esa lista de reproducción para ayudarte a aclimatarte.

    Realmente no tengo ningún video que cubra las API de YouTube (ya que me concentro más en las API de G Suite), aunque sí tengo el ejemplo de Script de Google Apps (video 22 en la lista de reproducción); Si es nuevo en Apps Script, debe revisar su JavaScript y luego ver el video 5 primero. ¡Espero que esto ayude!