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

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

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

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

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

कोई फ़ाइल पाना

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

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

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

मौजूदा उपयोगकर्ता की 'मेरी ड्राइव' में मौजूद सभी फ़ाइलें और फ़ोल्डर खोजें

सभी फ़ाइलों और फ़ोल्डर को वापस लाने के लिए, बिना किसी पैरामीटर के list तरीके का इस्तेमाल करें.

GET https://www.googleapis.com/drive/v3/files

मौजूदा उपयोगकर्ता की 'मेरी ड्राइव' में मौजूद फ़ाइलें या फ़ोल्डर खोजना

फ़ाइलों या फ़ोल्डर के किसी खास सेट को खोजने के लिए, list तरीके के साथ क्वेरी स्ट्रिंग q फ़ील्ड का इस्तेमाल करें. इससे, एक या उससे ज़्यादा खोज शब्दों को मिलाकर, फ़ाइलों को फ़िल्टर किया जा सकता है.

क्वेरी स्ट्रिंग के सिंटैक्स में ये तीन हिस्से होते हैं:

query_term operator values

कहां:

  • query_term, क्वेरी टर्म या वह फ़ील्ड है जिसमें खोज करनी है.

  • operator, क्वेरी टर्म के लिए शर्त तय करता है.

  • values वे खास वैल्यू होती हैं जिनका इस्तेमाल करके, आपको खोज के नतीजों को फ़िल्टर करना होता है.

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

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

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

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

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

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

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

आपको किस तरह की क्वेरी करनी है उदाहरण
"hello" नाम की फ़ाइलें name = 'hello'
ऐसी फ़ाइलें जिनके नाम में "hello" और "goodbye" शब्द शामिल हैं name contains 'hello' and name contains 'goodbye'
ऐसी फ़ाइलें जिनके नाम में "hello" शब्द शामिल नहीं है not name contains 'hello'
ट्रैश में मौजूद वे फ़ाइलें जिनमें "ज़रूरी" शब्द शामिल है fullText contains 'important' and trashed = true
ऐसी फ़ाइलें जिनमें "hello" शब्द शामिल है fullText contains 'hello'
ऐसी फ़ाइलें जिनमें "hello" शब्द नहीं है not fullText contains 'hello'
ऐसी फ़ाइलें जिनमें "hello world" वाक्यांश मौजूद है fullText contains '"hello world"'
ऐसी फ़ाइलें जिनमें "\" वर्ण वाली क्वेरी शामिल है. उदाहरण के लिए, "\authors" fullText contains '\\authors'
फ़ोल्डर के तौर पर सेव की गई फ़ाइलें mimeType = 'application/vnd.google-apps.folder'
ऐसी फ़ाइलें जो फ़ोल्डर नहीं हैं mimeType != 'application/vnd.google-apps.folder'
किसी तारीख के बाद बदली गई फ़ाइलें (डिफ़ॉल्ट टाइम ज़ोन यूटीसी है) modifiedTime > '2012-06-04T12:00:00'
किसी खास तारीख के बाद बदली गई इमेज या वीडियो फ़ाइलें modifiedTime > '2012-06-04T12:00:00' and (mimeType contains 'image/' or mimeType contains 'video/')
स्टार के निशान वाली फ़ाइलें starred = true
किसी कलेक्शन में मौजूद फ़ाइलें. उदाहरण के लिए, 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
अनुमति वाले उपयोगकर्ता के साथ शेयर की गई ऐसी फ़ाइलें जिनके नाम में "hello" है sharedWithMe and name contains 'hello'
ऐसी फ़ाइलें जिनमें कस्टम फ़ाइल प्रॉपर्टी होती है और जो सभी ऐप्लिकेशन को दिखती हैं properties has { key='mass' and value='1.3kg' }
ऐसी फ़ाइलें जिनमें कस्टम फ़ाइल प्रॉपर्टी होती है. ये प्रॉपर्टी, अनुरोध करने वाले ऐप्लिकेशन के लिए निजी होती हैं appProperties has { key='additionalID' and value='8e8aceg2af2ge72e78' }
ऐसी फ़ाइलें जिन्हें किसी व्यक्ति या डोमेन के साथ शेयर नहीं किया गया है. जैसे, सिर्फ़ निजी फ़ाइलें या ऐसी फ़ाइलें जिन्हें कुछ उपयोगकर्ताओं या ग्रुप के साथ शेयर किया गया है visibility = 'limited'

क्लाइंट लाइब्रेरी की मदद से, खोज के नतीजों को फ़िल्टर करना

यहां दिए गए कोड के उदाहरण में, क्लाइंट लाइब्रेरी का इस्तेमाल करके, खोज के नतीजों को 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, items(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
/**
 * Search file in drive location
 * @return{obj} data file
 * */
async function searchFile() {
  const {GoogleAuth} = require('google-auth-library');
  const {google} = require('googleapis');

  // Get credentials and build service
  // TODO (developer) - Use appropriate auth mechanism for your app
  const auth = new GoogleAuth({
    scopes: 'https://www.googleapis.com/auth/drive',
  });
  const service = google.drive({version: 'v3', auth});
  const files = [];
  try {
    const res = await service.files.list({
      q: 'mimeType=\'image/jpeg\'',
      fields: 'nextPageToken, files(id, name)',
      spaces: 'drive',
    });
    Array.prototype.push.apply(files, res.files);
    res.data.files.forEach(function(file) {
      console.log('Found file:', file.name, file.id);
    });
    return res.data.files;
  } catch (err) {
    // TODO(developer) - Handle error
    throw err;
  }
}

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

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

कस्टम फ़ाइल प्रॉपर्टी के हिसाब से फ़ाइलें खोजने के लिए, 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.text_field_id ='TEXT'.

ज़्यादा जानकारी के लिए, किसी खास लेबल या फ़ील्ड की वैल्यू के हिसाब से फ़ाइलें खोजना लेख पढ़ें.

कॉर्पस खोजना

list तरीके को कॉल करने वाली खोजें, डिफ़ॉल्ट रूप से user के corpora का इस्तेमाल करती हैं. domain के साथ शेयर की गई फ़ाइलों जैसे अन्य कॉर्पस को खोजने के लिए, corpora पैरामीटर सेट करें.

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