Поиск файлов и папок

API Google Drive поддерживает несколько способов поиска файлов и папок.

Метод files.list можно использовать для возврата всех или некоторых файлов и папок пользователя Диска. Его также можно использовать для получения идентификатора fileId files.list необходимого для некоторых методов ресурсов (например, files.get и files.update ).

Поиск всех файлов и папок на Моем диске текущего пользователя

Используйте метод files.list без параметров, чтобы вернуть все файлы и папки.

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

Поиск определенных файлов или папок на Моем диске текущего пользователя

Чтобы найти определенный набор файлов или папок, используйте поле строки запроса q с методом files.list , чтобы отфильтровать возвращаемые файлы, объединив один или несколько поисковых терминов.

Строка запроса состоит из следующих трех частей:

query_term operator values

Где:

  • query_term — термин запроса или поле для поиска.

  • operator задает условие для термина запроса.

  • values — это конкретные значения, которые вы хотите использовать для фильтрации результатов поиска.

Чтобы просмотреть термины и операторы запроса, которые можно использовать для фильтрации файлов и папок, см . раздел Термины и операторы поискового запроса .

Например, следующая строка запроса фильтрует поиск, возвращая только папки, устанавливая тип MIME:

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

Дополнительные сведения о типах MIME см. в разделе Типы MIME, поддерживаемые Google Workspace и Google Drive .

Примеры строк запроса

В следующей таблице приведены примеры некоторых базовых строк запроса. Фактический код различается в зависимости от клиентской библиотеки, используемой для поиска.

Также необходимо экранировать специальные символы в именах файлов, чтобы обеспечить корректную работу запроса. Например, если имя файла содержит как апостроф ( ' ), так и обратную косую черту ( "\" ), используйте обратную косую черту для их экранирования: name contains 'quinn\'s paper\\essay' .

Что вы хотите запросить Пример
Файлы с именем "привет" name = 'hello'
Файлы с именем, содержащим слова «привет» и «до свидания» name contains 'hello' and name contains 'goodbye'
Файлы, в имени которых нет слова «привет» not name contains 'hello'
Файлы, содержащие текст «важно» и находящиеся в корзине fullText contains 'important' and trashed = true
Файлы, содержащие слово «привет» fullText contains 'hello'
Файлы, в которых нет слова «привет» not fullText contains 'hello'
Файлы, содержащие точную фразу «hello world» fullText contains '"hello world"'
Файлы с запросом, содержащим символ «\» (например, «\authors») fullText contains '\\authors'
Файлы, являющиеся папками mimeType = 'application/vnd.google-apps.folder'
Файлы, которые не являются папками mimeType != 'application/vnd.google-apps.folder'
Файлы, измененные после указанной даты (часовой пояс по умолчанию — UTC) modifiedTime > '2012-06-04T12:00:00'
Файлы изображений или видео, измененные после определенной даты modifiedTime > '2012-06-04T12:00:00' and (mimeType contains 'image/' or mimeType contains 'video/')
Файлы, отмеченные звездочкой starred = true
Файлы внутри коллекции (например, идентификатор папки в parents коллекции) '1234567' in parents
Файлы в папке данных приложения в коллекции 'appDataFolder' in parents
Файлы, владельцем которых является пользователь «[email protected]» '[email protected]' in owners
Файлы, для которых пользователь «[email protected]» имеет разрешение на запись '[email protected]' in writers
Файлы, для которых члены группы «[email protected]» имеют разрешение на запись '[email protected]' in writers
Файлы, предоставленные авторизованному пользователю с «привет» в имени sharedWithMe and name contains 'hello'
Файлы с настраиваемыми свойствами, видимые всем приложениям properties has { key='mass' and value='1.3kg' }
Файлы с пользовательскими свойствами, доступными только запрашивающему приложению appProperties has { key='additionalID' and value='8e8aceg2af2ge72e78' }
Файлы, которые не были предоставлены кому-либо или доменам (только личные или предоставлены определенным пользователям или группам) visibility = 'limited'

Фильтрация результатов поиска с помощью клиентской библиотеки

В следующем примере кода показано, как использовать клиентскую библиотеку для фильтрации результатов поиска по именам и идентификаторам JPEG-файлов. В этом примере используется запрос mimeType для сужения результатов до файлов типа image/jpeg . Также задаются spaces на drive для дальнейшего сужения области поиска до пространства Drive . Если nextPageToken возвращает null , результаты больше не возвращаются.

Ява

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

Питон

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

диск/сниппеты/диск_v3/файл_сниппеты/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;
    }
}

Поиск файлов с пользовательскими свойствами файла

Чтобы найти файлы с пользовательским свойством, используйте либо properties , либо поисковый запрос appProperties с ключом и значением. Например, чтобы найти пользовательское свойство файла, являющееся приватным для запрашивающего приложения, с именем additionalID и значением 8e8aceg2af2ge72e78 :

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

Для получения дополнительной информации см. раздел Добавление пользовательских свойств файла .

Поиск файлов с определенной меткой или значением поля

Чтобы найти файлы с определёнными метками, используйте поисковый запрос labels с заданным идентификатором метки. Например, 'labels/ LABEL_ID ' in labels . В случае успеха тело ответа содержит все экземпляры файлов, к которым применена метка.

Для поиска файлов без определенного идентификатора метки: Not 'labels/ LABEL_ID ' in labels .

Вы также можете искать файлы по значениям определённых полей. Например, для поиска файлов с текстовым значением: labels/ LABEL_ID .text_field_id =' TEXT ' .

Дополнительные сведения см. в разделе Поиск файлов с определенной меткой или значением поля .

Поиск в корпусах

Поисковые запросы, вызывающие files.list , по умолчанию используют corpora user . Для поиска в других корпусах, например, в файлах, предоставленных domain , установите параметр corpora .

В одном запросе можно выполнить поиск по нескольким корпусам, однако, если объединённый корпус слишком большой, могут быть возвращены неполные результаты. Если в теле ответа incompleteSearch равно true , это означает, что не все документы были возвращены. В этом случае следует сузить запрос, выбрав другой корпус, например, user или drive .