البحث عن الملفات والمجلدات

تتيح Google Drive API عدة طرق للبحث في الملفات والمجلدات.

يمكنك استخدام طريقة files.list لعرض جميع أو بعض ملفات ومجلدات مستخدم Drive. يمكن أيضًا استخدام الطريقة files.list لاسترداد fileId المطلوبة لبعض طرق الموارد (مثل 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 = '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'
الملفات التي تم تعديلها بعد تاريخ محدّد (المنطقة الزمنية التلقائية هي التوقيت العالمي المتفق عليه) 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
الملفات التي يكون المستخدم "test@example.org" هو مالكها 'test@example.org' in owners
الملفات التي يمتلك المستخدم "test@example.org" إذنًا بالكتابة فيها 'test@example.org' in writers
الملفات التي يمتلك أعضاء المجموعة "group@example.org" إذنًا بالكتابة لها 'group@example.org' 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، لا توجد نتائج إضافية.

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

البحث عن الملفات باستخدام خاصية ملف مخصَّصة

للبحث عن الملفات بخاصية ملف مخصّص، استخدِم إما 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.