es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Es posible desactivar la autorización de Google-API?

Estoy escribiendo un simple script en Python que obtiene la duración de un video de YouTube utilizando la API de Google. Este es el código que escribí:

# imports
import os
import google_auth_oauthlib.flow
import googleapiclient.discovery
import googleapiclient.errors
import aniso8601

scopes = ["https://www.googleapis.com/auth/youtube.readonly"]
# Deshabilitar la verificación HTTPS de OAuthlib cuando se ejecuta localmente.
# *NO DEJES* esta opción habilitada en producción.
os.environ["OAUTHLIB_INSECURE_TRANSPORT"] = "1"

api_service_name = "youtube"
api_version = "v3"

# Nombre de archivo que contiene las credenciales (API/OAuth)
client_secrets_file = "MI_NOMBRE_DE_ARCHIVO.json"

# Obtener credenciales y crear un cliente de API
flow = google_auth_oauthlib.flow.InstalledAppFlow.from_client_secrets_file(client_secrets_file, scopes)
credentials = flow.run_console()
youtube = googleapiclient.discovery.build(api_service_name, api_version, credentials=credentials)
request = youtube.videos().list(
    part="contentDetails",
    id="CbxQWAFv7sA"
)
response = request.execute()
duration_in_iso_8601 = response['items'][0]['contentDetails']['duration']
duration_in_seconds = aniso8601.parse_duration(duration_in_iso_8601).seconds
print(duration_in_seconds)

Ahora, todo funciona bien excepto el hecho de que cada vez que ejecuto el script se me solicita ingresar un código de autorización:

Por favor, visite esta URL para autorizar esta aplicación: https://accounts.google.com/o/oauth2/auth?response_type=code&client_id=MI_ID.apps.googleusercontent.com&redirect_uri=urn%3Aietf%3Awg%3Aoauth%3A2.0%3Aoob&scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fyoutube.readonly&state=i4RuG2QRXmef9t5MQUoOOqSXGhvMM5&prompt=consent&access_type=offline
Ingrese el código de autorización:

Mi objetivo es que eventualmente el script se automatice en diferentes dispositivos, por lo que lo anterior interrumpe el flujo. Quería saber si hay alguna forma de deshabilitar esta solicitud. Si no es posible, ¿hay alguna otra forma de implementarlo para que la autorización no interfiera en el flujo?

¡Muchas gracias!

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Sí, es posible deshabilitar la solicitud de autorización utilizando una cuenta de servicio en lugar de la autenticación de OAuth2. Con una cuenta de servicio, las credenciales de autorización se almacenan en un archivo JSON que se puede agregar al script o almacenar en un lugar seguro. De esta manera, no es necesario la interacción del usuario para autorizar la aplicación.

    Para utilizar una cuenta de servicio, siga estos pasos:

    1. Crea un proyecto en la Consola de Google Cloud y habilita la API de Datos de YouTube para el proyecto.
    2. Crea una clave de cuenta de servicio para el proyecto y descarga el archivo JSON con las credenciales.
    3. Modifica el script para usar las credenciales de la cuenta de servicio de la siguiente manera:
    # importaciones
    import os
    import googleapiclient.discovery
    import googleapiclient.errors
    import aniso8601
    from google.oauth2 import service_account
    
    scopes = ["https://www.googleapis.com/auth/youtube.readonly"]
    # nombre del archivo que contiene las credenciales (API / OAuth)
    client_secrets_file = "MI_NOMBRE_DE_ARCHIVO.json"
    
    # Obtén las credenciales y crea un cliente de API
    credentials = service_account.Credentials.from_service_account_file(
        client_secrets_file, scopes=scopes)
    
    api_service_name = "youtube"
    api_version = "v3"
    
    youtube = googleapiclient.discovery.build(api_service_name, api_version, credentials=credentials)
    request = youtube.videos().list(
        part="contentDetails",
        id="CbxQWAFv7sA"
    )
    response = request.execute()
    duration_in_iso_8601 = response['items'][0]['contentDetails']['duration']
    duration_in_seconds = aniso8601.parse_duration(duration_in_iso_8601).seconds
    print(duration_in_seconds)
    

    Al modificar el código para usar las credenciales de la cuenta de servicio, ya no se te solicitará autorización al ejecutar el script. De esta forma, podrás automatizar el script en diferentes dispositivos sin interrupciones.

Comments are closed.