日本時間5月16日のContent Cloud Summitで、カスタムアプリにBox AI APIを活用する方法を紹介します。

詳細を表示

コンテンツを検索

get
https://api.box.com/2.0
/search

ユーザーのコンテンツまたは会社全体でファイル、フォルダ、ウェブリンク、および共有ファイルを検索します。

リクエスト

bearer [ACCESS_TOKEN]
application/json

クエリパラメータ

stringクエリ内省略可能
file

このタイプの項目に検索結果を絞り込みます。このパラメータが受け取る値は1つだけです。デフォルトでは、このAPIによって、以下のいずれかのタイプと一致する項目が返されます。

  • file - 検索結果をファイルに絞り込みます。
  • folder - 検索結果をフォルダに絞り込みます。
  • web_link - 検索結果をウェブリンク (ブックマークとも呼ばれます) に絞り込みます。

次の値のいずれか1つ: file,folder,web_link

string arrayクエリ内省略可能
4535234,234123235,2654345

フォルダIDのコンマ区切りリストとして定義された、指定したフォルダリスト内の項目のみに検索結果を絞り込みます。

検索結果には、これらの先祖フォルダのサブフォルダ内の項目も含まれます。

フォルダは現在認証されているユーザーによって所有または共有されている必要もあります。このユーザーがフォルダにアクセスできない場合、またはフォルダがない場合は、代わりにHTTP 404エラーコードが返されます。

会社全体で検索するには、サポートチームにリクエスト可能なenterprise_contentスコープパラメータを使用することをお勧めします。

string arrayクエリ内省略可能
name,description

ファイルの説明など、ファイルの特定の部分に対する検索クエリと一致する項目のみに検索結果を絞り込みます。

コンテンツタイプの定義には、Boxで認識されるコンテンツタイプのコンマ区切りリストを使用します。許可されるコンテンツタイプは以下のとおりです。

  • name - nameフィールドで定義されている、項目の名前。
  • description - descriptionフィールドで定義されている、項目の説明。
  • file_content - ファイルの実際のコンテンツ。
  • comments - ファイルまたはフォルダに対するコメントのコンテンツ。
  • tags - tagsフィールドで定義されている、項目に適用されるタグ。
string arrayクエリ内省略可能
2014-05-15T13:35:01-07:00,2014-05-17T13:35:01-07:00

指定した日付範囲内に作成されたすべての項目に検索結果を絞り込みます。

日付範囲はコンマ区切りのRFC3339タイムスタンプとして定義されます。

開始日が省略されている場合 (,2014-05-17T13:35:01-07:00)、終了日より前に作成された項目がすべて返されます。

終了日が省略されている場合 (2014-05-15T13:35:01-07:00,)、代わりに現在の日付が終了日として使用されます。

string arrayクエリ内省略可能
["2014-05-15T13:35:01-07:00","2014-05-17T13:35:01-07:00"]

指定した日付範囲内に削除されたすべての項目に検索結果を絞り込みます。

日付範囲はコンマ区切りのRFC3339タイムスタンプとして定義されます。

開始日が省略されている場合 (2014-05-17T13:35:01-07:00)、終了日より前に削除された項目がすべて返されます。

終了日が省略されている場合 (2014-05-15T13:35:01-07:00)、代わりに現在の日付が終了日として使用されます。

trash_contentパラメータはtrashed_onlyに設定する必要があります。

ごみ箱内検索が実行されていない場合は、空の結果が返されます。

2023年2月1日以降利用できるデータです。

string arrayクエリ内省略可能
["123422","23532","3241212"]

指定したユーザーリスト (ユーザーIDのコンマ区切りリストとして定義) によって削除された項目に検索結果を絞り込みます。

trash_contentパラメータはtrashed_onlyに設定する必要があります。

ごみ箱内検索が実行されていない場合は、空の結果セットが返されます。検索結果に項目が表示されるように、項目は現在認証されているユーザーによって所有または共有されている必要があります。

いずれかのユーザーが所有するファイルにユーザーがアクセスできない場合は、空の結果セットが返されます。

2023年2月1日以降利用できるデータです。

stringクエリ内省略可能
ASC"DESC"

検索結果の並べ替えの方向を定義します。このパラメータが明示的に指定されていない限り、このAPIはデフォルトで、降順 (DESC) で項目を返します。

結果がrelevanceを基準にして並べ替えられると、関連度の降順で項目が返されるよう並べ替えはロックされ、このパラメータは無視されます。

次の値のいずれか1つ: DESC,ASC

string arrayクエリ内省略可能
id,type,name

レスポンスに含める属性のコンマ区切りリスト。このパラメータを使用すると、標準のレスポンスには通常含まれないフィールドをリクエストできます。

このパラメータを指定すると、明示的に指定しない限り標準フィールドはレスポンスに含まれず、リクエストしたフィールドのほかには、Mini版の表示のフィールドしか返されないことに注意してください。

string arrayクエリ内省略可能
pdf,png,gif

指定したファイル拡張子のいずれかと一致するファイルのみに検索結果を絞り込みます。このリストは、ドットなしのファイル拡張子のコンマ区切りリストです。

integer (int64)クエリ内省略可能
10030200

結果ページの一部として返す項目の最大数を定義します。

メタデータフィルタ arrayクエリ内省略可能
[{"scope":"enterprise","templateKey":"contract","filters":[{"category":"online"},{"contractValue":100000}]}]

Limits the search results to any items for which the metadata matches the provided filter. This parameter is a list that specifies exactly one metadata template used to filter the search results. It unless the query parameter is provided.

integer (int64)クエリ内省略可能
10000

レスポンスが開始される項目のオフセット。

オフセットパラメータ値が10,000を超えているクエリは拒否され、400レスポンスが返されます。

string arrayクエリ内省略可能
123422,23532,3241212

指定した所有者リスト (ユーザーIDのコンマ区切りリストとして定義) によって所有される項目のみに検索結果を絞り込みます。

検索結果に項目が表示されるように、項目は現在認証されているユーザーによって所有または共有されている必要もあります。いずれかのユーザーが所有するファイルにユーザーがアクセスできない場合は、空の結果セットが返されます。

会社全体で検索するには、サポートチームにリクエスト可能なenterprise_contentスコープパラメータを使用することをお勧めします。

stringクエリ内省略可能
sales

検索する文字列。このクエリは、項目名、説明、ファイルのテキストコンテンツなど、さまざまな項目タイプのフィールドと照合されます。

このパラメータでは、返された結果をさらに絞り込むためのさまざまな演算子がサポートされます。

  • "" - クエリを二重引用符で囲むと、APIによって完全一致のみが返されます。完全一致検索では、特定の文字の並びに基づいた検索結果は返されません。代わりに、フレーズ (つまり、単語の並び) に基づいた一致が返されます。たとえば、"Blue-Box"を検索すると、"blue.box""Blue Box""Blue-Box"などの並びを含む、検索結果が返されます。つまり、BlueおよびBoxという単語が指定した順序で連続して含まれている項目です。
  • AND - 両方の検索語を含む項目が返されます。たとえば、marketing AND BoxWorksを検索すると、marketingBoxWorksの両方が任意の順番でテキストに含まれている項目が返されます。テキストにBoxWorksのみが含まれる結果は返されません。
  • OR - 検索語のいずれかを含む項目が返されます。たとえば、marketing OR BoxWorksを検索すると、marketingBoxWorksのいずれかがテキストに含まれている結果が返されます。サポートされている別のブール条件が使用されている場合を除き、複数語のクエリは暗黙的にORとして解釈されるため、この演算子の使用は必須ではありません。
  • NOT - 指定された検索語が含まれていない項目が返されます。たとえば、marketing AND NOT BoxWorksを検索すると、テキストにmarketingのみが含まれている結果が返され、BoxWorksが含まれる結果は省略されます。

小文字の演算子 (andorおよびnot) および大文字と小文字を組み合わせた演算子 (AndOrおよびNot) はサポートされていません。

このフィールドは、mdfiltersパラメータが定義されていない場合に必須です。

string arrayクエリ内省略可能
123422,23532,3241212

指定したユーザーリスト (ユーザーIDのコンマ区切りリストとして定義) によって更新された項目のみに検索結果を絞り込みます。

検索結果に項目が表示されるように、項目は現在認証されているユーザーによって所有または共有されている必要もあります。いずれかのユーザーが所有するファイルにユーザーがアクセスできない場合は、空の結果セットが返されます。

この機能では、項目の過去10バージョンのみを検索します。

stringクエリ内省略可能
user_content"user_content"

ユーザーがアクセスできるファイルまたは会社全体で利用可能なファイルに検索結果を絞り込みます。

スコープは、デフォルトでuser_contentに設定されます。これにより、検索結果は、現在認証されているユーザーが使用できるコンテンツに絞り込まれます。

enterprise_contentは、管理者がサポートチャネルを通じてリクエストできます。このスコープがユーザーに対して有効になっていると、そのユーザーは、アクセスできるコンテンツだけでなく、会社全体のコンテンツに対してクエリを実行できます。

次の値のいずれか1つ: user_content,enterprise_content

integer arrayクエリ内省略可能
1000000,5000000

特定のファイルサイズ範囲内のサイズの項目に検索結果を絞り込みます。これはファイルとフォルダに適用されます。

サイズ範囲は、バイトサイズの下限と上限 (下限と上限も含む) のコンマ区切りリストとして定義します。

上限または下限を省略すると、上限または下限のないサイズ範囲を指定できます。

stringクエリ内省略可能
modified_at"relevance"

結果が返される順序を定義します。このパラメータが明示的に指定されていない限り、このAPIはデフォルトで、関連度を基準として項目を返します。

  • relevance (デフォルト) を指定すると、クエリの検索語との関連度を基準として並べ替えられた結果が返されます。関連度は、項目の名前、説明、コンテンツ、およびその他のプロパティでの検索語の出現回数に基づきます。
  • modified_atを指定すると、項目が最後に変更された日付を基準にして降順で並べ替えられた結果が返されます。

次の値のいずれか1つ: modified_at,relevance

stringクエリ内省略可能
non_trashed_only"non_trashed_only"

検索時にごみ箱で項目を探すかどうかを決定します。

デフォルトでは、このAPIで返されるのは、現在ごみ箱にない項目の検索結果のみです (non_trashed_only)。

  • trashed_only - 現在ごみ箱にある項目のみを検索します。
  • non_trashed_only - 現在ごみ箱にない項目のみを検索します。
  • all_items - ごみ箱内の項目とごみ箱にない項目の両方を検索します。

次の値のいずれか1つ: non_trashed_only,trashed_only,all_items

string arrayクエリ内省略可能
2014-05-15T13:35:01-07:00,2014-05-17T13:35:01-07:00

指定した日付範囲内に更新された項目に検索結果を絞り込みます。

日付範囲はコンマ区切りのRFC3339タイムスタンプとして定義されます。

開始日が省略されている場合 (,2014-05-17T13:35:01-07:00)、終了日より前に更新された項目が返されます。

終了日が省略されている場合 (2014-05-15T13:35:01-07:00,)、代わりに現在の日付が終了日として使用されます。

レスポンス

検索結果のコレクションを返します。一致する検索結果がない場合、entries配列は空になります。

リクエストが無効だった場合にエラーを返します。これには、複数の理由があり、context_infoオブジェクトによって詳細が示されます。

  • missing_parameter - 検索で少なくともqueryまたはmdfiltersクエリパラメータを指定してください。
  • invalid_parameter - いずれかのフィールドの形式に誤りがある可能性があります。たとえば、RFC3339日付のいずれかが正しくないか、整数が想定されている場所に文字列が指定されることを意味します。

このAPIコールを行う権限がユーザーにない場合にエラーを返します。

  • 開発者は、scopeとしてenterprise_contentを指定しましたが、Boxのサポートチャネルを通じて、このスコープをユーザーに対して有効にするようリクエストしませんでした。

ユーザーが、リクエストで取り上げられた項目にアクセスできない場合にエラーを返します。

  • 開発者は、存在しないフォルダIDまたはユーザーがアクセスできないフォルダIDをancestor_folder_idsで指定しました。

予期しないクライアントエラー。

get
コンテンツを検索
このドキュメント内で一部のAPIを試せるようになりました。
ログイン

リクエストの例

cURL
curl -i -X GET "https://api.box.com/2.0/search?query=sales" \
     -H "authorization: Bearer <ACCESS_TOKEN>"
.NET
// Search for PDF or Word documents matching "Meeting Notes"
BoxCollection<BoxItem> results = await client.SearchManager
    .QueryAsync("Meeting Notes", fileExtensions: new { "pdf", "docx" });
Java
// Find the first 10 files matching "taxes"
long offsetValue = 0;
long limitValue = 10;
BoxSearch boxSearch = new BoxSearch(api);
BoxSearchParameters searchParams = new BoxSearchParameters();
searchParams.setQuery("taxes");
searchParams.setType("file");
PartialCollection<BoxItem.Info> searchResults = boxSearch.searchRange(offsetValue, limitValue, searchParams);
Python
items = client.search().query(query='TEST QUERY', limit=100, file_extensions=['pdf', 'doc'])
for item in items:
    print(f'The item ID is {item.id} and the item name is {item.name}')
Node
// Search for PDF or Word documents matching "Mobile"
client.search.query(
	'Mobile',
	{
		fields: 'name,modified_at,size,extension,permissions,sync_state',
		file_extensions: 'pdf,doc',
		limit: 200,
		offset: 0
	})
	.then(results => {
		/* results -> {
			total_count: 1,
			entries: 
			[ { type: 'file',
				id: '11111',
				sequence_id: '1',
				etag: '1',
				sha1: 'f89d97c5eea0a68e2cec911s932eca34a52355d2',
				name: 'Box for Sales - Empowering Your Mobile Worker White paper 2pg (External).pdf',
				description: '',
				size: 408979,
				path_collection: 
					{ total_count: 2,
					entries: 
					[ { type: 'folder',
						id: '0',
						sequence_id: null,
						etag: null,
						name: 'All Files' },
						{ type: 'folder',
						id: '22222',
						sequence_id: '1',
						etag: '1',
						name: 'Marketing Active Work' } ] },
				created_at: '2014-05-17T12:59:45-07:00',
				modified_at: '2014-05-17T13:00:20-07:00',
				trashed_at: null,
				purged_at: null,
				content_created_at: '2014-05-17T12:58:58-07:00',
				content_modified_at: '2014-05-17T12:58:58-07:00',
				created_by: 
					{ type: 'user',
					id: '33333',
					name: 'Example User',
					login: 'user@example.com' },
				modified_by: 
					{ type: 'user',
					id: '33333',
					name: 'Example User',
					login: 'user@example.com' },
				owned_by: 
					{ type: 'user',
					id: '33333',
					name: 'Example User',
					login: 'user@example.com' },
				shared_link: null,
				parent: 
					{ type: 'folder',
					id: '22222',
					sequence_id: '1',
					etag: '1',
					name: 'Marketing Active Work' },
				item_status: 'active' } ],
			limit: 200,
			offset: 0 }
		*/
	});
iOS
let iterator = client.search.query(query: "Quarterly Business Review")
iterator.next { results in
    switch results {
    case let .success(page):
        for item in page.entries {
            switch item {
            case let .file(file):
                print("- File \(file.name) (ID: \(file.id))")
            case let .folder(folder):
                print("- Folder \(file.name) (ID: \(file.id))")
            case let .webLink(webLink):
                print("- Web Link \(file.name) (ID: \(file.id))")
            }
        }

    case let .failure(error):
        print(error)
    }
}

レスポンスの例

{
  "type": "search_results_items",
  "entries": [
    {
      "id": "12345",
      "etag": "1",
      "type": "file",
      "sequence_id": "3",
      "name": "Contract.pdf",
      "sha1": "85136C79CBF9FE36BB9D05D0639C70C265C18D37",
      "file_version": {
        "id": "12345",
        "type": "file_version",
        "sha1": "134b65991ed521fcfe4724b7d814ab8ded5185dc"
      },
      "description": "Contract for Q1 renewal",
      "size": 629644,
      "path_collection": {
        "total_count": 1,
        "entries": [
          {
            "id": "12345",
            "etag": "1",
            "type": "folder",
            "sequence_id": "3",
            "name": "Contracts"
          }
        ]
      },
      "created_at": "2012-12-12T10:53:43-08:00",
      "modified_at": "2012-12-12T10:53:43-08:00",
      "trashed_at": "2012-12-12T10:53:43-08:00",
      "purged_at": "2012-12-12T10:53:43-08:00",
      "content_created_at": "2012-12-12T10:53:43-08:00",
      "content_modified_at": "2012-12-12T10:53:43-08:00",
      "created_by": {
        "id": "11446498",
        "type": "user",
        "name": "Aaron Levie",
        "login": "ceo@example.com"
      },
      "modified_by": {
        "id": "11446498",
        "type": "user",
        "name": "Aaron Levie",
        "login": "ceo@example.com"
      },
      "owned_by": {
        "id": "11446498",
        "type": "user",
        "name": "Aaron Levie",
        "login": "ceo@example.com"
      },
      "shared_link": {
        "url": "https://www.box.com/s/vspke7y05sb214wjokpk",
        "download_url": "https://www.box.com/shared/static/rh935iit6ewrmw0unyul.jpeg",
        "vanity_url": "https://acme.app.box.com/v/my_url/",
        "vanity_name": "my_url",
        "access": "open",
        "effective_access": "company",
        "effective_permission": "can_download",
        "unshared_at": "2018-04-13T13:53:23-07:00",
        "is_password_enabled": true,
        "permissions": {
          "can_download": true,
          "can_preview": true,
          "can_edit": false
        },
        "download_count": 3,
        "preview_count": 3
      },
      "parent": {
        "id": "12345",
        "etag": "1",
        "type": "folder",
        "sequence_id": "3",
        "name": "Contracts"
      },
      "item_status": "active",
      "version_number": "1",
      "comment_count": 10,
      "permissions": {
        "can_delete": true,
        "can_download": true,
        "can_invite_collaborator": true,
        "can_rename": true,
        "can_set_share_access": true,
        "can_share": true,
        "can_annotate": true,
        "can_comment": true,
        "can_preview": true,
        "can_upload": true,
        "can_view_annotations_all": true,
        "can_view_annotations_self": true
      },
      "tags": [
        "approved"
      ],
      "lock": {
        "id": "11446498",
        "type": "lock",
        "created_by": {
          "id": "11446498",
          "type": "user",
          "name": "Aaron Levie",
          "login": "ceo@example.com"
        },
        "created_at": "2012-12-12T10:53:43-08:00",
        "expired_at": "2012-12-12T10:53:43-08:00",
        "is_download_prevented": true,
        "app_type": "office_wopiplus"
      },
      "extension": "pdf",
      "is_package": true,
      "expiring_embed_link": {
        "access_token": "c3FIOG9vSGV4VHo4QzAyg5T1JvNnJoZ3ExaVNyQWw6WjRsanRKZG5lQk9qUE1BVQ",
        "expires_in": 3600,
        "token_type": "bearer",
        "restricted_to": [
          {
            "scope": "item_download",
            "object": {
              "id": "12345",
              "etag": "1",
              "type": "folder",
              "sequence_id": "3",
              "name": "Contracts"
            }
          }
        ],
        "url": "https://cloud.app.box.com/preview/expiring_embed/..."
      },
      "watermark_info": {
        "is_watermarked": true
      },
      "is_accessible_via_shared_link": true,
      "allowed_invitee_roles": [
        "editor"
      ],
      "is_externally_owned": true,
      "has_collaborations": true,
      "metadata": {
        "enterprise_27335": {
          "marketingCollateral": {
            "$canEdit": true,
            "$id": "01234500-12f1-1234-aa12-b1d234cb567e",
            "$parent": "folder_59449484661",
            "$scope": "enterprise_27335",
            "$template": "marketingCollateral",
            "$type": "properties-6bcba49f-ca6d-4d2a-a758-57fe6edf44d0",
            "$typeVersion": 2,
            "$version": 1
          }
        }
      },
      "expires_at": "2012-12-12T10:53:43-08:00",
      "representations": {
        "entries": [
          {
            "content": {
              "url_template": "https://dl.boxcloud.com/api/2.0/internal_files/123/versions/345/representations/png_paged_2048x2048/content/{+asset_path}?watermark_content=4567"
            },
            "info": {
              "url": "https://api.box.com/2.0/internal_files/123/versions/345/representations/png_paged_2048x2048"
            },
            "properties": {
              "dimensions": "2048x2048",
              "paged": true,
              "thumb": true
            },
            "representation": "png",
            "status": {
              "state": "success"
            }
          }
        ]
      },
      "classification": {
        "name": "Top Secret",
        "definition": "Content that should not be shared outside the company.",
        "color": "#FF0000"
      },
      "uploader_display_name": "Ellis Wiggins",
      "disposition_at": "2012-12-12T10:53:43-08:00",
      "shared_link_permission_options": [
        "can_preview"
      ]
    }
  ],
  "limit": 1000,
  "offset": 2000,
  "total_count": 5000
}