Mostrar los primeros 100 archivos & carpetas de tu unidad de Google Drive

1. Uso de las APIs de Google Workspace

En este codelab, se presenta el uso de las APIs basadas en HTTP de Google Workspace (anteriormente G Suite) que siguen el estilo REST. El ejemplo se realizará en Python para mayor brevedad y disponibilidad, pero también puedes usar tu lenguaje de desarrollo favorito. Conocerás temas introductorios, como el uso de la consola para desarrolladores para crear y administrar proyectos, la obtención de credenciales de autorización y la instalación de las bibliotecas cliente de la API. Una vez que se hayan completado los trámites, escribirás una app para mostrar los primeros 100 archivos y carpetas de tu unidad de Google Drive con su API.

Qué aprenderás

  • Crea un proyecto con la consola de Google/Cloud Developers
  • Obtén y usa credenciales de aplicación de OAuth2 en tu app
  • Obtén información para usar las bibliotecas cliente de las APIs de Google
  • Escribe aplicaciones con las APIs de Google y Google Workspace
  • Obtén información de archivos y carpetas con la API de Google Drive

Requisitos

  • Acceso a Internet y un navegador web
  • Una Cuenta de Google (las cuentas de Google Workspace pueden requerir la aprobación del administrador)
  • Conocimiento de sistemas compatibles con POSIX, como Linux y Mac OS X
  • Capacidad de crear archivos fuente con un editor de código o comandos de shell
  • Habilidades básicas en Python (2 o 3), pero puedes usar cualquier lenguaje compatible
  • Algunos archivos o carpetas de tu Google Drive

2. Encuesta

¿Cómo usarás este instructivo del codelab?

Ler Leer y completar los ejercicios

¿Cómo calificarías tu experiencia con las APIs y las herramientas para desarrolladores de Google Workspace?

Principiante Intermedio Avanzado

3. Descripción general

En este codelab, aprenderás a hacer lo siguiente:

  1. Descarga la biblioteca cliente de las APIs de Google para Python
  2. Crea un proyecto nuevo en la consola de Google/Cloud Developers
  3. Obtén las credenciales necesarias para tu app
  4. Usar esas credenciales para acceder a la API de Google Drive

Si prefieres no usar Python, puedes implementar el codelab en tu herramienta de desarrollo favorita (las bibliotecas cliente de los lenguajes admitidos están disponibles aquí) y, simplemente, consultar los ejemplos de Python como pseudocódigo (ejecutable).

4. Confirma el entorno de Python

En este codelab, debes usar el lenguaje Python (aunque las bibliotecas cliente de las APIs de Google admiten muchos lenguajes, así que no dudes en compilar algo equivalente en tu herramienta de desarrollo favorita y simplemente usar Python como pseudocódigo). En particular, este codelab admite Python 2 y 3, pero recomendamos migrar a 3.x lo antes posible.

Cloud Shell es una herramienta conveniente disponible para los usuarios directamente desde Cloud Console y no requiere un entorno de desarrollo local, por lo que este instructivo se puede completar por completo en la nube con un navegador web. Cloud Shell es especialmente útil si desarrollas o planeas seguir desarrollando con los productos y las APIs de GCP. Específicamente para este codelab, Cloud Shell ya tiene preinstaladas ambas versiones de Python.

Cloud Shell también tiene instalado IPython, que es un intérprete de Python interactivo de nivel superior que recomendamos, en especial si formas parte de la comunidad de ciencia de datos o aprendizaje automático. Si es así, IPython es el intérprete predeterminado para los notebooks de Jupyter y Colab, los notebooks de Jupyter alojados por Google Research.

IPython favorece primero un intérprete de Python 3, pero recurre a Python 2 si no está disponible la versión 3.x. Se puede acceder a IPython desde Cloud Shell, pero también se puede instalar en un entorno de desarrollo local. Sal con ^D (Ctrl + D) y acepta la oferta para salir. El resultado de ejemplo de ipython se verá de la siguiente manera:

$ ipython
Python 3.7.3 (default, Mar 4 2020, 23:11:43)
Type 'copyright', 'credits' or 'license' for more information
IPython 7.13.0 -- An enhanced Interactive Python. Type '?' for help.

In [1]:

Si no prefieres IPython, puedes usar un intérprete interactivo estándar de Python (ya sea Cloud Shell o tu entorno de desarrollo local) (también puedes salir con ^D):

$ python
Python 2.7.13 (default, Sep 26 2018, 18:42:22)
[GCC 6.3.0 20170516] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> 
$ python3
Python 3.7.3 (default, Mar 10 2020, 02:33:39)
[GCC 6.3.0 20170516] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>>

En el codelab, también se supone que tienes la herramienta de instalación pip (administrador de paquetes y resolución de dependencias de Python). Se incluye con las versiones 2.7.9 o posteriores, o 3.4 o posteriores. Si tienes una versión anterior de Python, consulta esta guía para obtener instrucciones de instalación. Según tus permisos, es posible que necesites acceso de sudo o de superusuario, pero, en general, no es el caso. También puedes usar pip2 o pip3 de forma explícita para ejecutar pip para versiones específicas de Python.

El resto del codelab supone que usas Python 3. Se proporcionarán instrucciones específicas para Python 2 si difieren significativamente de la versión 3.x.

*Crear y usar entornos virtuales

Esta sección es opcional y solo es necesaria para quienes deben usar un entorno virtual para este codelab (según la barra lateral de advertencia anterior). Si solo tienes Python 3 en tu computadora, puedes ejecutar este comando para crear un virtualenv llamado my_env (puedes elegir otro nombre si lo deseas):

virtualenv my_env

Sin embargo, si tienes Python 2 y 3 en tu computadora, te recomendamos que instales un virtualenv de Python 3, lo que puedes hacer con -p flag de la siguiente manera:

virtualenv -p python3 my_env

Para ingresar al entorno virtualenv que acabas de crear, "actívalo" de la siguiente manera:

source my_env/bin/activate

Para confirmar que estás en el entorno, observa que el símbolo del sistema ahora está precedido por el nombre del entorno, es decir,

(my_env) $ 

Ahora deberías poder pip install cualquier paquete requerido, ejecutar código dentro de este entorno, etcétera. Otro beneficio es que, si lo arruinas por completo, te encuentras en una situación en la que tu instalación de Python está dañada, etcétera, puedes eliminar todo este entorno sin afectar el resto de tu sistema.

5. Instala la biblioteca cliente de las API de Google para Python

En este codelab, se requiere el uso de la biblioteca cliente de las APIs de Google para Python, por lo que el proceso de instalación es simple o, tal vez, no tengas que hacer nada.

Anteriormente, te recomendamos que consideres usar Cloud Shell para mayor comodidad. Puedes completar todo el instructivo desde un navegador web en la nube. Otro motivo para usar Cloud Shell es que muchas herramientas de desarrollo populares y bibliotecas necesarias ya están preinstaladas.

Instalar bibliotecas cliente

(Opcional) Puedes omitir este paso si usas Cloud Shell o un entorno local en el que ya instalaste las bibliotecas cliente. Solo debes hacerlo si desarrollas de forma local y no los instalaste (o no sabes si los instalaste). La forma más sencilla es usar pip (o pip3) para realizar la instalación (incluida la actualización de pip si es necesario):

pip install -U pip google-api-python-client oauth2client

Confirmar instalación

Este comando instala la biblioteca cliente y los paquetes de los que depende. Ya sea que uses Cloud Shell o tu propio entorno, verifica que la biblioteca cliente esté instalada importando los paquetes necesarios y confirma que no haya errores de importación (ni resultados):

python3 -c "import googleapiclient, httplib2, oauth2client"

Si usas Python 2 (desde Cloud Shell), recibirás una advertencia de que se dejó de admitir:

*******************************************************************************
Python 2 is deprecated. Upgrade to Python 3 as soon as possible.
See https://cloud.google.com/python/docs/python2-sunset

To suppress this warning, create an empty ~/.cloudshell/no-python-warning file.
The command will automatically proceed in seconds or on any key.
*******************************************************************************

Una vez que puedas ejecutar ese comando de "prueba" de importación correctamente (sin errores ni resultados), podrás comenzar a comunicarte con las APIs de Google.

Resumen

Como este es un codelab introductorio, se supone que no tienes experiencia en el uso de las APIs de Google y Google Workspace. Si ya tienes experiencia en la creación de proyectos y de "IDs de cliente de OAuth" para la autorización de usuarios Si es así, crea o reutiliza un proyecto existente, crea o reutiliza un ID de cliente de OAuth existente y omite los dos módulos siguientes para ir directamente a "Cómo mostrar tu aplicación de archivos y carpetas de Drive" o ve directamente a "Uso avanzado de la consola para desarrolladores" para revisar esos pasos con menos orientación.

6. Especifica el proyecto en la consola de Cloud

Una aplicación que usa las APIs de Google requiere un proyecto. Estos se administran en la consola de Google Cloud Developers o, simplemente, "devconsole". En este codelab, solo usaremos la API de Google Drive, por lo que tenemos un vínculo mágico (a continuación, en el paso 1) que hace lo siguiente:

  • Te lleva a la consola para desarrolladores
  • Te guía para crear un proyecto nuevo (o elegir uno existente)
  • Habilita automáticamente la API de Drive

¡Comencemos!

  1. Navega a console.developers.google.com/start/api?id=drive y accede a tu Cuenta de Google.
  2. Si aún no tienes ningún proyecto, verás esta pantalla para aceptar las Condiciones del Servicio de las APIs de Google:

e3b2076ba58a7cd7.png Una vez que aceptes las condiciones, se creará un proyecto nuevo llamado "Mi proyecto" y se habilitará automáticamente la API de Drive. 3. Si, en cambio, ya creaste un proyecto (quizás en un codelab anterior), verás esta pantalla: 50b3b8ace6721f1f.png Cuando hagas clic en el menú desplegable Crear un proyecto, elige un proyecto existente o crea uno nuevo. 69db3867445ad9e5.png Una vez que hayas hecho tu selección (proyecto nuevo o existente), la API de Drive se habilitará automáticamente. 4. Sabrás que la API de Drive se habilitó con esta confirmación: 365e7de1377493bb.png 5. Haz clic en Ir a Credenciales para avanzar al siguiente paso.

7. *Autoriza solicitudes a la API (autorización del usuario)

Puedes omitir esta sección si ya creaste credenciales de autorización de la cuenta de usuario y conoces el proceso. Es diferente de la autorización de la cuenta de servicio, cuya técnica difiere, por lo que debes continuar leyendo.

Introducción a la autorización (y algo de autenticación)

Para realizar solicitudes a las APIs, tu aplicación debe tener la autorización adecuada. Autenticación, una palabra similar, describe las credenciales de acceso. Te autenticas cuando accedes a tu Cuenta de Google con un nombre de usuario y una contraseña. Una vez que se realiza la autenticación, el siguiente paso es determinar si tú (o, mejor dicho, tu código) tienes autorización para acceder a los datos, como los archivos de BLOB en Cloud Storage o los archivos personales de un usuario en Google Drive.

Las APIs de Google admiten varios tipos de autorización, pero la más común para los usuarios de las APIs de Google Workspace es la autorización del usuario, ya que la aplicación de ejemplo de este codelab accede a datos que pertenecen a usuarios finales. Esos usuarios finales deben otorgar permiso a tu app para acceder a sus datos. Esto significa que tu código debe obtener credenciales de OAuth2 de la cuenta del usuario.

Para obtener credenciales de OAuth2 para la autorización del usuario, vuelve al administrador de APIs y selecciona la pestaña "Credenciales" en la navegación de la izquierda:

Y33PZ_rJC1y7NH7Rrvq1kN_WxZ9CppDGJK8tTSaha298Jlm5pMqgnyweIO4oX34fcLy0_VI4gihYu5wpEM_LeJg1iDAFoidhUVyfqJX3QTzODQ_OGjHLXYBxPpUvihCJi9JGwvMREw

Cuando llegues, verás todas tus credenciales en tres secciones separadas:

ComE4qh76dwZbIehkDUm1QawHGia_qVe7w7rkmgbeo_wjWS--kqXCt4_zvm55iy_RXA8dKYKvBxIKazkcYQ8871SA_kNslbvum_n1Ju4k9qJJSMtDhPAnofcvIlqlKm1nu7PBQhmEg

El primero es para las claves de API, el segundo para los IDs de cliente de OAuth 2.0 y el último para las cuentas de servicio de OAuth2. Usaremos el del medio.

Crea las credenciales

En la página Credenciales, haz clic en el botón + Crear credenciales que se encuentra en la parte superior, lo que te mostrará un diálogo en el que deberás elegir "ID de cliente de OAuth":

C7jTddfrczo3GewPGCxbxX13GawtFc6FGvAPFusPc_IW-tr5M6xgXd1OzOHOUTo86WDa9fXiCITogv9b3wAgOcYM7xS3AmVNaPdTxbAynIe_sia2_x3LEPsBrdbX8NjeI2WaHRioOA

En la siguiente pantalla, tienes 2 acciones: configurar la "pantalla de consentimiento" de autorización de tu app y elegir el tipo de aplicación:

El9_aqPQ6Q9hOsOp3JUC5qnCm_A_BVI-oCEfPk_MsvybnWBmC5lT6CtXSoZ7EQoFzrcBEzo4zF9s8CbhXyo0e-eSY3pZ1zg0BRvT0YssMMhbzEG-gP_jiO8v9q9HYTjg-QW5jJ0RDA

Si no configuraste una pantalla de consentimiento, verás la advertencia en la consola y deberás hacerlo ahora. (Omite estos pasos si ya configuraste la pantalla de consentimiento).

Haz clic en "Configurar la pantalla de consentimiento", donde seleccionarás una app "Externa" (o "Interna" si eres cliente de Google Workspace [anteriormente "G Suite"]):

5w-9R6gPvUHFzODZxXy-0GEhL8ZGDGNea3QtMp1FFYDv5DJ_MIDD21NEh3CzI-GKNzy6bkhH7bohxOG8icQTegiWlavOQhQqhSy7K31Ma3YTI9aAP3P-LmTBanPslX1cnjKLVZBi8A

Ten en cuenta que, para los fines de este ejercicio, no importa cuál elijas, ya que no publicarás la muestra del codelab. La mayoría de las personas seleccionará "Externa" para acceder a una pantalla más compleja, pero solo necesitas completar el campo "Nombre de la aplicación" en la parte superior:

8e9z_RQz8lumYbDIcBvm57_Gpptn9uhrVQHoRzJ01AJNOFmXloDO7Eg3hhzJZZIU2F5rR0MxTCw-oXVFCq683xUwD4O33pXeuFsOMtM8EZhyjDoYc8Kv4hEoaG0Ztq9ePx6De7YmfA

Lo único que necesitas en este momento es un nombre para la aplicación, así que elige uno que refleje el codelab que estás haciendo y, luego, haz clic en Guardar.

Cómo crear un ID de cliente de OAuth (autorización de la cuenta de usuario)

Ahora, vuelve a la pestaña Credenciales para crear un ID de cliente de OAuth2. Aquí verás una variedad de IDs de cliente de OAuth que puedes crear:

f8reuhsxOUNLcVrEIyRVsmP_fX_ceIlLvEKql1YHwSPW9jk9Mm9fJ0UlfUoi8eRN3QQXar4xtpo071zj6LSczNN7TYY8zB96Dn6ICZuvCAtjIgJSKdMSlX-ZhMuSWFpxxv661aUemw

Estamos desarrollando una herramienta de línea de comandos, que es Otro, así que elige esa opción y, luego, haz clic en el botón Crear. Elige un nombre de ID de cliente que refleje la app que estás creando o simplemente toma el nombre predeterminado, que suele ser "Otro cliente N".

Cómo guardar tus credenciales

  1. Aparecerá un diálogo con las nuevas credenciales. Haz clic en Aceptar para cerrarlo.

rAwekj_GNEuVwGbZOYYlGDQjlu4flE61OPEZIUmwMI5vGi3W365UwVCxi0mVNhg4WZSSczZywrZZ6NDM_U0FJ4b-TOIMEC189uybOJjgn8F_axesVMopel9RlehRBXdEFhN4d41WGQ

  1. En la página Credenciales, desplázate hacia abajo hasta la sección "IDs de cliente de OAuth 2.0", busca el ícono de descarga aAmje6kT_xSUM4BKIlPREpjosx7C_xxwpWqBgiGVfVWxQ8nnQOfxTPhuU0QwSnmbjykZffGrqyP1nnKrEQ7D7OqYaGw_Uzscs9gX2RwwP4AmvtHIiTFLa0gkprzJSjG9pQSx7HtmSQ en la parte inferior derecha de tu ID de cliente recién creado y haz clic en él. x-vb-sKZy-X8a1X4uTsBWotSd4wn0PGt4mHMNv6DUrq5J5ihpujUyTiIVr5SHw0p2ZDy0KTP-zqOaFX-Az9BYDWG90KNFmsRLTUOo1mUVk7dYRJiK3VwYJNU0bbxjsbbpqcTr5_oLw
  2. Se abrirá un diálogo para guardar un archivo llamado client_secret-LONG-HASH-STRING.apps.googleusercontent.com.json, probablemente en tu carpeta Descargas. Te recomendamos que lo acortes a un nombre más fácil, como client_secret.json (que es el que usa la app de ejemplo), y, luego, lo guardes en el directorio o la carpeta en los que crearás la app de ejemplo en este codelab.

Resumen

Con las credenciales en mano, ya puedes acceder a la API de Drive desde tu app. Ten en cuenta que el propósito del ID de cliente de OAuth es que tus usuarios deben otorgar permiso a tu app para acceder a sus datos en Google Drive.

NOTE: Después de completar este codelab, podrás obtener más detalles sobre cómo crear proyectos, habilitar APIs y obtener credenciales de forma manual, es decir, sin usar el "asistente" anterior.

8. Cómo mostrar la aplicación de archivos y carpetas de Drive

Ya sea en tu entorno de desarrollo local o en Cloud Shell, en el mismo directorio en el que se encuentra tu archivo de credenciales client_id.json, crea un nuevo archivo de Python llamado drive_list.py y agrega las siguientes líneas de código:

from __future__ import print_function

from googleapiclient import discovery
from httplib2 import Http
from oauth2client import file, client, tools

SCOPES = 'https://www.googleapis.com/auth/drive.readonly.metadata'
store = file.Storage('storage.json')
creds = store.get()
if not creds or creds.invalid:
    flow = client.flow_from_clientsecrets('client_id.json', SCOPES)
    creds = tools.run_flow(flow, store)
DRIVE = discovery.build('drive', 'v3', http=creds.authorize(Http()))

files = DRIVE.files().list().execute().get('files', [])
for f in files:
    print(f['name'], f['mimeType'])

Estructura de la aplicación

Esta aplicación tiene tres secciones principales:

  1. Importaciones de Python para incorporar la funcionalidad de la biblioteca
  2. Cómo obtener credenciales de la aplicación
  3. Recuperar y mostrar los nombres de archivos y carpetas, y los tipos MIME en el Google Drive del usuario

NOTE: Después de finalizar este codelab, podrás profundizar en el código y revisar una explicación línea por línea para seguir estudiando.

Ejecuta la aplicación

Asigna a este archivo un nombre como drive_list.py. La primera vez que ejecutes la secuencia de comandos, no tendrá autorización para acceder a los archivos del usuario en Drive (los tuyos). El resultado se verá así con la ejecución en pausa:

$ python3 ./drive_list.py
/usr/local/lib/python3.6/site-packages/oauth2client/_helpers.py:255: UserWarning: Cannot access storage.json: No such file or directory
 warnings.warn(_MISSING_FILE_MESSAGE.format(filename))

Your browser has been opened to visit:
  https://accounts.google.com/o/oauth2/auth?client_id=LONG-STRING.apps.googleusercontent.com&redirect_uri=http%3A%2F%2Flocalhost%3A8080%2F&scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fdrive.readonly.metadata&access_type=offline&response_type=code

If your browser is on a different machine then exit and re-run this
application with the command-line parameter

 --noauth_local_webserver

Desde el entorno de desarrollo local

La secuencia de comandos de línea de comandos se pausa cuando se abre una ventana del navegador y se muestra el diálogo de permisos de OAuth2:

c2648f37bcb7a0c1.png

Aquí es donde la aplicación le pide al usuario los permisos que solicita el código (a través de la variable SCOPES). En este caso, es la capacidad de ver los metadatos del archivo desde el Google Drive del usuario. Sí, en tu código, estos permisos aparecen como URIs, pero se traducen al idioma especificado por tu configuración regional en la ventana de diálogo del flujo de OAuth2. El usuario debe otorgar una autorización explícita para los permisos solicitados. De lo contrario, la parte del código de "ejecución del flujo" arrojará una excepción y la secuencia de comandos no continuará.

NOTE: Algunos usuarios tienen varios navegadores, y es posible que la solicitud de autorización aparezca en un navegador no preferido. Si es así, solo copia toda la URL de la ventana del navegador que no quieras usar y pégala en la barra de direcciones de un navegador que quieras usar.

Desde Cloud Shell

Si no prestaste atención y ejecutaste el programa en Cloud Shell, no se abrió ninguna ventana del navegador, por lo que te quedaste atascado. Te das cuenta de que el mensaje de diagnóstico que aparece en la parte inferior era para ti:

If your browser is on a different machine then exit and re-run this
application with the command-line parameter

 --noauth_local_webserver

Cuando lo ejecutes de esta manera, obtendrás el siguiente resultado:

$ python3 drive_list.py --noauth_local_webserver
/usr/local/lib/python3.7/site-packages/oauth2client/_helpers.py:255: UserWarning: Cannot access storage.json: No such file or directory
 warnings.warn(_MISSING_FILE_MESSAGE.format(filename))

Go to the following link in your browser:

  https://accounts.google.com/o/oauth2/auth?client_id=xxx.apps.googleusercontent.com&redirect_uri=urn%3Aietf%3Awg%3Aoauth%3A2.0%3Aoob&scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fdrive.readonly.metadata&access_type=offline&response_type=code

Enter verification code:

Si sigues las instrucciones y vas a otra pestaña del navegador con esa URL, obtendrás una experiencia casi idéntica a la que se describió anteriormente para los entornos de desarrollo locales. La diferencia clave se encuentra al final, donde verás una pantalla más con el código de verificación que debes ingresar en Cloud Shell:

f6da2c335fb7c6a.png

Corta y pega este código en la ventana de la terminal.

Resumen

Una vez que el usuario haga clic en Permitir o pegue el código de verificación en el mensaje, la app se ejecutará (o seguirá ejecutándose), por lo que verás un resultado que consta de archivos o carpetas de Drive y sus tipos MIME. Este es un ejemplo de una de nuestras cuentas de prueba:

$ python3 ./drive_list.py
Travel expenses application/vnd.google-apps.spreadsheet
Gmail Add-ons codelab application/vnd.google-apps.script
Google Workspace Developer Intro application/vnd.google-apps.presentation
Baseball Sheets application/vnd.google-apps.folder
My Resume application/vnd.google-apps.document
  . . .

Observa en las ejecuciones sucesivas que ya no se te solicita autorización (ya que las bibliotecas de autenticación la almacenaron en caché) y que vas directamente al resultado. ¿No es emocionante ver tus documentos en una terminal por primera vez? ¡También lo creemos!

9. Conclusión

Ahora puedes aprender más funciones de la API de Drive o explorar otras APIs de Google Workspace (Gmail, Documentos, Hojas de cálculo, Presentaciones, Calendario) y otras APIs de Google (Maps, Analytics, YouTube, etcétera). ¡Felicitaciones por llegar hasta el final!

El código que aparece en este codelab también está disponible en su repositorio de GitHub en github.com/googlecodelabs/gsuite-apis-intro. (Nuestro objetivo es mantener este codelab sincronizado con el repositorio). ¿Todo listo para avanzar? A continuación, hay varios recursos a los que puedes acceder para analizar en profundidad el material que vimos en este codelab, o bien, para ampliar tu mente y explorar otras formas de acceder a las tecnologías de Google de forma programática.

Como se mencionó anteriormente, si no eres un desarrollador de Python habitual, te invitamos a rehacer este ejemplo de codelab en tu lenguaje de desarrollo favorito. Las bibliotecas cliente para los lenguajes admitidos están disponibles aquí.

Estudio adicional

Ahora que tienes experiencia con la API de Drive, a continuación, se incluyen algunos ejercicios recomendados para desarrollar aún más tus habilidades:

  1. Archivos ZIP: Escribe una aplicación que cree copias de seguridad de varios archivos ZIP en Drive y los descomprima sobre la marcha para que cada nombre de archivo ZIP sea el nombre de la carpeta en la que se guardan esos archivos. CRÉDITO EXTRA: Admite archivos ZIP recursivos dentro de otros archivos ZIP con carpetas de Drive incorporadas dentro de otras carpetas. Si te das por vencido, consulta esta app de ejemplo de Node.js.
  2. Álbumes de fotos: Escribe el comienzo de una herramienta de generación de álbumes de fotos que suba varias imágenes a Google Drive y las organice en carpetas separadas por marca de tiempo y ubicación geográfica. CRÉDITO EXTRA: Busca una biblioteca de manipulación de imágenes de código abierto y une todas las fotos de cada carpeta para representar los eventos que hayas experimentado (un viaje, una cena, etcétera).
  3. Explorar GCP: Escribe una app que conecte Google Workspace y Google Cloud Platform (GCP). Escribe una herramienta que cree copias de seguridad de los archivos de imagen de Google Drive en Google Cloud Storage (GCS), otra solución de "almacenamiento de archivos en la nube". Aunque no lo creas, usar GCS será más sencillo que Drive debido a sus bibliotecas cliente avanzadas.
  4. Analiza y registra: Extiende tu solución del paso 3 analizando cada imagen de la copia de seguridad pasándola a la API de Google Cloud Vision y obteniendo las principales "etiquetas" (3, 5 y 10) de lo que la API ve en esas imágenes. Para cada imagen, escribe una fila en una hoja de cálculo de Google que contenga el análisis de Cloud Vision y su ubicación de copia de seguridad en GCS. Si te das por vencido, consulta este codelab de Python.

10. Recursos adicionales

Documentación

Novedades y actualizaciones

Otros codelabs

Introductorio

Intermedio

Avanzado

Apps de referencia

11. *Explicación detallada de la aplicación

Esta sección opcional se debe usar como autoestudio después de que finalice la sesión para completar cualquier brecha que pueda haber surgido o para realizar más investigaciones.

Importaciones de Python para incorporar la funcionalidad de la biblioteca

from __future__ import print_function

from googleapiclient import discovery
from httplib2 import Http
from oauth2client import file, client, tools
  • La primera instrucción import permite que este código se ejecute en Python 2. Se puede quitar por completo si solo usas Python 3.
  • Una guía de estilo de Python es separar las importaciones de la biblioteca estándar y los módulos de terceros, para eso sirve la línea en blanco.
  • Las siguientes tres importaciones incorporan las clases y funciones necesarias de la biblioteca cliente de las APIs de Google… todas son necesarias para que escribamos esta app. En resumen, esto es lo que hacen:
  • googleapiclient se enfoca en la conexión a las APIs de Google
  • httplib2 proporciona un cliente HTTP para que use la app
  • oauth2client nos ayuda a administrar las credenciales de OAuth2

Autorización y obtención de credenciales de la aplicación

SCOPES = 'https://www.googleapis.com/auth/drive.readonly.metadata'
store = file.Storage('storage.json')
creds = store.get()
if not creds or creds.invalid:
    flow = client.flow_from_clientsecrets('client_id.json', SCOPES)
    creds = tools.run_flow(flow, store)
DRIVE = discovery.build('drive', 'v3', http=creds.authorize(Http()))
  • Los permisos de la aplicación SCOPES son los que una app le pedirá al usuario que la ejecute. Para mantener la seguridad de los datos del usuario, las apps no pueden ejecutarse sin que se les otorgue permiso.
  • Una práctica recomendada es usar los permisos más restrictivos que tu app necesita para funcionar. ¿Por qué?
  • ¿No es molesto cuando una app solicita un gran conjunto de permisos cuando la instalas o ejecutas? Tengo excelentes noticias. Ahora estás del otro lado de la moneda, pidiéndoles a tus usuarios todos estos permisos. Usar permisos más restrictivos hace que los usuarios se sientan mejor al instalar tu app, ya que solicitas menos acceso.
  • La mayoría de los permisos parecen URLs largas, y el permiso de metadatos de Drive no es una excepción.
SCOPES = 'https://www.googleapis.com/auth/drive.readonly.metadata'
  • Se requiere un token para que las apps se comuniquen con los servidores de Google. Los tokens válidos que provengan de Google se guardarán en el archivo de almacenamiento de tokens, storage.json. Si no guardas estos tokens, deberás volver a autorizar tu app cada vez que la ejecutes.
store = file.Storage('storage.json')
  • Primero, esta app verifica si ya tenemos credenciales válidas en el almacenamiento (consulta la condición de la instrucción if).
creds = store.get()
if not creds or creds.invalid:
  • Si no tienes credenciales o estas vencieron, se debe compilar un nuevo flujo de autorización [a través de oauth2client.client.flow_from_clientsecrets()] a partir del ID y el secreto del cliente de OAuth en el archivo client_id.json que descargaste.
if not creds or creds.invalid:
    flow = client.flow_from_clientsecrets('client_id.json', SCOPES)
  • Una vez que tu app tenga un flujo, debe ejecutarse para presentarle al usuario la pantalla de permisos de OAuth2 [a través de oauth2client.tools.run_flow()] que se describió y se ilustró anteriormente.
    creds = tools.run_flow(flow, store)
  • Cuando hacen clic en Permitir, los usuarios dan su consentimiento para que tu app acceda a los metadatos de sus archivos de Google Drive, y los servidores de Google devuelven tokens para acceder a la API. Se devuelven como creds y se almacenan en caché en el archivo storage.json.
  • En este punto, tu app ya tiene credenciales válidas para realizar llamadas a la API. La llamada a googleapiclient.discovery.build() crea un extremo de servicio para la API que estás usando.
  • Para usar build(), pasa el nombre de la API ('drive') y la versión deseada (actualmente 'v3').
  • El parámetro final es un cliente HTTP que se usará para las llamadas a la API encriptadas.
DRIVE = discovery.build('drive', 'v3', http=creds.authorize(Http()))

Recupera y muestra los primeros 100 archivos o carpetas de Drive y los tipos de MIME.

files = DRIVE.files().list().execute().get('files', [])
for f in files:
    print(f['name'], f['mimeType'])
  • La siguiente línea de código llama al método list() en la colección files() de la API de Drive para compilar la solicitud, que se llama de inmediato con execute(). Se devuelve un dict de Python desde el que solicitamos la clave 'files' para obtener los nombres de 100 archivos y carpetas del Google Drive del usuario (o menos si tienes menos archivos).
  • ¿Por qué 100? Ese es el valor predeterminado de DRIVE.files().list(). Si quieres cambiar este número, por ejemplo, a solo 10 archivos o 1,000, agrega el parámetro pageSize a tu solicitud: DRIVE.files().list(pageSize=10). Aquí tienes la documentación para obtener más opciones.
  • La parte final del script itera cada archivo y muestra sus nombres y tipos MIME.

Ahora escribiste tu primera aplicación que usa una API de REST de Google. ¡Felicitaciones! Además de las importaciones y el código de autorización, esta secuencia de comandos solo tiene un par de líneas de código (lo que ves arriba). La mayoría de las APIs de Google funcionan de manera similar, y solo necesitarías crear extremos de servicio para cada una de las que quieras usar.

Cómo usar más de una API de Google en una app

Sí, puedes usar más de una API en la misma app. A continuación, se muestra un fragmento de código en Python para una app que reutiliza el mismo cliente HTTP y crea extremos de servicio para tres APIs de Google (sí, también con 3 SCOPES diferentes):

SCOPES = (
    'https://www.googleapis.com/auth/drive',
    'https://www.googleapis.com/auth/spreadsheets.readonly',
    'https://www.googleapis.com/auth/presentations',
)

    . . .

HTTP   = creds.authorize(Http())
DRIVE  = discovery.build('drive',  'v3', http=HTTP)
SHEETS = discovery.build('sheets', 'v4', http=HTTP)
SLIDES = discovery.build('slides', 'v1', http=HTTP)

Imaginamos que este código puede formar parte de una app que genera varias presentaciones (API de Slides) basadas en datos de hojas de cálculo (API de Sheets) y usa una plantilla de diapositivas que se copia (API de Drive) para cada presentación generada. Si bien no existe una app de este tipo, deberías poder crear algo similar con dos muestras existentes que el equipo de Google Workspace creó como bloques de creación:

  • Reemplazo de texto e imágenes en diapositivas ( publicación de blog y video): Usa la API de Drive para copiar una plantilla de diapositivas y, luego, emplea la API de Slides para cambiar los marcadores de posición de texto e imágenes.
  • Generar diapositivas a partir de datos de hojas de cálculo ( publicación de blog y video): Lee datos de una hoja de cálculo (API de Sheets) y crea diapositivas (API de Slides) en función de esos datos.

Tu desafío es crear esa app.

12. *Uso avanzado de la consola para desarrolladores

En esta sección opcional, describimos cómo crear proyectos en la consola para desarrolladores, habilitar APIs y obtener credenciales, todo sin usar el asistente como se indicó anteriormente en el codelab. Esto es para usuarios intermedios que se sienten lo suficientemente cómodos como para hacerlo de forma manual o que desean aprender a hacerlo.

Especifica el proyecto en la consola de Cloud

Cada vez que escribas una aplicación con las APIs de Google, deberás tener un proyecto. Puedes reutilizar un proyecto existente o crear uno nuevo. Esto sucede en la consola de Cloud. Algunos codelabs proporcionan un vínculo mágico (es decir, como un asistente de configuración) que te permite comenzar rápidamente y omitir muchos de los pasos obligatorios. Sin embargo, no todos lo hacen, por lo que estas instrucciones son generales sobre cómo crear proyectos.

Puedes crear proyectos desde la mayoría de las pantallas de Cloud Console, siempre y cuando hayas accedido con tus credenciales de Google y veas un menú desplegable de proyectos en la parte superior de la consola. Ten en cuenta que la mayoría de las capturas de pantalla que se muestran aquí se tomaron del Administrador de APIs, también conocido como Consola para desarrolladores (se puede acceder fácilmente a él haciendo clic en "Administrador de APIs" en la navegación de la izquierda o dirigiendo directamente tu navegador a console.developers.google.com).

  1. Si aún no tienes proyectos, es posible que se te redireccione a…
  2. La página Panel: Gwkk2zcSPOHlRzCGsmBDqfdsEMopOgJyJzh6TunpVFOP3R7bN0-iGt81mNueGxoAei6wCqgQBENsamw3v4ozZJtQgKva6v_90dYJ-rvQjUn9U89avlG1tepDYT9HHjZmYixLD0hACQ
  3. La página Biblioteca: NqfejNuo6fJfiTXERiCNAFTnno1JGgudf7M2zVyM9DzXP4E6ruoVxHvFQOPW-HFL5SZvm-WohzPTf7njBS9VCwuu4XnwhQ7CB83tNkH0jsYEx31hO6UMBVHPJS1BMjidg5kh-c7MEw
  4. o una página completamente en blanco: LcJ-wgOFlYa9uZm46fwUkfFTkXIcbhuk607KDaCz8_8NM09RHblz6T5JoWhH7uwSE2q6hKW9XnlutzUqd8yvRAEXFzQjqNNTuscj19yKGkMjbPixeUB8-F1y4Tz7eCpeOEzBUw70yw Si te sucede esto último, solo actualiza el navegador para que te dirija a la página Biblioteca.
  5. Ya sea que estés en las páginas Panel o Biblioteca, haz clic en el selector de proyectos en la parte superior de la página: 3f5REVgveKDcJ8wG2C9gduFBftJb6RNtdQQJ79vwFmQCMU8_t_vxja8jPGIK-ZrpjSqGkRkY4k02xth-7FWNPj4GZUdcBmKQe97LporGaLvwIFzzR5wtH5mEEoA1a74_fnrh9YAqqg
  6. A continuación, aparecerá el diálogo del selector. Haz clic en el signo "+" que se encuentra en el lado derecho para crear un proyecto nuevo: jNzs1bp1eWkpJT3S3AGTm9ejYT2mB3rEd1QajOhO0AR3YxcwaCcF4WlMzdmgOFtlIPQfGEMUysM6m7r89_Fc0Dyy--mjPhCEKdLRZjaozLOvoZOzKtIxdMoWFHCVc2N1K-2HES_k4Q
  7. Después de hacer clic en el signo “+”, aparecerá la página Proyecto nuevo. De forma predeterminada, todas las cuentas personales obtienen 12 proyectos. Antes de crear tu primer proyecto, deberás aceptar las Condiciones del Servicio de las APIs de Google: bCB0sQ6k5nfrajlhc-S61MVzyYYBqu6XVNKeRDzXNvKZUNlSeVJSLbkP8sPNi5A-5hWIFzhsQ5R_ER9BBb2bE_B02c1neY2iO5SSe6XDFldppsXbkWm63-0l3ugtSDQS-TeM1d773w

Después de hacerlo, las preguntas sobre la solicitud por correo electrónico y las Condiciones del Servicio desaparecerán cuando crees proyectos futuros:

Pj31ZKoAAnw_JiSz8io7e4yC2Xh3voETusvePf0DS64IMB4aVy9CtANg2r-2NgPxLjbqcfd-Vs33ZNdN7Diz7sZo3j-MKS83SuNXlhGT8ivdhpIvizP1dsYeK1MBQ4HlDZA5aQkIhg 5. Si creaste al menos un proyecto en el pasado, después de acceder, se te dirigirá al panel del último proyecto en el que trabajaste. Desde allí, crea un proyecto nuevo como si eligieras Seleccionar un proyecto > +. 6. Una vez que se cree tu proyecto nuevo, volverás a la página del Panel: ana4q1H1Q8KNTBEVb62Cc6NVA8VZbxb6BLgf4-bLqLV-p7n8UWv3WW3FN-49CE0x1kARav3pelxOBwNuUDELmitMRFhUNXuaw9-CH9DO3Lek_ifnaI3ZsxSy67Z1UsBO95SPFqlf8Q

Ahora creaste un proyecto correctamente y puedes continuar eligiendo las APIs que deseas usar en tu proyecto.

Habilita las APIs de Google

Antes de comenzar a usar las APIs de Google, debes habilitarlas. En el siguiente ejemplo, se muestra lo que harías para habilitar la API de Cloud Vision. En este codelab, es posible que uses una o más APIs, y debes seguir pasos similares para habilitarlas antes de usarlas.

Desde Cloud Shell

Con Cloud Shell, puedes habilitar la API con el siguiente comando:

gcloud services enable vision.googleapis.com

Desde la consola de Cloud

También puedes habilitar la API de Vision en el Administrador de APIs. En la consola de Cloud, ve a Administrador de APIs y selecciona "Biblioteca".

mg03by3QV6kco0rVVV_8IA6VobAoMG4Yoyl-PofNM0dHK8IcoDmpoLUwWeiKFFjpxHWlS1td5-0n7kNkfqHVhSsTSW_hUMvRu3D72g3LCFb7u4v4bla_Z4XyonTVK8PpigMLJcE01g

En la barra de búsqueda, comienza a escribir “vision” y, luego, selecciona la API de Vision cuando aparezca. Mientras escribes, puede verse de la siguiente manera:

B6fWWsVhymufgQx6oGIq4sgukK6JQ1VoguVOrSNf_anQb6Cv6RTLtsjx5Qdeu3-uO8-8PyqwZLYdDDjYW5o56R47cnsd_88RKTMqNkpFeDESW2hmBM_7FK2UAMz1_216yXERYSp_JA

Selecciona la API de Cloud Vision para obtener el diálogo que se muestra a continuación y, luego, haz clic en el botón "Habilitar":

D-MONPLi0UWH6Dp607Dod6JF-LJQZIiUQEPQNKM4Y0mSt09KfipbeeXRAE6cokArBYTfL9VQoONc4L0jlnsUYLsNytQIPfSKr9lCDrXmrrx-1w64LeWWa-byDxcyYWZdCI0mAcVzBw

Costo

Si bien muchas APIs de Google se pueden usar sin cargo, el uso de GCP (productos y APIs) no es gratuito. Cuando habilites la API de Vision (como se describió anteriormente), es posible que se te solicite una cuenta de facturación activa. El usuario debe consultar la información sobre los precios de la API de Vision antes de habilitarla. Ten en cuenta que ciertos productos de Google Cloud Platform (GCP) incluyen un nivel"Siempre gratuito" que debes superar para que se te facture. Para los fines de este codelab, cada llamada a la API de Vision se cuenta en ese nivel gratuito y, siempre que te mantengas dentro de sus límites en conjunto (dentro de cada mes), no deberías incurrir en ningún cargo.

Algunas APIs de Google, es decir, Google Workspace tiene un uso cubierto por una suscripción mensual, por lo que no hay facturación directa por el uso de las APIs de Gmail, Google Drive, Calendario, Documentos, Hojas de cálculo y Presentaciones, por ejemplo. Los diferentes productos de Google se facturan de manera diferente, así que asegúrate de consultar la documentación de la API para obtener esa información.

Resumen

En este codelab, solo debes activar la API de Google Drive, así que sigue las instrucciones anteriores y busca "Drive". Continúa una vez que se habilite.

Autoriza solicitudes a la API (autorización del usuario)

Introducción a la autorización (y algo de autenticación)

Para realizar solicitudes a las APIs, tu aplicación debe tener la autorización adecuada. Autenticación, una palabra similar, describe las credenciales de acceso. Te autenticas cuando accedes a tu Cuenta de Google con un nombre de usuario y una contraseña. Una vez que se realiza la autenticación, el siguiente paso es determinar si tú (o, mejor dicho, tu código) tienes autorización para acceder a los datos, como los archivos de BLOB en Cloud Storage o los archivos personales de un usuario en Google Drive.

Las APIs de Google admiten varios tipos de autorización, pero la más común para los usuarios de las APIs de Google Workspace es la autorización del usuario, ya que la aplicación de ejemplo de este codelab accede a datos que pertenecen a usuarios finales. Esos usuarios finales deben otorgar permiso a tu app para acceder a sus datos. Esto significa que tu código debe obtener credenciales de OAuth2 de la cuenta del usuario.

Para obtener credenciales de OAuth2 para la autorización del usuario, vuelve al administrador de APIs y selecciona la pestaña "Credenciales" en la navegación de la izquierda:

Y33PZ_rJC1y7NH7Rrvq1kN_WxZ9CppDGJK8tTSaha298Jlm5pMqgnyweIO4oX34fcLy0_VI4gihYu5wpEM_LeJg1iDAFoidhUVyfqJX3QTzODQ_OGjHLXYBxPpUvihCJi9JGwvMREw

Cuando llegues, verás todas tus credenciales en tres secciones separadas:

ComE4qh76dwZbIehkDUm1QawHGia_qVe7w7rkmgbeo_wjWS--kqXCt4_zvm55iy_RXA8dKYKvBxIKazkcYQ8871SA_kNslbvum_n1Ju4k9qJJSMtDhPAnofcvIlqlKm1nu7PBQhmEg

El primero es para las claves de API, el segundo para los IDs de cliente de OAuth 2.0 y el último para las cuentas de servicio de OAuth2. Usaremos el del medio.

Crea las credenciales

En la página Credenciales, haz clic en el botón + Crear credenciales que se encuentra en la parte superior, lo que te mostrará un diálogo en el que deberás elegir "ID de cliente de OAuth":

C7jTddfrczo3GewPGCxbxX13GawtFc6FGvAPFusPc_IW-tr5M6xgXd1OzOHOUTo86WDa9fXiCITogv9b3wAgOcYM7xS3AmVNaPdTxbAynIe_sia2_x3LEPsBrdbX8NjeI2WaHRioOA

En la siguiente pantalla, tienes 2 acciones: configurar la "pantalla de consentimiento" de autorización de tu app y elegir el tipo de aplicación:

El9_aqPQ6Q9hOsOp3JUC5qnCm_A_BVI-oCEfPk_MsvybnWBmC5lT6CtXSoZ7EQoFzrcBEzo4zF9s8CbhXyo0e-eSY3pZ1zg0BRvT0YssMMhbzEG-gP_jiO8v9q9HYTjg-QW5jJ0RDA

Si no configuraste una pantalla de consentimiento, verás la advertencia en la consola y deberás hacerlo ahora. (Omite estos pasos si ya configuraste la pantalla de consentimiento).

Haz clic en "Configurar la pantalla de consentimiento", donde seleccionarás una app "Externa" (o "Interna" si eres cliente de Google Workspace):

5w-9R6gPvUHFzODZxXy-0GEhL8ZGDGNea3QtMp1FFYDv5DJ_MIDD21NEh3CzI-GKNzy6bkhH7bohxOG8icQTegiWlavOQhQqhSy7K31Ma3YTI9aAP3P-LmTBanPslX1cnjKLVZBi8A

Ten en cuenta que, para los fines de este ejercicio, no importa cuál elijas, ya que no publicarás la muestra del codelab. La mayoría de las personas seleccionará "Externa" para acceder a una pantalla más compleja, pero solo necesitas completar el campo "Nombre de la aplicación" en la parte superior:

8e9z_RQz8lumYbDIcBvm57_Gpptn9uhrVQHoRzJ01AJNOFmXloDO7Eg3hhzJZZIU2F5rR0MxTCw-oXVFCq683xUwD4O33pXeuFsOMtM8EZhyjDoYc8Kv4hEoaG0Ztq9ePx6De7YmfA

Lo único que necesitas en este momento es un nombre para la aplicación, así que elige uno que refleje el codelab que estás haciendo y, luego, haz clic en Guardar.

Cómo crear un ID de cliente de OAuth (autorización de la cuenta de usuario)

Ahora, vuelve a la pestaña Credenciales para crear un ID de cliente de OAuth2. Aquí verás una variedad de IDs de cliente de OAuth que puedes crear:

f8reuhsxOUNLcVrEIyRVsmP_fX_ceIlLvEKql1YHwSPW9jk9Mm9fJ0UlfUoi8eRN3QQXar4xtpo071zj6LSczNN7TYY8zB96Dn6ICZuvCAtjIgJSKdMSlX-ZhMuSWFpxxv661aUemw

Estamos desarrollando una herramienta de línea de comandos, que es Otro, así que elige esa opción y, luego, haz clic en el botón Crear. Elige un nombre de ID de cliente que refleje la app que estás creando o simplemente toma el nombre predeterminado, que suele ser "Otro cliente N".

Cómo guardar tus credenciales

  1. Aparecerá un diálogo con las nuevas credenciales. Haz clic en Aceptar para cerrarlo.

rAwekj_GNEuVwGbZOYYlGDQjlu4flE61OPEZIUmwMI5vGi3W365UwVCxi0mVNhg4WZSSczZywrZZ6NDM_U0FJ4b-TOIMEC189uybOJjgn8F_axesVMopel9RlehRBXdEFhN4d41WGQ

  1. En la página Credenciales, desplázate hacia abajo hasta la sección "IDs de cliente de OAuth 2.0", busca el ícono de descarga aAmje6kT_xSUM4BKIlPREpjosx7C_xxwpWqBgiGVfVWxQ8nnQOfxTPhuU0QwSnmbjykZffGrqyP1nnKrEQ7D7OqYaGw_Uzscs9gX2RwwP4AmvtHIiTFLa0gkprzJSjG9pQSx7HtmSQ en la parte inferior derecha de tu ID de cliente recién creado y haz clic en él. x-vb-sKZy-X8a1X4uTsBWotSd4wn0PGt4mHMNv6DUrq5J5ihpujUyTiIVr5SHw0p2ZDy0KTP-zqOaFX-Az9BYDWG90KNFmsRLTUOo1mUVk7dYRJiK3VwYJNU0bbxjsbbpqcTr5_oLw
  2. Se abrirá un diálogo para guardar un archivo llamado client_secret-LONG-HASH-STRING.apps.googleusercontent.com.json, probablemente en tu carpeta Descargas. Te recomendamos que lo acortes a un nombre más fácil, como client_secret.json (que es el que usa la app de ejemplo), y, luego, lo guardes en el directorio o la carpeta en los que crearás la app de ejemplo en este codelab.