Dosya ve klasör arayın

Bu kılavuzda, Google Drive API'nin dosya ve klasör aramanın çeşitli yollarını nasıl desteklediği açıklanmaktadır.

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

Alanlar parametresini kullanma

Yanıtla döndürülecek alanları belirtmek istiyorsanız fields system parametresini files kaynağının herhangi bir yöntemiyle ayarlayabilirsiniz. fields parametresini atlarsanız sunucu, yönteme özgü varsayılan bir alan kümesi döndürür. Örneğin, list yöntemi her dosya için yalnızca kind, id, name, mimeType ve resourceKey alanlarını döndürür. Farklı alanları döndürmek için Belirli alanları döndürme başlıklı makaleye bakın.

Dosya alma

Dosya almak için fileId yol parametresiyle files kaynağında get yöntemini kullanın. Dosya kimliğini bilmiyorsanız list yöntemini kullanarak tüm dosyaları listeleyebilirsiniz.

Yöntem, dosyayı files kaynağının bir örneği olarak döndürür. alt=media sorgu parametresini sağlarsanız yanıt, dosya içeriklerini yanıt gövdesinde içerir. Dosyayı indirmek veya dışa aktarmak için Dosyaları indirme ve dışa aktarma başlıklı makaleyi inceleyin.

Bilinen kötü amaçlı yazılımları veya diğer kötüye kullanım amaçlı dosyaları indirmenin riskini kabul etmek için acknowledgeAbuse sorgu parametresini true olarak ayarlayın. Bu alan yalnızca alt=media parametresi ayarlandığında ve kullanıcının dosya sahibi ya da dosyanın bulunduğu ortak Drive'ın düzenleyicisi olması durumunda geçerlidir.

Mevcut kullanıcının Drive'ım bölümündeki tüm dosya ve klasörleri arama

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

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

Mevcut kullanıcının Drive'ım bölümünde belirli dosya veya klasörleri arama

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

Sorgu dizesi söz dizimi aşağıdaki üç bölümü içerir:

query_term operator values

Burada:

  • query_term, sorgu terimi veya aranacak alandır.

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

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

Örneğin, aşağıdaki sorgu dizesi, MIME türü ayarlanarak yalnızca klasörlerin döndürülmesi için aramayı filtreler:

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

Tüm dosya sorgu terimlerini görüntülemek için Dosyaya özgü sorgu terimleri başlıklı makaleyi inceleyin.

Sorgu oluşturmak için kullanabileceğiniz tüm sorgu operatörlerini görüntülemek üzere Sorgu operatörleri başlıklı makaleyi inceleyin.

Sorgu dizesi örnekleri

Aşağıdaki tabloda, bazı temel sorgu dizeleriyle ilgili örnekler verilmiştir. Gerçek kod, aramanız için kullandığınız istemci kitaplığına bağlı olarak değişir.

Sorgunun doğru şekilde çalışması 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 varsa bunları kod dışı bırakmak için ters eğik çizgi kullanın: name contains 'quinn\'s paper\\essay'.

Sorgulamak istediğiniz öğe Örnek
"hello" adlı dosyalar name = 'hello'
Adında "merhaba" ve "güle güle" kelimeleri geçen dosyalar name contains 'hello' and name contains 'goodbye'
Adında "merhaba" kelimesi bulunmayan 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" kelimesini içermeyen dosyalar not fullText contains 'hello'
"hello world" kelime öbeğini tam olarak 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ız eklenen dosyalar starred = true
Bir koleksiyondaki dosyalar (örneğin, parents koleksiyonundaki klasör kimliği) '1234567' in parents
Koleksiyondaki uygulama verileri klasöründeki dosyalar 'appDataFolder' in parents
"test@example.org" kullanıcısının sahibi olduğu 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 iznine sahip olduğu dosyalar 'group@example.org' in writers
Adında "hello" geçen ve yetkili kullanıcıyla paylaşılan dosyalar sharedWithMe and name contains 'hello'
Tüm uygulamaların görebileceği özel dosya özelliği içeren dosyalar properties has { key='mass' and value='1.3kg' }
İstekte bulunan uygulamaya özel özel dosya özelliği içeren dosyalar appProperties has { key='additionalID' and value='8e8aceg2af2ge72e78' }
Hiç kimseyle veya alanla paylaşılmamış dosyalar (yalnızca gizli ya da belirli kullanıcılar veya gruplarla paylaşılmış) visibility = 'limited'

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

Aşağıdaki kod örneğinde, arama sonuçlarını JPEG dosyalarının 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ıyla daha da daraltmak için spaces değerini drive olarak ayarlar. nextPageToken null değerini 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
<?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ği içeren dosyaları arama

Özel dosya özelliği içeren dosyaları aramak için anahtar ve değer içeren properties veya appProperties arama sorgusu terimini kullanın. Örneğin, additionalID adlı istekte bulunan uygulamaya özel olan ve 8e8aceg2af2ge72e78 değerine sahip 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 etiket veya alan değerine sahip dosyaları arama

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

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

Ayrıca, belirli alan değerlerine göre de dosya 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 etiket veya alan değerine sahip dosyaları arama başlıklı makaleyi inceleyin.

Derlemelerde arama yapma

list yöntemini çağıran aramalarda varsayılan olarak user corpora kullanılır. domain ile paylaşılan dosyalar gibi diğer derlemlerde arama yapmak için corpora parametresini ayarlayın.

Bir sorguda birden fazla derlemeye arama yapılabilir. Ancak birleştirilmiş derlemeler çok büyükse eksik sonuçlar döndürülebilir. Yanıt gövdesinde incompleteSearch true varsa tüm belgeler döndürülmemiştir. Bu durumda, user veya drive gibi farklı bir derlem seçerek sorgunuzu daraltmanız gerekir.