Bu kılavuzda, Google Drive API'nin dosya ve klasör aramak için çeşitli yöntemleri nasıl desteklediği açıklanmaktadır.
Bir Drive kullanıcısının dosyalarının ve klasörlerinin tamamını veya bir kısmını döndürmek için files kaynağında list yöntemini kullanabilirsiniz. Bazı kaynak yöntemleri (ör. get ve update yöntemleri) için gereken fileId değerini almak üzere list yöntemini de kullanabilirsiniz.
Alanlar parametresini kullanma
Yanıtta döndürülecek alanları belirtmek istiyorsanız files kaynağının herhangi bir yöntemiyle fields sistem parametresini ayarlayabilirsiniz. fields parametresini atlarsanız sunucu, yönteme özgü varsayılan bir alan grubu 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ı makaleyi inceleyin.
Kimliğe göre dosya alma
Bir dosyayı almak için files kaynağında fileId yol parametresiyle 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 parametresini sağlarsanız yanıt, dosya içeriklerini yanıt gövdesinde içerir. Blob dosyası indirmek için Blob dosyası içeriğini indirme başlıklı makaleyi inceleyin.
Bilinen kötü amaçlı yazılımları veya diğer kötüye kullanım amaçlı dosyaları indirme riskini kabul etmek için acknowledgeAbuse sorgu parametresini true olarak ayarlayın. Bu alan yalnızca alt=media parametresi ayarlandığında ve kullanıcı, dosya sahibi veya dosyanın bulunduğu ortak Drive'ın düzenleyicisi olduğunda geçerlidir.
Drive'ım bölümündeki tüm dosya ve klasörleri listeleme
Geçerli kullanıcının Drive'ım bölümündeki tüm dosya ve klasörleri döndürmek için list yöntemini parametre olmadan kullanın.
Aşağıdaki curl komutunda tüm dosyaların nasıl listeleneceği gösterilmektedir:
curl -X GET \
'https://www.googleapis.com/drive/v3/files' \
-H 'Authorization: Bearer ACCESS_TOKEN' \
-H 'Accept: application/json'
ACCESS_TOKEN yerine yetkili bir OAuth 2.0 erişim jetonu yerleştirin.
Drive'ım bölümünde belirli dosya ve klasörleri arama
Mevcut kullanıcının Drive'ım klasöründe belirli bir dosya veya klasör grubunu aramak için q sorgu dizesi alanını list yöntemiyle birlikte kullanarak döndürülecek dosyaları filtreleyin. Bu işlem için bir veya daha fazla arama terimini birleştirin.
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 teriminin koşulunu 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 aramanın yalnızca klasörleri döndürmesi için filtreler:
mimeType = 'application/vnd.google-apps.folder'
Tüm dosya sorgu terimlerini görüntülemek için Dosyaya özel sorgu terimleri başlıklı makaleyi inceleyin.
Sorgu oluşturmak için kullanabileceğiniz tüm sorgu operatörlerini görüntülemek istiyorsanız 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 göre farklılık gösterir.
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 varsa bunları çıkış karakteriyle (name
contains 'quinn\'s paper\\essay') ayırın.
| Sorgulanacaklar | Örnek |
|---|---|
Dize eşleştirme operatörü (contains) |
|
| "Merhaba" kelimesini içeren dosyalar | fullText contains 'hello' |
| Files that contain the exact phrase "Hello World" | fullText contains '"hello world"' |
| "\" karakterini içeren bir sorguya sahip dosyalar (örneğin, "\yazarlar") | fullText contains '\\authors' |
| Adında "bütçe" kelimesi geçen dosyalar | name contains 'budget' |
Eşitlik ve eşitsizlik operatörleri (=, !=) |
|
| Adı "merhaba" olan dosyalar | name = 'hello' |
| Klasör olan dosyalar | mimeType = 'application/vnd.google-apps.folder' |
| Klasör olmayan dosyalar | mimeType != 'application/vnd.google-apps.folder' |
| Yıldızlı dosyalar | starred = true |
| Çöp kutusundaki dosyalar | trashed = true |
| Çöp kutusunda olmayan dosyalar | trashed = false |
| Belirli bir dosya kimliğine işaret eden kısayollar | shortcutDetails.targetId = '1987654321' |
| Kimseyle veya alanlarla paylaşılmayan dosyalar (gizli ya da belirli kullanıcı veya gruplarla paylaşılan) | visibility = 'limited' |
| Bağlantıya sahip olan herkesin erişebildiği dosyalar | visibility = 'anyoneWithLink' |
| Web'de herkes tarafından bulunabilen dosyalar | visibility = 'anyoneCanFind' |
Karşılaştırma operatörleri (>, >=, <, <=) |
|
| Belirli bir tarihten sonra değiştirilen dosyalar (varsayılan saat dilimi UTC'dir) | modifiedTime > '2012-06-04T12:00:00' |
| 1 Ocak 2023'ten sonra oluşturulan dosyalar | createdTime > '2023-01-01T00:00:00' |
| 1 Ocak 2023'ten önce değiştirilen dosyalar | modifiedTime < '2023-01-01T00:00:00' |
Koleksiyon üyeliği operatörü (in) |
|
Bir koleksiyondaki doğrudan alt dosyalar (örneğin, parents koleksiyonundaki klasör kimliği) |
'1234567' in parents |
| 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 |
| "test@example.org" kullanıcısının okuma izni olan dosyalar | 'test@example.org' in readers |
Koleksiyon eşleştirme operatörü (has) |
|
| Tüm uygulamalar tarafından görülebilen özel dosya özelliğine sahip dosyalar | properties has { key='mass' and value='1.3kg' } |
| İstek gönderen uygulamaya özel bir dosya özelliğine sahip dosyalar | appProperties has { key='additionalID' and value='8e8aceg2af2ge72e78' } |
| "department" anahtarıyla özel dosya özelliği olan dosyalar (değerden bağımsız olarak) | properties has { key='department' } |
Mantıksal operatörler (and, or, not) |
|
| Adında "merhaba" ve "hoşça kal" 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çermeyen dosyalar | not fullText contains 'hello' |
| 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/') |
| Yetkili kullanıcıyla paylaşılan ve adında "merhaba" ifadesi geçen dosyalar | sharedWithMe and name contains 'hello' |
| Klasör veya kısayol olan dosyalar | mimeType = 'application/vnd.google-apps.folder' or mimeType = 'application/vnd.google-apps.shortcut' |
| Çöp kutusunda olmayan ve adı "Proje Planı" olan dosyalar | name = 'Project Plan' and trashed = false |
| Belirli bir klasörde bulunan ve çöp kutusunda olmayan doğrudan alt dosyalar | '1234567' in parents and trashed = false |
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ırlandırmak için mimeType sorgu terimi kullanılmaktadır. Ayrıca, aramayı Drive alanına daha da daraltmak için spaces değerini drive olarak ayarlar. nextPageToken, null değerini döndürdüğünde başka sonuç kalmamış demektir.
Java
Python
Node.js
PHP
Ortak klasördeki dosyaları listeleme
Herkese açık olarak paylaşılan bir klasördeki (erişimin "Bağlantıya sahip olan herkes" veya "Herkese açık" olarak ayarlandığı) dosyaları aramak ya da listelemek için parents koleksiyonundaki klasörün kimliğine göre filtreleme yapmak üzere q sorgu parametresi ayarlanmış files kaynağında list yöntemini kullanın:
'FOLDER_ID' in parents and trashed = false
Herkese açık bir klasördeki dosyaları listelerken, OAuth 2.0 kullanıcı kimlik bilgileri yerine API anahtarı kullanarak isteklerin kimliğini doğrulayabilirsiniz. Klasör bir ortak Drive'da bulunuyorsa istekte supportsAllDrives=true ve includeItemsFromAllDrives=true ayarlarını da yapmanız gerekir.
Aşağıdaki kod örneklerinde, herkese açık bir klasördeki dosyaların nasıl listeleneceği gösterilmektedir:
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
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'
Aşağıdakini değiştirin:
- FOLDER_ID: Ortak klasörün kimliği.
- API_KEY: Projenizin API anahtarı.
Alt klasörleri ve dosyaları yinelemeli olarak arama
parents sorgu terimi, yalnızca belirtilen klasörde bulunan doğrudan alt dosya ve klasörleri döndürür. Drive API, tek bir API çağrısında alt klasör ağaçlarını yinelemeli olarak aramak için bir sorgu operatörü veya parametresi sağlamaz.
Bir klasörü ve altındaki tüm alt klasörleri ve dosyaları aramak için uygulamanızın istemci tarafında ağaç geçişi yapması gerekir:
'FOLDER_ID' in parents and trashed = falsekullanarak hedef klasörün doğrudan alt öğelerini sorgulayın.- Sonuçları
mimeType = 'application/vnd.google-apps.folder'ile filtreleyerek alt klasörleri belirleyin. - İçeriğini almak için her bir alt klasörün kimliğini yinelemeli veya tekrarlı olarak sorgulayın.
Aşağıdaki kod örneklerinde, bir klasörün ve alt öğelerinin yinelemeli olarak nasıl aranacağı gösterilmektedir:
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
Özel özelliklere sahip dosyaları arama
Özel dosya özelliğine sahip dosyaları aramak için anahtar ve değer içeren properties veya appProperties arama sorgusu terimini kullanın. Örneğin, istekte bulunan uygulamaya özel olan, additionalID adlı 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.
Dosyaları etikete veya alan değerine göre arama
Belirli etiketlere sahip dosyaları aramak için labels arama sorgusu terimini belirli bir etiket kimliğiyle birlikte kullanın.
Belirli bir etiketin uygulandığı dosyaları aramak için:
'labels/LABEL_ID' in labels
Belirli bir etiketin uygulanmadığı dosyaları aramak için:
not 'labels/LABEL_ID' in labels
Belirli bir etiket alanı değerine göre dosya aramak için:
labels/LABEL_ID.FIELD_ID = 'VALUE'
Başarılı olursa yanıt gövdesi, sorguyla eşleşen tüm dosya örneklerini içerir. Daha fazla bilgi için Belirli bir etikete veya alan değerine sahip dosyaları arama başlıklı makaleyi inceleyin.
Derlemelerde arama yapma
list yöntemi kullanıldığında user öğe koleksiyonu varsayılan olarak corpora sorgu parametresinde ayarlanır. domain ile paylaşılanlar gibi diğer öğe koleksiyonlarında arama yapmak için corpora parametresini açıkça ayarlamanız gerekir.
Tek bir sorguda birden fazla derlemeyi arayabilirsiniz. Ancak birleştirilen derlemeler çok büyükse API eksik sonuçlar döndürebilir. Yanıt gövdesindeki incompleteSearch alanını kontrol edin. true ise bazı belgeler atlanmıştır. Bu sorunu çözmek için corpora değerini user veya drive kullanacak şekilde daraltın.
list yönteminde orderBy sorgu parametresini kullanırken büyük öğe koleksiyonlarındaki sorgular için createdTime anahtarını kullanmaktan kaçının. Bu anahtar ek işlem gerektirir ve zaman aşımlarına veya başka sorunlara neden olabilir. Büyük öğe koleksiyonlarında zamana göre sıralama için bu sorguları işlemek üzere optimize edildiğinden modifiedTime kullanabilirsiniz.
Örneğin, orderBy değerini modifiedTime (veya modifiedTime desc) olarak ayarlayın.
orderBy sorgu parametresini atlarsanız varsayılan bir sıralama ölçütü olmaz ve öğeler rastgele döndürülür.