Cercare file e cartelle

L'API Google Drive supporta diversi modi per cercare file e cartelle.

Puoi utilizzare il metodo files.list per restituire tutti o alcuni dei file e delle cartelle di un utente di Drive. Il metodo files.list può essere utilizzato anche per recuperare fileId richiesto per alcuni metodi delle risorse (ad esempio files.get e files.update).

Cerca tutti i file e le cartelle in Il mio Drive dell'utente corrente

Utilizza il metodo files.list senza parametri per restituire tutti i file e le cartelle.

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

Cercare file o cartelle specifici in Il mio Drive dell'utente corrente

Per cercare un insieme specifico di file o cartelle, utilizza il campo qstringa di query con il metodo files.list per filtrare i file da restituire combinando uno o più termini di ricerca.

Una stringa di query contiene le seguenti tre parti:

query_term operator values

Dove:

  • query_term è il termine o il campo della query su cui eseguire la ricerca.

  • operator specifica la condizione per il termine di ricerca.

  • values sono i valori specifici che vuoi utilizzare per filtrare i risultati di ricerca.

Per visualizzare i termini e gli operatori di query che puoi utilizzare per filtrare file e cartelle, consulta Termini e operatori di query di ricerca.

Ad esempio, la seguente stringa di query filtra la ricerca in modo da restituire solo le cartelle impostando il tipo MIME:

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

Per saperne di più sui tipi MIME, consulta l'articolo Tipi MIME supportati da Google Workspace e Google Drive.

Esempi di stringhe di query

La tabella seguente elenca alcuni esempi di stringhe di query di base. Il codice effettivo varia a seconda della libreria client utilizzata per la ricerca.

Devi anche utilizzare il codice di escape per i caratteri speciali nei nomi dei file per assicurarti che la query funzioni correttamente. Ad esempio, se un nome file contiene sia un apostrofo (') sia una barra rovesciata ("\"), utilizza una barra rovesciata per eseguire l'escape: name contains 'quinn\'s paper\\essay'.

Cosa vuoi interrogare Esempio
File con il nome "hello" name = 'hello'
File con un nome contenente le parole "hello" e "goodbye" name contains 'hello' and name contains 'goodbye'
File con un nome che non contiene la parola "hello" not name contains 'hello'
File che contengono il testo "importante" e nel cestino fullText contains 'important' and trashed = true
File che contengono la parola "hello" fullText contains 'hello'
File che non contengono la parola "hello" not fullText contains 'hello'
File che contengono la frase esatta "hello world" fullText contains '"hello world"'
File con una query che contiene il carattere "\" (ad esempio "\authors") fullText contains '\\authors'
File che sono cartelle mimeType = 'application/vnd.google-apps.folder'
File che non sono cartelle mimeType != 'application/vnd.google-apps.folder'
File modificati dopo una determinata data (il fuso orario predefinito è UTC) modifiedTime > '2012-06-04T12:00:00'
File di immagini o video modificati dopo una data specifica modifiedTime > '2012-06-04T12:00:00' and (mimeType contains 'image/' or mimeType contains 'video/')
File aggiunti a Speciali starred = true
File all'interno di una raccolta (ad esempio, l'ID cartella nella raccolta parents) '1234567' in parents
File in una cartella di dati dell'applicazione in una raccolta 'appDataFolder' in parents
File per i quali l'utente "[email protected]" è il proprietario '[email protected]' in owners
File per i quali l'utente "[email protected]" dispone dell'autorizzazione di scrittura '[email protected]' in writers
File per i quali i membri del gruppo "[email protected]" dispongono dell'autorizzazione di scrittura '[email protected]' in writers
File condivisi con l'utente autorizzato con "hello" nel nome sharedWithMe and name contains 'hello'
File con una proprietà personalizzata visibile a tutte le app properties has { key='mass' and value='1.3kg' }
File con una proprietà di file personalizzata privata per l'app richiedente appProperties has { key='additionalID' and value='8e8aceg2af2ge72e78' }
File che non sono stati condivisi con nessuno o con nessun dominio (solo privati o condivisi con utenti o gruppi specifici) visibility = 'limited'

Filtrare i risultati di ricerca con una libreria client

Il seguente esempio di codice mostra come utilizzare una libreria client per filtrare i risultati di ricerca in base ai nomi e agli ID dei file JPEG. Questo esempio utilizza il termine di query mimeType per restringere i risultati ai file di tipo image/jpeg. Inoltre, imposta spaces su drive per restringere ulteriormente la ricerca allo spazio Drive. Quando nextPageToken restituisce null, non ci sono altri risultati.

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
<?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;
    }
}

Cercare file con una proprietà di file personalizzata

Per cercare file con una proprietà personalizzata, utilizza il termine di query di ricerca properties o appProperties con una chiave e un valore. Ad esempio, per cercare una proprietà di file personalizzata privata per l'app richiedente chiamata additionalID con un valore di 8e8aceg2af2ge72e78:

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

Per ulteriori informazioni, vedi Aggiungere proprietà personalizzate ai file.

Cercare file con un'etichetta o un valore di campo specifico

Per cercare file con etichette specifiche, utilizza il termine di query di ricerca labels con un ID etichetta specifico. Ad esempio: 'labels/LABEL_ID' in labels. In caso di esito positivo, il corpo della risposta contiene tutte le istanze di file in cui è applicata l'etichetta.

Per cercare file senza un ID etichetta specifico: Not 'labels/LABEL_ID' in labels.

Puoi anche cercare file in base a valori di campi specifici. Ad esempio, per cercare file con un valore di testo: labels/LABEL_ID.text_field_id ='TEXT'.

Per ulteriori informazioni, vedi Cercare file con un'etichetta o un valore di campo specifico.

Cerca nei corpora

Le ricerche che chiamano files.list utilizzano corpora di user per impostazione predefinita. Per cercare altri corpus, ad esempio i file condivisi con un domain, imposta il parametro corpora.

È possibile eseguire ricerche in più corpus in una singola query, anche se potrebbero essere restituiti risultati incompleti se i corpus combinati sono troppo grandi. Se incompleteSearch è true nel corpo della risposta, significa che non sono stati restituiti tutti i documenti. Se si verifica questo problema, devi restringere la query scegliendo un corpus diverso, ad esempio user o drive.