फ़ाइलें और फ़ोल्डर खोजना

इस गाइड में बताया गया है कि Google Drive API, फ़ाइलों और फ़ोल्डर को खोजने के कई तरीकों के साथ कैसे काम करता है.

Drive का इस्तेमाल करने वाले किसी व्यक्ति की सभी या कुछ फ़ाइलों और फ़ोल्डर को वापस लाने के लिए, files संसाधन पर list तरीके का इस्तेमाल किया जा सकता है. कुछ संसाधन तरीकों (जैसे कि get और update तरीके) के लिए ज़रूरी fileId को वापस पाने के लिए, list तरीके का भी इस्तेमाल किया जा सकता है.

फ़ील्ड पैरामीटर का इस्तेमाल करना

अगर आपको जवाब में दिखाए जाने वाले फ़ील्ड तय करने हैं, तो files रिसॉर्स के किसी भी तरीके के साथ fields सिस्टम पैरामीटर सेट किया जा सकता है. fields पैरामीटर को शामिल न करने पर, सर्वर उस तरीके के लिए फ़ील्ड का डिफ़ॉल्ट सेट दिखाता है. उदाहरण के लिए, list तरीके से, हर फ़ाइल के लिए सिर्फ़ kind, id, name, mimeType, और resourceKey फ़ील्ड दिखते हैं. अलग-अलग फ़ील्ड वापस पाने के लिए, चुनिंदा फ़ील्ड वापस पाना लेख पढ़ें.

आईडी के हिसाब से फ़ाइल पाना

किसी फ़ाइल को पाने के लिए, fileId पाथ पैरामीटर के साथ files रिसॉर्स पर get तरीके का इस्तेमाल करें. अगर आपको फ़ाइल आईडी नहीं पता है, तो list मेथड का इस्तेमाल करके, सभी फ़ाइलों की सूची बनाई जा सकती है.

यह तरीका, फ़ाइल को files संसाधन के इंस्टेंस के तौर पर दिखाता है. alt=media पैरामीटर देने पर, जवाब के मुख्य हिस्से में फ़ाइल का कॉन्टेंट शामिल होता है. ब्लॉब फ़ाइल डाउनलोड करने के लिए, ब्लॉब फ़ाइल का कॉन्टेंट डाउनलोड करना लेख पढ़ें.

जाने-पहचाने मैलवेयर या अन्य गलत इस्तेमाल वाली फ़ाइलों को डाउनलोड करने के जोखिम को स्वीकार करने के लिए, acknowledgeAbuse क्वेरी पैरामीटर को true पर सेट करें. यह फ़ील्ड सिर्फ़ तब लागू होता है, जब alt=media पैरामीटर सेट किया गया हो और उपयोगकर्ता, फ़ाइल का मालिक हो या उस शेयर की गई ड्राइव का आयोजक हो जिसमें फ़ाइल मौजूद है.

'मेरी ड्राइव' में मौजूद सभी फ़ाइलों और फ़ोल्डर की सूची बनाना

मौजूदा उपयोगकर्ता की 'मेरी ड्राइव' में मौजूद सभी फ़ाइलों और फ़ोल्डर को वापस पाने के लिए, बिना किसी पैरामीटर के list तरीके का इस्तेमाल करें.

यहां दी गई कर्ल कमांड से, सभी फ़ाइलों की सूची दिखाने का तरीका बताया गया है:

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 वे खास वैल्यू होती हैं जिनका इस्तेमाल करके, आपको खोज के नतीजों को फ़िल्टर करना होता है.

उदाहरण के लिए, नीचे दी गई क्वेरी स्ट्रिंग, खोज के नतीजों को सिर्फ़ फ़ोल्डर दिखाने के लिए फ़िल्टर करती है. इसके लिए, एमआईएमई टाइप सेट किया जाता है:

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

फ़ाइल क्वेरी के सभी शब्दों को देखने के लिए, फ़ाइल के हिसाब से क्वेरी के शब्द देखें.

क्वेरी बनाने के लिए इस्तेमाल किए जा सकने वाले सभी क्वेरी ऑपरेटर देखने के लिए, क्वेरी ऑपरेटर देखें.

क्वेरी स्ट्रिंग के उदाहरण

यहां दी गई टेबल में, कुछ बुनियादी क्वेरी स्ट्रिंग के उदाहरण दिए गए हैं. असली कोड, आपकी खोज के लिए इस्तेमाल की गई क्लाइंट लाइब्रेरी के हिसाब से अलग-अलग होता है.

आपको अपनी फ़ाइलों के नामों में मौजूद खास वर्णों को भी मार्क करना होगा, ताकि यह पक्का किया जा सके कि क्वेरी सही तरीके से काम कर रही है. उदाहरण के लिए, अगर किसी फ़ाइल के नाम में ऐपोस्ट्रॉफ़ी (') और बैकलैश ("\") वर्ण, दोनों शामिल हैं, तो उन्हें एस्केप करने के लिए बैकलैश का इस्तेमाल करें: name contains 'quinn\'s paper\\essay'.

क्वेरी क्या करनी है उदाहरण
स्ट्रिंग मैच ऑपरेटर (contains)
ऐसी फ़ाइलें जिनमें "hello" शब्द शामिल है 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'
तुलना करने वाले ऑपरेटर (>, >=, <, <=)
किसी तारीख के बाद बदली गई फ़ाइलें (डिफ़ॉल्ट टाइम ज़ोन यूटीसी है) modifiedTime > '2012-06-04T12:00:00'
1 जनवरी, 2023 के बाद बनाई गई फ़ाइलें createdTime > '2023-01-01T00:00:00'
1 जनवरी, 2023 से पहले बदली गई फ़ाइलें 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)
ऐसी फ़ाइलें जिनके नाम में "hello" और "goodbye" शब्द शामिल हैं name contains 'hello' and name contains 'goodbye'
ऐसी फ़ाइलें जिनके नाम में "hello" शब्द शामिल नहीं है not name contains 'hello'
ऐसी फ़ाइलें जिनमें "ज़रूरी" शब्द शामिल है और जो ट्रैश में हैं fullText contains 'important' and trashed = true
ऐसी फ़ाइलें जिनमें "hello" शब्द शामिल नहीं है not fullText contains 'hello'
किसी तारीख के बाद बदली गई इमेज या वीडियो फ़ाइलें modifiedTime > '2012-06-04T12:00:00' and (mimeType contains 'image/' or mimeType contains 'video/')
अनुमति वाले उपयोगकर्ता के साथ शेयर की गई ऐसी फ़ाइलें जिनके नाम में "hello" है 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 फ़ाइलों के नाम और आईडी के हिसाब से कैसे फ़िल्टर किया जाता है. इस सैंपल में, mimeType क्वेरी टर्म का इस्तेमाल किया गया है. इससे, खोज के नतीजे सिर्फ़ image/jpeg टाइप की फ़ाइलों तक सीमित हो जाते हैं. यह spaces को drive पर भी सेट करता है, ताकि खोज के नतीजों को Drive स्पेस तक सीमित किया जा सके. जब nextPageToken, null दिखाता है, तो इसका मतलब है कि कोई और नतीजा नहीं है.

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, files(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
import {GoogleAuth} from 'google-auth-library';
import {google} from 'googleapis';

/**
 * Searches for files in Google Drive.
 * @return {Promise<object[]>} A list of files.
 */
async function searchFile() {
  // Authenticate with Google and get an authorized client.
  // TODO (developer): Use an appropriate auth mechanism for your app.
  const auth = new GoogleAuth({
    scopes: 'https://www.googleapis.com/auth/drive',
  });

  // Create a new Drive API client (v3).
  const service = google.drive({version: 'v3', auth});

  // Search for files with the specified query.
  const result = await service.files.list({
    q: "mimeType='image/jpeg'",
    fields: 'nextPageToken, files(id, name)',
    spaces: 'drive',
  });

  // Print the name and ID of each found file.
  (result.data.files ?? []).forEach((file) => {
    console.log('Found file:', file.name, file.id);
  });

  return result.data.files ?? [];
}

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

किसी सार्वजनिक फ़ोल्डर में मौजूद फ़ाइलों की सूची बनाना

सार्वजनिक तौर पर शेयर किए गए फ़ोल्डर में मौजूद फ़ाइलों को खोजने या उनकी सूची बनाने के लिए, files रिसॉर्स पर list तरीके का इस्तेमाल करें. इस फ़ोल्डर का ऐक्सेस "लिंक वाला कोई भी व्यक्ति" या "वेब पर सार्वजनिक करें" पर सेट होता है. साथ ही, q क्वेरी पैरामीटर को सेट करके, parents कलेक्शन में फ़ोल्डर के आईडी के हिसाब से फ़िल्टर करें:

'FOLDER_ID' in parents and trashed = false

किसी सार्वजनिक फ़ोल्डर में फ़ाइलें लिस्ट करते समय, OAuth 2.0 के उपयोगकर्ता क्रेडेंशियल के बजाय, एपीआई पासकोड का इस्तेमाल करके अनुरोधों की पुष्टि की जा सकती है. अगर फ़ोल्डर, शेयर की गई ड्राइव में मौजूद है, तो आपको अनुरोध में 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

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: आपके प्रोजेक्ट का एपीआई पासकोड.

कस्टम प्रॉपर्टी वाली फ़ाइलें खोजना

कस्टम फ़ाइल प्रॉपर्टी वाली फ़ाइलें खोजने के लिए, कुंजी और वैल्यू के साथ 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 तरीके का इस्तेमाल करने पर, user आइटम कलेक्शन डिफ़ॉल्ट रूप से corpora क्वेरी पैरामीटर पर सेट होता है. अन्य आइटम कलेक्शन खोजने के लिए, जैसे कि domain के साथ शेयर किए गए कलेक्शन, आपको corpora पैरामीटर को साफ़ तौर पर सेट करना होगा.

एक क्वेरी में कई कॉर्पस खोजे जा सकते हैं. हालांकि, अगर जोड़े गए कॉर्पस बहुत बड़े हैं, तो एपीआई अधूरे नतीजे दिखा सकता है. जवाब के मुख्य हिस्से में मौजूद incompleteSearch फ़ील्ड देखें. अगर यह true है, तो इसका मतलब है कि कुछ दस्तावेज़ शामिल नहीं किए गए हैं. इस समस्या को हल करने के लिए, corpora को छोटा करें, ताकि user या drive का इस्तेमाल किया जा सके.

list तरीके पर orderBy क्वेरी पैरामीटर का इस्तेमाल करते समय, आइटम के बड़े कलेक्शन के लिए क्वेरी में createdTime कुंजी का इस्तेमाल न करें. ऐसा इसलिए, क्योंकि इसके लिए अतिरिक्त प्रोसेसिंग की ज़रूरत होती है. साथ ही, इससे टाइमआउट या अन्य समस्याएं हो सकती हैं. आइटम के बड़े कलेक्शन को समय के हिसाब से क्रम में लगाने के लिए, modifiedTime का इस्तेमाल किया जा सकता है. ऐसा इसलिए, क्योंकि इसे इन क्वेरी को हैंडल करने के लिए ऑप्टिमाइज़ किया गया है. उदाहरण के लिए, orderBy को modifiedTime (या modifiedTime desc) पर सेट करें.

orderBy क्वेरी पैरामीटर को शामिल न करने पर, कोई डिफ़ॉल्ट सॉर्ट ऑर्डर नहीं होता है. साथ ही, आइटम को किसी भी क्रम में दिखाया जाता है.