Serviço avançado do Drive

para gerenciar arquivos e pastas, incluindo propriedades personalizadas e revisões.

O serviço avançado do Drive permite usar a API Google Drive no Google Apps Script. Assim como o serviço integrado do Drive do Apps Script, essa API permite que os scripts criem, encontrem e modifiquem arquivos e pastas no Google Drive. Na maioria dos casos, o serviço integrado é mais fácil de usar, mas esse serviço avançado oferece alguns recursos extras, incluindo acesso a propriedades de arquivo personalizadas e revisões de arquivos e pastas.

Esse é um serviço avançado que precisa ser ativado antes do uso.

Referência

Para informações detalhadas sobre esse serviço, consulte a documentação de referência da API Drive. Assim como todos os serviços avançados no Apps Script, o serviço avançado do Drive usa os mesmos objetos, métodos e parâmetros da API pública. Para mais informações, consulte Como as assinaturas de método são determinadas. Além disso, os métodos chamados delete na API Drive são chamados de remove no serviço avançado (como Drive.Permissions.remove()), já que delete é uma palavra reservada em JavaScript.

Para informar problemas e encontrar outras opções de suporte, consulte o guia de suporte da API Drive.

Código de amostra

Os exemplos de código nesta seção usam a versão 3 da API.

Fazer upload de arquivos

O exemplo de código a seguir mostra como salvar um arquivo no Drive de um usuário.

advanced/drive.gs
/**
 * Uploads a new file to the user's Drive.
 */
function uploadFile() {
  try {
    // Makes a request to fetch a URL.
    const image = UrlFetchApp.fetch("http://goo.gl/nd7zjB").getBlob();
    let file = {
      name: "google_logo.png",
      mimeType: "image/png",
    };
    // Create a file in the user's Drive.
    file = Drive.Files.create(file, image, { fields: "id,size" });
    console.log("ID: %s, File size (bytes): %s", file.id, file.size);
  } catch (err) {
    // TODO (developer) - Handle exception
    console.log("Failed to upload file with error %s", err.message);
  }
}

Criar uma pasta

O exemplo de código a seguir mostra como criar uma pasta no Drive.

/**
 * Creates a new folder.
 */
function createFolder() {
  var folderMetadata = {
    'name': 'New Folder',
    'mimeType': 'application/vnd.google-apps.folder'
  };
  var folder = Drive.Files.create(folderMetadata);
  Logger.log('Folder ID: ' + folder.id);
}

Pesquisar arquivos

O exemplo de código a seguir mostra como pesquisar arquivos usando uma string de consulta.

/**
 * Searches for files with a specific name.
 */
function searchFiles() {
  var query = 'name contains "Project Plan" and trashed = false';
  var files = Drive.Files.list({
    'q': query,
    'fields': 'files(id, name, mimeType)'
  });
  if (files.files && files.files.length > 0) {
    for (var i = 0; i < files.files.length; i++) {
      var file = files.files[i];
      Logger.log('%s (ID: %s)', file.name, file.id);
    }
  } else {
    Logger.log('No files found.');
  }
}

Listar pastas

O exemplo de código a seguir mostra como listar as pastas de nível superior no Drive do usuário. Observe o uso de tokens de página para acessar a lista completa de resultados.

advanced/drive.gs
/**
 * Lists the top-level folders in the user's Drive.
 */
function listRootFolders() {
  const query =
    '"root" in parents and trashed = false and ' +
    'mimeType = "application/vnd.google-apps.folder"';
  let folders;
  let pageToken = null;
  do {
    try {
      folders = Drive.Files.list({
        q: query,
        pageSize: 100,
        pageToken: pageToken,
      });
      if (!folders.files || folders.files.length === 0) {
        console.log("All folders found.");
        return;
      }
      for (let i = 0; i < folders.files.length; i++) {
        const folder = folders.files[i];
        console.log("%s (ID: %s)", folder.name, folder.id);
      }
      pageToken = folders.nextPageToken;
    } catch (err) {
      // TODO (developer) - Handle exception
      console.log("Failed with error %s", err.message);
    }
  } while (pageToken);
}

Listar revisões

O exemplo de código a seguir mostra como listar as revisões de um determinado arquivo. Alguns arquivos podem ter várias revisões. Use tokens de página para acessar a lista completa de resultados.

advanced/drive.gs
/**
 * Lists the revisions of a given file.
 * @param {string} fileId The ID of the file to list revisions for.
 */
function listRevisions(fileId) {
  let revisions;
  let pageToken = null;
  do {
    try {
      revisions = Drive.Revisions.list(fileId, {
        fields: "revisions(modifiedTime,size),nextPageToken",
      });
      if (!revisions.revisions || revisions.revisions.length === 0) {
        console.log("All revisions found.");
        return;
      }
      for (let i = 0; i < revisions.revisions.length; i++) {
        const revision = revisions.revisions[i];
        const date = new Date(revision.modifiedTime);
        console.log(
          "Date: %s, File size (bytes): %s",
          date.toLocaleString(),
          revision.size,
        );
      }
      pageToken = revisions.nextPageToken;
    } catch (err) {
      // TODO (developer) - Handle exception
      console.log("Failed with error %s", err.message);
    }
  } while (pageToken);
}

Adicionar propriedades do arquivo

O exemplo de código a seguir usa o campo appProperties para adicionar uma propriedade personalizada a um arquivo. A propriedade personalizada só fica visível para o script. Para adicionar uma propriedade personalizada ao arquivo que também seja visível para outros apps, use o campo properties. Para mais informações, consulte Adicionar propriedades de arquivo personalizadas.

advanced/drive.gs
/**
 * Adds a custom app property to a file. Unlike Apps Script's DocumentProperties,
 * Drive's custom file properties can be accessed outside of Apps Script and
 * by other applications; however, appProperties are only visible to the script.
 * @param {string} fileId The ID of the file to add the app property to.
 */
function addAppProperty(fileId) {
  try {
    let file = {
      appProperties: {
        department: "Sales",
      },
    };
    // Updates a file to add an app property.
    file = Drive.Files.update(file, fileId, null, {
      fields: "id,appProperties",
    });
    console.log(
      "ID: %s, appProperties: %s",
      file.id,
      JSON.stringify(file.appProperties, null, 2),
    );
  } catch (err) {
    // TODO (developer) - Handle exception
    console.log("Failed with error %s", err.message);
  }
}

Adicionar um usuário a um arquivo

O exemplo de código a seguir mostra como adicionar um usuário como editor a um arquivo e suprimir a notificação por e-mail.

/**
 * Adds a user to a file as an editor without sending an email notification.
 */
function addEditor() {
  var fileId = '1234567890abcdefghijklmnopqrstuvwxyz';
  var userEmail = 'bob@example.com';
  var request = {
    'role': 'writer',
    'type': 'user',
    'emailAddress': userEmail
  };
  Drive.Permissions.create(request, fileId, {
    'sendNotificationEmail': false
  });
}