এই নির্দেশিকা থেকে জানা যাবে যে Google Drive API কীভাবে ফাইল ও ফোল্ডার সার্চ করার একাধিক উপায়কে সমর্থন করে।
Drive ব্যবহারকারীর সব বা কিছু ফাইল ও ফোল্ডার ফিরিয়ে আনতে আপনি
files রিসোর্সে list পদ্ধতি ব্যবহার করতে পারেন। এছাড়াও, আপনি list
পদ্ধতি ব্যবহার করে কিছু রিসোর্স পদ্ধতির (যেমন
get এবং update পদ্ধতি) জন্য প্রয়োজনীয় fileId ফিরিয়ে আনতে পারবেন।
ফিল্ড প্যারামিটার ব্যবহার করুন
উত্তরে কোন কোন ফিল্ড দেখতে চান তা নির্দিষ্ট করতে চাইলে, files রিসোর্সের যেকোনও পদ্ধতির সাথে
fields সিস্টেম
প্যারামিটার
সেট করতে পারেন। আপনি fields প্যারামিটার বাদ দিলে, সার্ভার
মেথড-নির্দিষ্ট ফিল্ডের একটি ডিফল্ট সেট রিটার্ন করে। যেমন,
list পদ্ধতি প্রতিটি ফাইলের জন্য শুধুমাত্র kind, id,
name, mimeType এবং resourceKey ফিল্ড ফিরিয়ে দেয়। বিভিন্ন ফিল্ড ফেরত পেতে, নির্দিষ্ট ফিল্ড ফেরত পান দেখুন।
আইডির মাধ্যমে ফাইল পান
ফাইল পেতে, fileId পাথ প্যারামিটার সহ
files রিসোর্সে get পদ্ধতি ব্যবহার করুন।
আপনি ফাইল আইডি না জানলে, list
পদ্ধতি ব্যবহার করে সব ফাইলের তালিকা তৈরি করতে পারবেন।
এই পদ্ধতিটি files রিসোর্সের ইনস্ট্যান্স হিসেবে ফাইলটি রিটার্ন করে। আপনি alt=media প্যারামিটার
প্রদান করলে, রেসপন্স বডিতে ফাইলের কন্টেন্ট
অন্তর্ভুক্ত থাকে। blob ফাইল ডাউনলোড করতে, blob ফাইলের কন্টেন্ট ডাউনলোড করুন দেখুন।
পরিচিত ম্যালওয়্যার বা অন্যান্য
অপব্যবহারমূলক ফাইল ডাউনলোড করার ঝুঁকি স্বীকার করতে, acknowledgeAbuse কোয়েরি প্যারামিটার true-এ সেট করুন। এই ফিল্ডটি শুধুমাত্র তখনই প্রযোজ্য হয় যখন
alt=media প্যারামিটার সেট করা থাকে এবং ব্যবহারকারী হয় ফাইলের মালিক হন অথবা
সেই শেয়ার্ড ড্রাইভের আয়োজক হন যেখানে ফাইলটি থাকে।
আমার ড্রাইভে থাকা সব ফাইল ও ফোল্ডারের তালিকা দাও
বর্তমান ব্যবহারকারীর 'আমার ড্রাইভ'-এ সব ফাইল ও ফোল্ডার ফিরিয়ে আনতে কোনও প্যারামিটার ছাড়াই list পদ্ধতি ব্যবহার করুন।
নিচের curl কমান্ডটি থেকে কীভাবে সব ফাইল তালিকাভুক্ত করতে হয় তা জানা যায়:
curl -X GET \
'https://www.googleapis.com/drive/v3/files' \
-H 'Authorization: Bearer ACCESS_TOKEN' \
-H 'Accept: application/json'
ACCESS_TOKEN-এর পরিবর্তে অনুমোদিত OAuth 2.0 অ্যাক্সেস টোকেন ব্যবহার করুন।
'আমার ড্রাইভ'-এ নির্দিষ্ট ফাইল ও ফোল্ডার সার্চ করা
বর্তমান ব্যবহারকারীর 'আমার ড্রাইভ'-এ নির্দিষ্ট সেট ফাইল বা ফোল্ডার সার্চ করতে, এক বা একাধিক সার্চ করা শব্দ একত্রিত করে
ফাইল ফিল্টার করতে list পদ্ধতির সাথে কোয়েরি স্ট্রিং q ফিল্ড ব্যবহার করুন।
কোয়েরি স্ট্রিং সিনট্যাক্সে নিম্নলিখিত তিনটি অংশ থাকে:
query_term operator values
যেখানে:
query_termহল সার্চ করার জন্য কোয়েরি টার্ম বা ফিল্ড।operatorকোয়েরি পদের জন্য শর্ত নির্দিষ্ট করে।valuesহল সেই নির্দিষ্ট ভ্যালু যা আপনি সার্চ ফলাফল ফিল্টার করার জন্য ব্যবহার করতে চান।
যেমন, নিম্নলিখিত কোয়েরি স্ট্রিং MIME-এর ধরন সেট করে শুধুমাত্র ফোল্ডার ফেরত দেওয়ার জন্য সার্চ ফিল্টার করে:
mimeType = 'application/vnd.google-apps.folder'
সব ফাইল কোয়েরি করা শব্দ দেখতে, ফাইল-নির্দিষ্ট কোয়েরি করা শব্দ দেখুন।
কোয়েরি তৈরি করার জন্য আপনি যেসব কোয়েরি অপারেটর ব্যবহার করতে পারেন সেগুলি দেখতে, কোয়েরি অপারেটর দেখুন।
কোয়েরি স্ট্রিংয়ের উদাহরণ
নিচের সারণীতে কিছু প্রাথমিক কোয়েরি স্ট্রিংয়ের উদাহরণ দেওয়া হল। আপনার সার্চের জন্য ব্যবহৃত ক্লায়েন্ট লাইব্রেরির উপর নির্ভর করে প্রকৃত কোড আলাদা হয়।
কোয়েরি যাতে সঠিকভাবে কাজ করে তা নিশ্চিত করতে, ফাইলের নামে বিশেষ অক্ষর ব্যবহার করা এড়িয়ে যেতে হবে। যেমন, কোনও ফাইলের নামে অ্যাপোস্ট্রফি (') ও ব্যাকস্ল্যাশ ("\") অক্ষর থাকলে, ব্যাকস্ল্যাশ ব্যবহার করে সেগুলি এড়িয়ে যান: name
contains 'quinn\'s paper\\essay'।
| কী কোয়েরি করতে হবে | উদাহরণ |
|---|---|
স্ট্রিং ম্যাচ অপারেটর (contains) |
|
| "হ্যালো" শব্দ আছে এমন ফাইল | fullText contains 'hello' |
| "hello world" হুবহু এই বাক্যাংশ আছে এমন ফাইল | fullText contains '"hello world"' |
| "\" অক্ষর (যেমন, "\authors") আছে এমন কোয়েরি সহ ফাইল | fullText contains '\\authors' |
| "বাজেট" লেখা আছে এমন ফাইল | name contains 'budget' |
সমতা ও অসমতা অপারেটর (=, !=) |
|
| "hello" নামের ফাইল | name = 'hello' |
| ফোল্ডার হিসেবে থাকা ফাইল | mimeType = 'application/vnd.google-apps.folder' |
| ফোল্ডার নয় এমন ফাইল | mimeType != 'application/vnd.google-apps.folder' |
| তারাচিহ্নিত ফাইল | starred = true |
| ট্র্যাশে থাকা ফাইল | trashed = true |
| ট্র্যাশে নেই এমন ফাইল | trashed = false |
| নির্দিষ্ট ফাইল আইডির দিকে নির্দেশ করে এমন শর্টকাট | shortcutDetails.targetId = '1987654321' |
| এমন ফাইল যা কারও সাথে বা ডোমেনের সাথে শেয়ার করা হয়নি (প্রাইভেট বা নির্দিষ্ট ব্যবহারকারী বা গ্রুপের সাথে শেয়ার করা হয়েছে) | visibility = 'limited' |
| লিঙ্ক আছে এমন যেকেউ অ্যাক্সেস করতে পারবেন এমন ফাইল | visibility = 'anyoneWithLink' |
| ওয়েবে সর্বজনীনভাবে খুঁজে পাওয়া যায় এমন ফাইল | visibility = 'anyoneCanFind' |
তুলনা করার অপারেটর (>, >=, <, <=) |
|
| নির্দিষ্ট তারিখের পরে পরিবর্তিত ফাইল (ডিফল্ট টাইম জোন হল UTC) | modifiedTime > '2012-06-04T12:00:00' |
| ১ জানুয়ারি, ২০২৩-এর পরে তৈরি করা ফাইল | createdTime > '2023-01-01T00:00:00' |
| ১ জানুয়ারি, ২০২৩-এর আগে পরিবর্তন করা ফাইল | modifiedTime < '2023-01-01T00:00:00' |
কালেকশন মেম্বারশিপ অপারেটর (in) |
|
কোনও কালেকশনের মধ্যে থাকা ডাইরেক্ট চাইল্ড ফাইল (যেমন, 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 |
| "test@example.org" ব্যবহারকারীর কাছে যেসব ফাইল পড়ার অনুমতি আছে | 'test@example.org' in readers |
কালেকশন ম্যাচিং অপারেটর (has) |
|
| সব অ্যাপের কাছে দৃশ্যমান কাস্টম ফাইল প্রপার্টি সহ ফাইল | properties has { key='mass' and value='1.3kg' } |
| অনুরোধকারী অ্যাপের জন্য ব্যক্তিগত কাস্টম ফাইল প্রপার্টি সহ ফাইল | appProperties has { key='additionalID' and value='8e8aceg2af2ge72e78' } |
| "department" কী সহ কাস্টম ফাইল প্রপার্টি আছে এমন ফাইল (ভ্যালু যাই হোক না কেন) | properties has { key='department' } |
লজিক্যাল অপারেটর (and, or, not) |
|
| "হ্যালো" এবং "বিদায়" শব্দগুলি সহ ফাইলের নাম | name contains 'hello' and name contains 'goodbye' |
| "হ্যালো" শব্দটি নেই এমন নাম সহ ফাইল | not name contains 'hello' |
| "গুরুত্বপূর্ণ" টেক্সট আছে এবং ট্র্যাশে আছে এমন ফাইল | fullText contains 'important' and trashed = true |
| যেসব ফাইলে "হ্যালো" শব্দটি নেই | not fullText contains 'hello' |
| নির্দিষ্ট তারিখের পরে ছবি বা ভিডিও ফাইল পরিবর্তন করা হয়েছে | modifiedTime > '2012-06-04T12:00:00' and (mimeType contains 'image/' or mimeType contains 'video/') |
| অনুমোদিত ব্যবহারকারীর সাথে শেয়ার করা ফাইল যার নামে "হ্যালো" আছে | sharedWithMe and name contains 'hello' |
| ফোল্ডার বা শর্টকাট হিসেবে থাকা ফাইল | mimeType = 'application/vnd.google-apps.folder' or mimeType = 'application/vnd.google-apps.shortcut' |
| "প্রোজেক্ট প্ল্যান" নামের ফাইল যা ট্র্যাশে নেই | name = 'Project Plan' and trashed = false |
| নির্দিষ্ট ফোল্ডারে থাকা ডাইরেক্ট চাইল্ড ফাইল যা ট্র্যাশে নেই | '1234567' in parents and trashed = false |
ক্লায়েন্ট লাইব্রেরির সাহায্যে সার্চ ফলাফল ফিল্টার করা
JPEG ফাইলের নাম ও আইডি অনুযায়ী সার্চ ফলাফল ফিল্টার করতে কীভাবে ক্লায়েন্ট লাইব্রেরি ব্যবহার করতে হয় তা নিম্নলিখিত কোড স্যাম্পেলে দেখানো হয়েছে। এই নমুনাটি image/jpeg ধরনের ফাইলের ফলাফল আরও নির্দিষ্ট করতে mimeType
কোয়েরি শব্দ ব্যবহার করে। এছাড়াও, এটি Drive
স্পেস-এ সার্চ আরও সীমিত করতে
spaces-কে drive-এ সেট করে। nextPageToken-এর ফলাফল null হলে,
আর কোনও ফলাফল নেই।
Java
Python
Node.js
PHP
সর্বজনীন ফোল্ডারে থাকা ফাইলের তালিকা তৈরি করা
সর্বজনীনভাবে শেয়ার করা ফোল্ডারে (যেখানে অ্যাক্সেস "লিঙ্ক আছে এমন যেকোনও ব্যক্তি" বা "ওয়েবে সর্বজনীন" হিসেবে সেট করা আছে) ফাইল সার্চ করতে বা তালিকাভুক্ত করতে, files রিসোর্সে list পদ্ধতি ব্যবহার করুন, যেখানে parents কালেকশনে ফোল্ডারের আইডি অনুযায়ী ফিল্টার করার জন্য q কোয়েরি
প্যারামিটার সেট করা আছে:
'FOLDER_ID' in parents and trashed = false
কোনও পাবলিক ফোল্ডারে ফাইল তালিকাভুক্ত করার সময়, আপনি OAuth 2.0
ব্যবহারকারীর ক্রেডেনশিয়ালের পরিবর্তে
API কী ব্যবহার করে অনুরোধ যাচাই করতে পারবেন। ফোল্ডারটি শেয়ার্ড ড্রাইভের মধ্যে থাকলে, আপনাকে অবশ্যই
অনুরোধে supportsAllDrives=true ও includeItemsFromAllDrives=true সেট করতে হবে।
নিচের কোড স্যাম্পেল থেকে কীভাবে কোনও পাবলিক ফোল্ডারে ফাইল তালিকাভুক্ত করতে হয় তা জানতে পারবেন:
Node.js
/**
* List files in a public folder using an API key.
* @param {string} folderId The ID of the public folder.
* @param {string} apiKey Your Google Cloud API key.
* @return {Promise<Array>} The list of files.
*/
async function listPublicFolder(folderId, apiKey) {
const {google} = require('googleapis');
const service = google.drive({version: 'v3', auth: apiKey});
try {
const response = await service.files.list({
q: `'${folderId}' in parents and trashed = false`,
fields: 'nextPageToken, files(id, name, mimeType)',
supportsAllDrives: true,
includeItemsFromAllDrives: true,
});
const files = response.data.files;
console.log('Files:');
for (const file of files) {
console.log(`${file.name} (${file.id})`);
}
return files;
} catch (err) {
// TODO(developer): Handle error
console.error(err);
}
}
কার্ল
curl -G \
'https://www.googleapis.com/drive/v3/files' \
--data-urlencode "q='FOLDER_ID' in parents and trashed = false" \
--data-urlencode 'supportsAllDrives=true' \
--data-urlencode 'includeItemsFromAllDrives=true' \
--data-urlencode 'fields=nextPageToken,files(id,name,mimeType)' \
--data-urlencode 'key=API_KEY' \
-H 'Accept: application/json'
নিম্নলিখিতগুলি পরিবর্তন করুন:
- FOLDER_ID: পাবলিক ফোল্ডারের আইডি।
- API_KEY: আপনার প্রোজেক্টের API কী।
ডেসেন্ডেন্ট ফোল্ডার ও ফাইল রিকার্সিভলি সার্চ করা
parents কোয়েরি শব্দ শুধুমাত্র নির্দিষ্ট ফোল্ডারের মধ্যে
অবস্থিত সরাসরি চাইল্ড ফাইল ও ফোল্ডার রিটার্ন করে। Drive API, একটি API কলে ডিসেন্ডেন্ট সাবফোল্ডার ট্রি রিকার্সিভভাবে সার্চ করার জন্য কোনও কোয়েরি অপারেটর বা প্যারামিটার প্রদান করে না।
কোনও ফোল্ডার এবং তার সমস্ত ডিসেন্ডেন্ট সাবফোল্ডার ও ফাইল সার্চ করতে, আপনার অ্যাপ্লিকেশনকে অবশ্যই ক্লায়েন্ট-সাইড ট্রি ট্রাভার্সাল পারফর্ম করতে হবে:
'FOLDER_ID' in parents and trashed = falseব্যবহার করে টার্গেট ফোল্ডারের ডাইরেক্ট চাইল্ড কোয়েরি করুন।mimeType = 'application/vnd.google-apps.folder'-এ ফলাফল ফিল্টার করে সাবফোল্ডার শনাক্ত করুন।- প্রতিটি চাইল্ড ফোল্ডারের আইডি রিকার্সিভ বা ইটারেটিভ কোয়েরি করে এর কন্টেন্ট রিট্রিভ করুন।
নিম্নলিখিত কোড স্যাম্পেল থেকে কীভাবে কোনও ফোল্ডার ও তার বংশধরদের রিকার্সিভ পদ্ধতিতে সার্চ করতে হয় তা জানতে পারবেন:
Node.js
/**
* Recursively searches a folder and all descendant subfolders for files.
* @param {string} folderId The ID of the starting folder.
* @param {Object} authClient An authorized OAuth 2.0 client.
* @return {Promise<Array>} The list of all descendant files.
*/
async function searchFolderRecursively(folderId, authClient) {
const {google} = require('googleapis');
const service = google.drive({version: 'v3', auth: authClient});
const allFiles = [];
const foldersToSearch = [folderId];
try {
while (foldersToSearch.length > 0) {
const currentFolderId = foldersToSearch.pop();
let pageToken = null;
do {
const response = await service.files.list({
q: `'${currentFolderId}' in parents and trashed = false`,
fields: 'nextPageToken, files(id, name, mimeType)',
pageSize: 1000,
supportsAllDrives: true,
includeItemsFromAllDrives: true,
pageToken: pageToken,
});
const files = response.data.files || [];
for (const file of files) {
if (file.mimeType === 'application/vnd.google-apps.folder') {
foldersToSearch.push(file.id);
} else {
allFiles.push(file);
}
}
pageToken = response.data.nextPageToken;
} while (pageToken);
}
return allFiles;
} catch (err) {
// TODO(developer): Handle error
console.error(err);
throw err;
}
}
Python
from googleapiclient.discovery import build
from googleapiclient.errors import HttpError
def search_folder_recursively(folder_id, creds):
"""Recursively searches a folder and all descendant subfolders for
files.
Args:
folder_id: The ID of the starting folder.
creds: An authorized OAuth 2.0 credentials object.
Returns:
A list of all descendant file resources.
"""
service = build("drive", "v3", credentials=creds)
all_files = []
folders_to_search = [folder_id]
try:
while folders_to_search:
current_folder_id = folders_to_search.pop()
page_token = None
while True:
response = (
service.files()
.list(
q=f"'{current_folder_id}' in parents and trashed = false",
fields="nextPageToken, files(id, name, mimeType)",
pageSize=1000,
supportsAllDrives=True,
includeItemsFromAllDrives=True,
pageToken=page_token,
)
.execute()
)
for item in response.get("files", []):
if (
item.get("mimeType")
== "application/vnd.google-apps.folder"
):
folders_to_search.append(item.get("id"))
else:
all_files.append(item)
page_token = response.get("nextPageToken")
if not page_token:
break
return all_files
except HttpError as error:
# TODO(developer): Handle error
print(f"An error occurred: {error}")
return None
কাস্টম প্রপার্টি সহ ফাইল সার্চ করা
কাস্টম ফাইল প্রপার্টি সহ ফাইল সার্চ করতে, কী ও ভ্যালু সহ 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.FIELD_ID = 'VALUE'
সফল হলে, রেসপন্স বডিতে কোয়েরির সাথে ম্যাচ করা সব ফাইল ইনস্ট্যান্স থাকে। আরও তথ্যের জন্য, নির্দিষ্ট লেবেল বা ফিল্ড ভ্যালু সহ ফাইল সার্চ করুন।
কর্পোরা জুড়ে সার্চ করুন
ডিফল্ট হিসেবে, list পদ্ধতি ব্যবহার করা হলে,
corpora কোয়েরি প্যারামিটারে user আইটেম কালেকশন সেট করা হয়। অন্যান্য আইটেম কালেকশন সার্চ করতে, যেমন domain-এর সাথে শেয়ার করা, আপনাকে অবশ্যই স্পষ্টভাবে
corpora প্যারামিটার সেট করতে হবে।
আপনি একটি কোয়েরিতে একাধিক কর্পোরা সার্চ করতে পারবেন; তবে, একত্রিত
কর্পোরা খুব বড় হলে, API অসম্পূর্ণ ফলাফল দেখাতে পারে। রেসপন্স বডিতে
incompleteSearch
ফিল্ড চেক করুন। এটি true হলে, কিছু ডকুমেন্ট বাদ দেওয়া হয়েছে। এই সমস্যার সমাধান করতে, corpora-এর পরিধি কমিয়ে user অথবা drive ব্যবহার করুন।
list পদ্ধতিতে
orderBy কোয়েরি
প্যারামিটার ব্যবহার করার সময়, আইটেমের বড় কালেকশনে কোয়েরির জন্য createdTime কী ব্যবহার করা এড়িয়ে চলুন, কারণ এর জন্য অতিরিক্ত প্রসেসিংয়ের প্রয়োজন হয় এবং এর ফলে
টাইম-আউট বা অন্যান্য সমস্যা হতে পারে। আইটেমের বড় সংগ্রহে সময়-সম্পর্কিত সর্টিংয়ের জন্য,
আপনি modifiedTime ব্যবহার করতে পারেন কারণ এটি এই ধরনের কোয়েরি হ্যান্ডেল করার জন্য অপ্টিমাইজ করা হয়েছে।
যেমন, orderBy-কে modifiedTime (বা modifiedTime desc)-এ সেট করুন।
আপনি orderBy কোয়েরি প্যারামিটার বাদ দিলে, কোনও ডিফল্ট ক্রমানুসারে সাজানোর সেটিং থাকে না এবং
আইটেমগুলি ইচ্ছামতো দেখানো হয়।