Cómo acceder a archivos de Google Drive programáticamente usando el ámbito drive.file y el Picker setFileIds()

Desarrollar una aplicación que procese currículos enviados a través de Google Forms y los almacene en Google Drive puede presentar ciertos desafíos, especialmente en lo que respecta al manejo de permisos y la eficiencia en el acceso a los archivos. Este artículo aborda una solución a estos problemas utilizando la API de Google Picker y el ámbito drive.file.

Desafíos

Al utilizar el ámbito drive.file, la aplicación solo puede acceder a archivos que han sido “abiertos” explícitamente por el usuario, lo que resulta complicado cuando se manejan múltiples currículos. Otorgar acceso manual a cada archivo no es práctico ni eficiente.

Solución

La nueva función de la API de Picker, setFileIds(fileIds), permite navegar previamente a IDs de archivo específicos. La cuestión es: ¿puede la aplicación, utilizando esta función con el ámbito drive.file, tratar automáticamente los archivos seleccionados como si hubieran sido “abiertos”? La respuesta a esto es clave para optimizar el procesamiento de los datos de los currículos.

Implementación

La aplicación se desarrollará utilizando el siguiente flujo:

  1. Carga de bibliotecas de Google: Se inicia la carga de las bibliotecas necesarias para interactuar con Google Drive y la API de Picker.
  2. Inicialización del Picker: Se configura la API de Picker, que permite a los usuarios seleccionar archivos desde su Google Drive.
  3. Gestión de selección de archivos: Cuando un reclutador selecciona un archivo, la aplicación debe capturar el ID del archivo y, con el token de acceso obtenido, proceder a acceder al contenido del archivo.

Código de Ejemplo

A continuación, se presenta un fragmento del código HTML y JavaScript necesario para implementar esta funcionalidad:

<button onclick="handleFileAccess()" id="pickButton" disabled>Select File from Google Drive</button>
<button onclick="openInDrive()" id="openInDriveBtn" style="display: none;">Open in Drive</button>
<button onclick="fetchContent()" id="fetchContentBtn" style="display: none;">Fetch Content</button>
<div id="result"></div>

<script>
const CLIENT_ID = '';
const API_KEY = '';
const SCOPE = 'https://www.googleapis.com/auth/drive.file';

let pickerInitialized = false;
let tokenClient;
let accessToken = null;
let selectedFile = null;

async function handleFileAccess() {
  if (!pickerInitialized) {
    showError('Picker not initialized yet.');
    return;
  }
  if (!accessToken) {
    tokenClient.requestAccessToken({ prompt: 'consent' });
  } else {
    await showPicker();
  }
}

function showPicker() {
  const picker = new google.picker.PickerBuilder()
      .addView(google.picker.ViewId.DOCS)
      .setOAuthToken(accessToken)
      .setDeveloperKey(API_KEY)
      .setCallback(pickerCallback)
      .build();
  picker.setVisible(true);
}

function pickerCallback(data) {
  if (data[google.picker.Response.ACTION] === google.picker.Action.PICKED) {
    selectedFile = data[google.picker.Response.DOCUMENTS][0];
    fetchContent();
  } else {
    showError('Selection cancelled.');
  }
}

async function fetchContent() {
  if (!selectedFile) {
    showError('No file selected.');
    return;
  }
  const response = await fetch(`https://www.googleapis.com/drive/v3/files/${selectedFile.id}?alt=media`, {
    headers: { 'Authorization': `Bearer ${accessToken}` }
  });
  const content = await response.text();
  document.getElementById('result').innerText = content;
}

function showError(message) {
  document.getElementById('result').innerHTML = `<div class="error">Error: ${message}</div>`;
}
</script>

Consideraciones Finales

Es fundamental asegurarse de que el manejo de permisos y el acceso a los archivos cumplan con las directrices de seguridad y privacidad de Google. Implementar la funcionalidad descrita no solo mejora la eficiencia de la aplicación, sino que también optimiza la experiencia del usuario al permitirles acceder a los archivos de manera más directa y eficiente.

Con el uso correcto de la API Google Picker y el ámbito drive.file, se puede gestionar eficazmente el acceso a múltiples currículos, facilitando así el trabajo de los reclutadores.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *