Rechercher des fichiers et des dossiers

L'API Google Drive propose plusieurs méthodes pour rechercher des fichiers et des dossiers.

Vous pouvez utiliser la méthode files.list pour renvoyer tout ou partie des fichiers et des dossiers d'un utilisateur Drive. La méthode files.list peut également être utilisée pour récupérer le fileId requis pour certaines méthodes de ressources (telles que files.get et files.update).

Rechercher tous les fichiers et dossiers dans le dossier Mon Drive de l'utilisateur actuel

Utilisez la méthode files.list sans paramètre pour renvoyer tous les fichiers et dossiers.

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

Rechercher des fichiers ou des dossiers spécifiques dans le dossier Mon Drive de l'utilisateur actuel

Pour rechercher un ensemble spécifique de fichiers ou de dossiers, utilisez le champ de chaîne de requête q avec la méthode files.list pour filtrer les fichiers à renvoyer en combinant un ou plusieurs termes de recherche.

Une chaîne de requête se compose des trois parties suivantes:

query_term operator values

Où :

  • query_term est le terme ou le champ de requête à rechercher.

  • operator spécifie la condition du terme de requête.

  • values correspond aux valeurs spécifiques que vous souhaitez utiliser pour filtrer les résultats de recherche.

Pour afficher les termes et opérateurs de requête que vous pouvez utiliser pour filtrer les fichiers et les dossiers, consultez la section Termes et opérateurs de requête de recherche.

Par exemple, la chaîne de requête suivante filtre la recherche pour ne renvoyer que des dossiers en définissant le type MIME:

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

Pour en savoir plus sur les types MIME, consultez Types MIME compatibles avec Google Workspace et Google Drive.

Exemples de chaînes de requête

Le tableau suivant répertorie des exemples de chaînes de requête de base. Le code réel varie en fonction de la bibliothèque cliente que vous utilisez pour votre recherche.

Vous devez également échapper les caractères spéciaux dans les noms de fichiers pour vous assurer que la requête fonctionne correctement. Par exemple, si un nom de fichier contient à la fois une apostrophe (') et une barre oblique inverse ("\"), utilisez une barre oblique inverse pour les échapper: name contains 'quinn\'s paper\\essay'.

Ce que vous souhaitez interroger Exemple
Fichiers nommés "hello" name = 'hello'
Fichiers dont le nom contient les mots "bonjour" et "au revoir" name contains 'hello' and name contains 'goodbye'
Les fichiers dont le nom ne contient pas le mot "bonjour" not name contains 'hello'
Fichiers contenant le texte "important" et placés dans la corbeille fullText contains 'important' and trashed = true
Fichiers contenant le mot "hello" fullText contains 'hello'
Fichiers qui ne contiennent pas le mot "hello" not fullText contains 'hello'
Fichiers contenant l'expression exacte "hello world" fullText contains '"hello world"'
Fichiers associés à une requête contenant le caractère "\" (par exemple, "\authors") fullText contains '\\authors'
Fichiers correspondant à des dossiers mimeType = 'application/vnd.google-apps.folder'
Fichiers autres que des dossiers mimeType != 'application/vnd.google-apps.folder'
Fichiers modifiés après une date donnée (le fuseau horaire par défaut est UTC) modifiedTime > '2012-06-04T12:00:00'
Fichiers image ou vidéo modifiés après une date spécifique modifiedTime > '2012-06-04T12:00:00' and (mimeType contains 'image/' or mimeType contains 'video/')
Fichiers suivis starred = true
Les fichiers d'une collection (par exemple, l'ID de dossier dans la collection parents) '1234567' in parents
les fichiers d'un dossier de données d'application dans une collection ; 'appDataFolder' in parents
Fichiers dont l'utilisateur "test@example.org" est le propriétaire 'test@example.org' in owners
Fichiers pour lesquels l'utilisateur "test@example.org" dispose d'une autorisation en écriture 'test@example.org' in writers
Fichiers pour lesquels les membres du groupe "group@example.org" disposent d'une autorisation en écriture 'group@example.org' in writers
Fichiers partagés avec l'utilisateur autorisé dont le nom contient "hello" sharedWithMe and name contains 'hello'
Fichiers associés à une propriété de fichier personnalisée visible par toutes les applications properties has { key='mass' and value='1.3kg' }
Fichiers avec une propriété de fichier personnalisée réservée à l'application à l'origine de la demande appProperties has { key='additionalID' and value='8e8aceg2af2ge72e78' }
les fichiers qui n'ont été partagés avec personne ou avec des domaines (uniquement privés, ou partagés avec des utilisateurs ou des groupes spécifiques) ; visibility = 'limited'

Filtrer les résultats de recherche avec une bibliothèque cliente

L'exemple de code suivant montre comment utiliser une bibliothèque cliente pour filtrer les résultats de recherche en fonction des noms et des ID de fichiers JPEG. Cet exemple utilise le terme de requête mimeType pour limiter les résultats aux fichiers de type image/jpeg. Il définit également spaces sur drive pour affiner davantage la recherche à l' espace Drive. Lorsque nextPageToken renvoie null, il n'y a plus de résultats.

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

Rechercher des fichiers dont la propriété est personnalisée

Pour rechercher des fichiers avec une propriété de fichier personnalisée, utilisez le terme de requête de recherche properties ou appProperties avec une clé et une valeur. Par exemple, pour rechercher une propriété de fichier personnalisée réservée à l'application à l'origine de la demande, appelée additionalID et dont la valeur est 8e8aceg2af2ge72e78:

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

Pour en savoir plus, consultez la section Ajouter des propriétés de fichier personnalisées.

Rechercher des fichiers avec un libellé ou une valeur de champ spécifique

Pour rechercher des fichiers associés à des libellés spécifiques, utilisez le terme de requête de recherche labels avec un ID de libellé spécifique. Exemple : 'labels/LABEL_ID' in labels. Si la requête aboutit, le corps de la réponse contient toutes les instances de fichier auxquelles le libellé est appliqué.

Pour rechercher des fichiers sans ID de libellé spécifique: Not 'labels/LABEL_ID' in labels.

Vous pouvez également rechercher des fichiers en fonction de valeurs de champs spécifiques. Par exemple, pour rechercher des fichiers contenant une valeur textuelle : labels/LABEL_ID.text_field_id ='TEXT'.

Pour en savoir plus, consultez la section Rechercher des fichiers avec un libellé ou une valeur de champ spécifique.

Rechercher dans les corpus

Les recherches qui appellent files.list utilisent le corpora de user par défaut. Pour rechercher d'autres corpus, tels que des fichiers partagés avec un domain, définissez le paramètre corpora.

Plusieurs corpus peuvent être recherchés dans une même requête, mais des résultats incomplets peuvent être renvoyés si les corpus combinés sont trop volumineux. Si incompleteSearch est défini sur true dans le corps de la réponse, tous les documents n'ont pas été renvoyés. Si cela se produit, vous devez affiner votre requête en choisissant un autre corpus, tel que user ou drive.