Pesquisar arquivos e pastas

A API Google Drive oferece várias formas de pesquisar arquivos e pastas.

Você pode usar o método files.list para retornar todos ou alguns dos arquivos e pastas de um usuário do Google Drive. O files.list também pode ser usado para recuperar o fileId necessário para alguns recursos métodos (como files.get e files.update).

Pesquisar todos os arquivos e pastas no Meu Drive do usuário atual

Use o método files.list sem nenhum parâmetro para retornar todos os arquivos e do Google Cloud.

GET https://www.googleapis.com/drive/v3/files

Pesquisar arquivos ou pastas específicos no Meu Drive do usuário atual

Para pesquisar um conjunto específico de arquivos ou pastas, use o campo q da string de consulta. com o método files.list para filtrar os arquivos a serem retornados, combinando um ou mais termos de pesquisa.

Uma string de consulta contém as três partes a seguir:

query_term operator values

Em que:

  • query_term é o termo ou campo de consulta a ser pesquisado.

  • operator especifica a condição do termo de consulta.

  • values são os valores específicos que você quer usar para filtrar sua pesquisa resultados.

Para conferir os termos e operadores de consulta que você pode usar para filtrar arquivos e pastas, consulte Termos e operadores de consulta de pesquisa.

Por exemplo, a string de consulta a seguir filtra a pesquisa para retornar apenas configurando o tipo MIME:

q: mimeType = 'application/vnd.google-apps.folder'

Para mais informações sobre os tipos MIME, consulte Google Workspace e Google Drive tipos MIME compatíveis.

Exemplos de strings de consulta

A tabela a seguir lista exemplos de algumas strings de consulta básicas. O código real difere dependendo da biblioteca de cliente que você usa para sua pesquisa.

Você também deve escapar os caracteres especiais nos nomes dos arquivos para garantir que funciona corretamente. Por exemplo, se um nome de arquivo contiver um apóstrofo (') e um caractere de barra invertida ("\"), use uma barra invertida como escape: name contains 'quinn\'s paper\\essay'.

O que você quer consultar Exemplo
Arquivos com o nome "hello" name = 'hello'
Arquivos com um nome que contém as palavras "hello" e "tchau" name contains 'hello' and name contains 'goodbye'
Arquivos com nomes que não contenham a palavra "hello" not name contains 'hello'
Arquivos que contêm o texto "importante" e na lixeira fullText contains 'important' and trashed = true
Arquivos que contêm a palavra "hello" fullText contains 'hello'
Arquivos que não contêm a palavra "hello" not fullText contains 'hello'
Arquivos que contêm a frase exata "hello world" fullText contains '"hello world"'
Arquivos com uma consulta que contém o caractere "\" caractere (por exemplo, "\authors") fullText contains '\\authors'
Arquivos que são pastas mimeType = 'application/vnd.google-apps.folder'
Arquivos que não são pastas mimeType != 'application/vnd.google-apps.folder'
Arquivos modificados após uma determinada data (o fuso horário padrão é UTC) modifiedTime > '2012-06-04T12:00:00'
Arquivos de imagem ou vídeo modificados após uma data específica modifiedTime > '2012-06-04T12:00:00' and (mimeType contains 'image/' or mimeType contains 'video/')
Arquivos marcados com estrela starred = true
Arquivos em uma coleção (por exemplo, o ID da pasta na coleção parents) '1234567' in parents
Arquivos em uma pasta de dados do app em uma coleção 'appDataFolder' in parents
Arquivos do usuário "test@example.org" é o proprietário 'test@example.org' in owners
Arquivos do usuário "test@example.org" tem permissão de gravação 'test@example.org' in writers
Arquivos dos quais os membros do grupo "grupo@example.org" ter permissão de gravação 'group@example.org' in writers
Arquivos compartilhados com o usuário autorizado que usam "hello" no nome sharedWithMe and name contains 'hello'
Arquivos com uma propriedade de arquivo personalizada visível para todos os apps properties has { key='mass' and value='1.3kg' }
Arquivos com uma propriedade de arquivo personalizada particular ao app solicitante appProperties has { key='additionalID' and value='8e8aceg2af2ge72e78' }
Arquivos que não foram compartilhados com ninguém ou com domínios (apenas particulares ou com usuários ou grupos específicos) visibility = 'limited'

Filtrar resultados da pesquisa com uma biblioteca de cliente

O exemplo de código a seguir mostra como usar uma biblioteca de cliente para filtrar pesquisas resultados a nomes de arquivo e IDs de arquivos JPEG. Este exemplo usa o mimeType termo de consulta para restringir os resultados a arquivos do tipo image/jpeg. Ele também define spaces a drive para restringir ainda mais a pesquisa ao Drive espaço. Quando nextPageToken retornar null, não há mais resultados.

Java

drive/snippets/drive_v3/src/main/java/SearchFile.java
import com.google.api.client.http.HttpRequestInitializer;
import com.google.api.client.http.javanet.NetHttpTransport;
import com.google.api.client.json.gson.GsonFactory;
import com.google.api.services.drive.Drive;
import com.google.api.services.drive.DriveScopes;
import com.google.api.services.drive.model.File;
import com.google.api.services.drive.model.FileList;
import com.google.auth.http.HttpCredentialsAdapter;
import com.google.auth.oauth2.GoogleCredentials;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

/* Class to demonstrate use-case of search files. */
public class SearchFile {

  /**
   * Search for specific set of files.
   *
   * @return search result list.
   * @throws IOException if service account credentials file not found.
   */
  public static List<File> searchFile() throws IOException {
           /*Load pre-authorized user credentials from the environment.
           TODO(developer) - See https://developers.google.com/identity for
           guides on implementing OAuth2 for your application.*/
    GoogleCredentials credentials = GoogleCredentials.getApplicationDefault()
        .createScoped(Arrays.asList(DriveScopes.DRIVE_FILE));
    HttpRequestInitializer requestInitializer = new HttpCredentialsAdapter(
        credentials);

    // Build a new authorized API client service.
    Drive service = new Drive.Builder(new NetHttpTransport(),
        GsonFactory.getDefaultInstance(),
        requestInitializer)
        .setApplicationName("Drive samples")
        .build();

    List<File> files = new ArrayList<File>();

    String pageToken = null;
    do {
      FileList result = service.files().list()
          .setQ("mimeType='image/jpeg'")
          .setSpaces("drive")
          .setFields("nextPageToken, items(id, title)")
          .setPageToken(pageToken)
          .execute();
      for (File file : result.getFiles()) {
        System.out.printf("Found file: %s (%s)\n",
            file.getName(), file.getId());
      }

      files.addAll(result.getFiles());

      pageToken = result.getNextPageToken();
    } while (pageToken != null);

    return files;
  }
}

Python

drive/snippets/drive-v3/file_snippet/search_file.py
import google.auth
from googleapiclient.discovery import build
from googleapiclient.errors import HttpError


def search_file():
  """Search file in drive location

  Load pre-authorized user credentials from the environment.
  TODO(developer) - See https://developers.google.com/identity
  for guides on implementing OAuth2 for the application.
  """
  creds, _ = google.auth.default()

  try:
    # create drive api client
    service = build("drive", "v3", credentials=creds)
    files = []
    page_token = None
    while True:
      # pylint: disable=maybe-no-member
      response = (
          service.files()
          .list(
              q="mimeType='image/jpeg'",
              spaces="drive",
              fields="nextPageToken, files(id, name)",
              pageToken=page_token,
          )
          .execute()
      )
      for file in response.get("files", []):
        # Process change
        print(f'Found file: {file.get("name")}, {file.get("id")}')
      files.extend(response.get("files", []))
      page_token = response.get("nextPageToken", None)
      if page_token is None:
        break

  except HttpError as error:
    print(f"An error occurred: {error}")
    files = None

  return files


if __name__ == "__main__":
  search_file()

Node.js

drive/snippets/drive_v3/file_snippets/search_file.js
/**
 * Search file in drive location
 * @return{obj} data file
 * */
async function searchFile() {
  const {GoogleAuth} = require('google-auth-library');
  const {google} = require('googleapis');

  // Get credentials and build service
  // TODO (developer) - Use appropriate auth mechanism for your app
  const auth = new GoogleAuth({
    scopes: 'https://www.googleapis.com/auth/drive',
  });
  const service = google.drive({version: 'v3', auth});
  const files = [];
  try {
    const res = await service.files.list({
      q: 'mimeType=\'image/jpeg\'',
      fields: 'nextPageToken, files(id, name)',
      spaces: 'drive',
    });
    Array.prototype.push.apply(files, res.files);
    res.data.files.forEach(function(file) {
      console.log('Found file:', file.name, file.id);
    });
    return res.data.files;
  } catch (err) {
    // TODO(developer) - Handle error
    throw err;
  }
}

PHP

drive/snippets/drive_v3/src/DriveSearchFiles.php
use Google\Client;
use Google\Service\Drive;
function searchFiles()
{
    try {
        $client = new Client();
        $client->useApplicationDefaultCredentials();
        $client->addScope(Drive::DRIVE);
        $driveService = new Drive($client);
        $files = array();
        $pageToken = null;
        do {
            $response = $driveService->files->listFiles(array(
                'q' => "mimeType='image/jpeg'",
                'spaces' => 'drive',
                'pageToken' => $pageToken,
                'fields' => 'nextPageToken, files(id, name)',
            ));
            foreach ($response->files as $file) {
                printf("Found file: %s (%s)\n", $file->name, $file->id);
            }
            array_push($files, $response->files);

            $pageToken = $response->pageToken;
        } while ($pageToken != null);
        return $files;
    } catch(Exception $e) {
       echo "Error Message: ".$e;
    }
}

Pesquisar arquivos com uma propriedade de arquivo personalizada

Para pesquisar arquivos com uma propriedade de arquivo personalizada, use os métodos properties ou o termo da consulta de pesquisa appProperties com uma chave e um valor. Por exemplo, para pesquisar uma propriedade de arquivo personalizada particular para o aplicativo solicitante chamada additionalID com um valor de 8e8aceg2af2ge72e78:

appProperties has { key='additionalID' and value='8e8aceg2af2ge72e78' }

Para mais informações, consulte Adicionar arquivo personalizado do Terraform.

Pesquisar arquivos com um marcador específico ou valor de campo

Para pesquisar arquivos com marcadores específicos, use o termo de consulta de pesquisa labels com um ID de rótulo específico. Por exemplo, 'labels/LABEL_ID' in labels. Se bem-sucedido, o corpo da resposta conterá todas as instâncias do arquivo em que o o rótulo foi aplicado.

Para pesquisar arquivos sem um ID de marcador específico: Not 'labels/LABEL_ID' in labels.

Também é possível pesquisar arquivos com base em valores de campos específicos. Por exemplo, para pesquise arquivos com um valor de texto: labels/LABEL_ID.text_field_id ='TEXT':

Saiba mais em Pesquisar arquivos com um marcador ou campo específico .

Pesquisar o corpora

Pesquisas que chamam files.list usam o corpora de user por padrão. Para pesquisar em outros corpora, como arquivos compartilhados com um domain, defina o corpora. .

Vários corpora podem ser pesquisados em uma única consulta, embora resultados incompletos podem ser retornados se o corpora combinado for muito grande. Se incompleteSearch for true no corpo da resposta, nem todos os documentos foram retornados. Se esse ocorrer, restrinja sua consulta escolhendo um corpora diferente, como user ou drive.