ファイルとフォルダを検索する



  • この記事は、Google Drive™ APIに関する記事を和訳したものです。
  • 原文: Search for files and folders
  • 元記事のライセンスは CC-BYで、この和訳記事のライセンスは CC-BYです。
  • 自己責任でご利用ください。
  • 和訳した時期は 2019年6月ころです。

Drive APIの files.listメソッドを用いてファイルを検索することができます。

1つ以上の検索句を用いて結合された検索クエリを実行するには、qパラメータを使用します。 それぞれの検索句は、3つの部分で構成されています。

Field
検索されるファイルの属性、例えば、ファイルの属性 name
Operator
マッチを提供するためにデータに対して実行されるテスト、例えば、contains
Value
テストされる属性のコンテンツ、例えば、ファイルの名前 My cool document

接続詞 andあるいは orを用いて句を組み合わせ、notを用いてクエリを否定します。

files.listのための有効なフィールド

フィールド 値のタイプ 演算子 説明
name string contains1, =, != ファイルの名前。
fullText string contains2 名前、説明、コンテンツ、およびインデックス可能なテキストを含む、ファイルのフルテキスト。
mimeType string contains, =, != ファイルの MIMEタイプ。
modifiedTime date3 <=, <, =, !=, >, >= ファイルの最終更新日。
viewedByMeTime date3 <=, <, =, !=, >, >= ユーザが最後にファイルを表示した日付。
trashed boolean =, != ファイルがゴミ箱にあるかどうか。
starred boolean =, != ファイルがスターされているかどうか。
parents collection in 親のコレクションが指定された IDを含んでいるかどうか。
owners4 collection in ファイルを所有するユーザ。
writers4 collection in ファイルを修正するためのパーミッションを持つユーザあるいはグループ。
readers4 collection in ファイルを読み込むためのパーミッションを持つユーザあるいはグループ。
sharedWithMe boolean =, != ユーザの "Shared with me" コレクション内にあるファイル。
properties collection has パブリックなカスタムファイルプロパティ。
appProperties collection has プライベートなカスタムファイルプロパティ。
visibility string =, '!=' ファイルの可視性レベル。 有効な値は、anyoneCanFind、anyoneWithLink,、domainCanFind、domainWithLink、および limitedです。

値のタイプ

値のタイプ ノート
String シングルクォート ' で囲まれたもの。 クエリ内のシングルクォートを \' を用いてエスケープします、例えば、'Valentine\'s Day'
Boolean trueあるいは false
Date RFC 3339形式、デフォルトのタイムゾーンは UTCです、例えば、2012-06-04T12:00:00-08:00
Number 数値。

演算子

演算子 ノート
contains ひとつの string のコンテンツが、もう一方に存在する。
= stringあるいは booleanのコンテンツが、もう一方と等しい。
!= stringあるいは booleanのコンテンツが、もう一方と等しくない。
< 値が他のものより小さい。
<= 値か他のもの以下である。
> 値が他のものより遅い。
>= 値が他のものより遅いか等しい。
in 要素がコレクションに含まれている。
and 両方の句にマッチするアイテムを返します。
or いずれかの句にマッチするアイテムを返します。
not 検索句を否定します。
has コレクションがパラメータにマッチする要素を含んでいる。

複合句の場合、句を一緒にグループ化するためにカッコを使用することができます。 例えば:

modifiedTime > '2012-06-04T12:00:00' and (mimeType contains 'image/' or mimeType contains 'video/')

この検索は、2012年6月4日以降に最後に修正された画像あるいは動画の MIMEタイプを伴うすべてのファイルを返します。 andおよび or演算子は左から右に評価されるので、カッコなしの上記の例は、2012年6月4日以降に修正された画像のみを返しますが、すべての動画も返すでしょう、2012年6月4日以前のものでさえも。

このページのすべての例は、エンコード解除された qパラメータを示しています、ここで、name = 'hello'name+%3d+%27hello%27 としてエンコードされます。 クライアントライブラリは、このエンコーディングを自動的に処理します。

files.listの例

名前 "hello" を伴うファイルを検索する

name = 'hello'

フォルダ固有の MIMEタイプを使用してフォルダを検索する

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

フォルダではないファイルを検索する

mimeType != 'application/vnd.google-apps.folder'

単語 "hello" および "goodbye" を含む名前を伴うファイルを検索する

name contains 'hello' and name contains 'goodbye'

単語 "hello" を含まない名前を伴うファイルを検索する

not name contains 'hello'

コンテンツ内に単語 "hello" を含むファイルを検索する

fullText contains 'hello'

コンテンツ内に単語 "hello" を含まないファイルを検索する

not fullText contains 'hello'

コンテンツ内に正確なフレーズ "hello world" を含むファイルを検索する

fullText contains '"hello world"'
fullText contains '"hello_world"'

"\" 文字("\authors" など)を含むクエリを伴うファイルを検索する

fullText contains '\\authors'

ユーザ "test@example.org" によって書き込み可能なファイルを検索する

'test@example.org' in writers

グループ "group@example.org" のメンバによって書き込み可能なファイルを検索する

'group@example.org' in writers

parentsコレクション内の ID 1234567を検索する。 これは、その IDが 1234567であるフォルダ内に直接配置されているすべてのファイルおよびフォルダを検索します。

'1234567' in parents

parentsコレクション内のエイリアス ID appDataFolderを検索する。 これは、アプリケーションデータフォルダ下に直接配置されているすべてのファイルおよびフォルダを検索します。

'appDataFolder' in parents

ユーザ "test@example.org" および "test2@example.org" によって書き込み可能なファイルを検索する

'test@example.org' in writers and 'test2@example.org' in writers

ゴミ箱にある、テキスト "important" を含むファイルを検索する

fullText contains 'important' and trashed = true

2012年6月4日より後に修正されたファイルを検索する

modifiedTime > '2012-06-04T12:00:00'    // default time zone is UTC
modifiedTime > '2012-06-04T12:00:00-08:00'

名前に "hello" を伴う、承認されたユーザと共有されたファイルを検索する

sharedWithMe and name contains 'hello'

8e8aceg2af2ge72e78を伴う、カスタムファイルプロパティ additionalIDを伴うファイルを検索する

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

他者あるいはドメインと共有されていない(個人のみ、あるいは、特定のユーザあるいはグループと共有されている)ファイルを検索する

visibility = 'limited'

コーパスを使用する

files.listを呼び出すとき、検索は、選択されたコーパスによっても影響を受けます。 もし指定されていなければ、userコーパスが使用されます。 G Suiteドメインに共有されているファイルといった、他のコーパスを検索するには、corporaパラメータを使用します。

複数のコーパスが単一のクエリにて検索されるかもしれませんが、結合されたコーパスがあまりに大きい場合には、不完全な結果が返されるかもしれません。 もし、結果の incompleteSearchフィールドが trueであるならば、すべてのドキュメントが検索されたのではありません。

クライアントライブラリを使用する

次の例は、画像ファイルの検索を実行する方法を示しています:

Java

String pageToken = null;
do {
  FileList result = driveService.files().list()
      .setQ("mimeType='image/jpeg'")
      .setSpaces("drive")
      .setFields("nextPageToken, files(id, name)")
      .setPageToken(pageToken)
      .execute();
  for (File file : result.getFiles()) {
    System.out.printf("Found file: %s (%s)\n",
        file.getName(), file.getId());
  }
  pageToken = result.getNextPageToken();
} while (pageToken != null);

Python

page_token = None
while True:
    response = drive_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 'Found file: %s (%s)' % (file.get('name'), file.get('id'))
    page_token = response.get('nextPageToken', None)
    if page_token is None:
        break

PHP

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

    $pageToken = $repsonse->pageToken;
} while ($pageToken != null);

.NET

string pageToken = null;
do
{
    var request = driveService.Files.List();
    request.Q = "mimeType='image/jpeg'";
    request.Spaces = "drive";
    request.Fields = "nextPageToken, files(id, name)";
    request.PageToken = pageToken;
    var result = request.Execute();
    foreach (var file in result.Files)
    {
        Console.WriteLine(String.Format(
                "Found file: {0} ({1})", file.Name, file.Id));
    }
    pageToken = result.NextPageToken;
} while (pageToken != null);

Ruby

files = drive_service.fetch_all(items: :files) do |page_token|
  drive_service.list_files(q: "mimeType='image/jpeg'",
                           spaces: 'drive',
                           fields: 'nextPageToken, files(id, name)',
                           page_token: page_token)
end
for file in files
  # Process change
  puts "Found file: #{file.name} #{file.id}"
end

Node.js

var pageToken = null;
// Using the NPM module 'async'
async.doWhilst(function (callback) {
  drive.files.list({
    q: "mimeType='image/jpeg'",
    fields: 'nextPageToken, files(id, name)',
    spaces: 'drive',
    pageToken: pageToken
  }, function (err, res) {
    if (err) {
      // Handle error
      console.error(err);
      callback(err)
    } else {
      res.files.forEach(function (file) {
        console.log('Found file: ', file.name, file.id);
      });
      pageToken = res.nextPageToken;
      callback();
    }
  });
}, function () {
  return !!pageToken;
}, function (err) {
  if (err) {
    // Handle error
    console.error(err);
  } else {
    // All pages fetched
  }
})

Objective-C

GTLRDriveQuery_FilesList *query = [GTLRDriveQuery_FilesList query];
query.q = @"mimeType='image/jpeg'";
query.spaces = @"drive";
query.fields = @"nextPageToken, files(id, name)";
[driveService executeQuery:query completionHandler:^(GTLRServiceTicket *ticket,
                                                     GTLRDrive_FileList *files,
                                                     NSError *error) {
    if (error == nil) {
        for(GTLRDrive_File *file in files) {
            NSLog(@"Found file: %@ (%@)", file.name, file.identifier);
        }
    } else {
        NSLog(@"An error occurred: %@", error);
    }
}];