Dosya ve klasör arayın

Google Drive API'si, dosya ve klasör aramak için çeşitli yöntemleri destekler.

Bir Drive kullanıcısının dosya ve klasörlerinin tamamını veya bir kısmını döndürmek için files.list yöntemini kullanabilirsiniz. files.list yöntemi, bazı kaynak yöntemleri (ör. files.get ve files.update) için gerekli olan fileId değerini almak için de kullanılabilir.

Geçerli kullanıcının Drive'ım bölümündeki tüm dosya ve klasörleri ara

Tüm dosyaları ve klasörleri döndürmek için files.list yöntemini parametre olmadan kullanın.

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

Geçerli kullanıcının Drive'ım bölümünde belirli dosyaları veya klasörleri arama

Belirli bir dosya veya klasör grubunu aramak için sorgu dizesi q alanını files.list yöntemiyle birlikte kullanarak bir veya daha fazla arama terimini birleştirerek döndürülecek dosyaları filtreleyin.

Bir sorgu dizesi aşağıdaki üç bölümden oluşur:

query_term operator values

Burada:

  • query_term, aranacak sorgu terimi veya alandır.

  • operator, sorgu terimi için koşulu belirtir.

  • values, arama sonuçlarınızı filtrelemek için kullanmak istediğiniz değerlerdir.

Dosyaları ve klasörleri filtrelemek için kullanabileceğiniz sorgu terimlerini ve operatörlerini görüntülemek istiyorsanız Arama sorgusu terimleri ve operatörleri başlıklı makaleyi inceleyin.

Örneğin, aşağıdaki sorgu dizesi, MIME türünü ayarlayarak aramayı yalnızca klasörleri döndürecek şekilde filtreler:

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

MIME türleri hakkında daha fazla bilgi için Google Workspace ve Google Drive'ın desteklediği MIME türleri başlıklı makaleyi inceleyin.

Sorgu dizesi örnekleri

Aşağıdaki tabloda bazı temel sorgu dizelerinin örnekleri listelenmiştir. Gerçek kod, aramanız için kullandığınız istemci kitaplığına göre değişir.

Sorgunun doğru çalıştığından emin olmak için dosya adlarınızdaki özel karakterleri de kod dışına almanız gerekir. Örneğin, bir dosya adında hem kesme işareti (') hem de ters eğik çizgi ("\") karakteri bulunuyorsa kod dışına almak için ters eğik çizgi kullanın: name contains 'quinn\'s paper\\essay'.

Sorgulamak istediğiniz şey Örnek
"hello" adlı dosyalar name = 'hello'
"Merhaba" ve "hoşça kalın" kelimelerini içeren bir ada sahip dosyalar name contains 'hello' and name contains 'goodbye'
Adı "merhaba" kelimesini içermeyen dosyalar not name contains 'hello'
"Önemli" metnini içeren ve çöp kutusunda bulunan dosyalar fullText contains 'important' and trashed = true
"Merhaba" kelimesini içeren dosyalar fullText contains 'hello'
"Merhaba" kelimesinin bulunmadığı dosyalar not fullText contains 'hello'
Tam olarak "merhaba dünya" ifadesini içeren dosyalar fullText contains '"hello world"'
"\" karakterini içeren bir sorgu içeren dosyalar (örneğin, "\authors") fullText contains '\\authors'
Klasör olan dosyalar mimeType = 'application/vnd.google-apps.folder'
Klasör olmayan dosyalar mimeType != 'application/vnd.google-apps.folder'
Belirli bir tarihten sonra değiştirilen dosyalar (varsayılan saat dilimi UTC'dir) modifiedTime > '2012-06-04T12:00:00'
Belirli bir tarihten sonra değiştirilen resim veya video dosyaları modifiedTime > '2012-06-04T12:00:00' and (mimeType contains 'image/' or mimeType contains 'video/')
Yıldızlı dosyalar starred = true
Bir koleksiyondaki dosyalar (örneğin, parents koleksiyonundaki klasör kimliği) '1234567' in parents
Koleksiyondaki bir uygulama veri klasöründeki dosyalar 'appDataFolder' in parents
Sahibi "test@example.org" olan dosyalar 'test@example.org' in owners
"test@example.org" kullanıcısının yazma iznine sahip olduğu dosyalar 'test@example.org' in writers
"group@example.org" grubunun üyelerinin yazma izninin olduğu dosyalar 'group@example.org' in writers
Yetkili kullanıcıyla paylaşılan ve adında "merhaba" olan dosyalar sharedWithMe and name contains 'hello'
Tüm uygulamalar tarafından görülebilen özel dosya özelliğine sahip dosyalar properties has { key='mass' and value='1.3kg' }
İstekte bulunan uygulamaya özel özel dosya özelliğine sahip dosyalar appProperties has { key='additionalID' and value='8e8aceg2af2ge72e78' }
Hiç kimseyle veya alanla paylaşılmayan dosyalar (yalnızca gizli veya belirli kullanıcılarla ya da gruplarla paylaşılan) visibility = 'limited'

Arama sonuçlarını istemci kitaplığıyla filtreleme

Aşağıdaki kod örneğinde, arama sonuçlarını JPEG dosyalarının dosya adlarına ve kimliklerine göre filtrelemek için istemci kitaplığının nasıl kullanılacağı gösterilmektedir. Bu örnekte, sonuçları image/jpeg türündeki dosyalarla sınırlamak için mimeType sorgu terimi kullanılmaktadır. Ayrıca, aramayı Drive alanını daha da kapsayacak şekilde daraltmak için spaces öğesini drive olarak ayarlar. nextPageToken, null döndürdüğünde başka sonuç yoktur.

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

Özel dosya özelliğine sahip dosyaları arama

Özel dosya özelliğine sahip dosyaları aramak için properties veya appProperties arama sorgusu terimini anahtar ve değerle birlikte kullanın. Örneğin, additionalID adlı ve 8e8aceg2af2ge72e78 değerine sahip, istek gönderen uygulamaya özel bir özel dosya özelliğini aramak için:

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

Daha fazla bilgi için Özel dosya özellikleri ekleme başlıklı makaleyi inceleyin.

Belirli bir etikete veya alan değerine sahip dosyaları arama

Belirli etiketlere sahip dosyaları aramak için belirli bir etiket kimliğiyle birlikte labels arama sorgusu terimini kullanın. Örneğin: 'labels/LABEL_ID' in labels. Başarılı olursa yanıt gövdesi, etiketin uygulandığı tüm dosya örneklerini içerir.

Belirli bir etiket kimliği olmayan dosyaları aramak için: Not 'labels/LABEL_ID' in labels.

Dosyaları belirli alan değerlerine göre de arayabilirsiniz. Örneğin, metin değeri olan dosyaları aramak için: labels/LABEL_ID.text_field_id ='TEXT'.

Daha fazla bilgi için Belirli bir etikete veya alan değerine sahip dosyaları arama başlıklı makaleyi inceleyin.

Koleksiyonda ara

files.list çağrısı yapan aramalar varsayılan olarak user'in corpora değerini kullanır. domain ile paylaşılan dosyalar gibi diğer korpusalarda arama yapmak için corpora parametresini ayarlayın.

Tek bir sorguda birden çok topluluk aranabilir ancak birleşik topluluk çok büyük olursa eksik sonuçlar döndürülebilir. incompleteSearch, yanıt gövdesinde true ise tüm dokümanlar döndürülmedi. Bu durumda, user veya drive gibi farklı bir derleme seçerek sorgunuzu daraltmanız gerekir.