پشتیبانی از درایو مشترک را پیاده سازی کنید

این سند نحوه پیاده‌سازی پشتیبانی از درایو اشتراکی در برنامه شما با استفاده از API گوگل درایو را شرح می‌دهد.

درایوهای اشتراکی از مدل‌های سازماندهی، اشتراک‌گذاری و مالکیت متفاوتی نسبت به My Drive پیروی می‌کنند. اگر برنامه شما قرار است فایل‌ها را روی درایوهای اشتراکی ایجاد و مدیریت کند، باید پشتیبانی از درایو اشتراکی را در برنامه خود پیاده‌سازی کنید. پیچیدگی پیاده‌سازی شما به عملکرد برنامه شما بستگی دارد.

برای شروع، باید پارامتر پرس‌وجوی supportsAllDrives=true را در درخواست‌های خود، زمانی که برنامه شما عملیات زیر را انجام می‌دهد، وارد کنید:

درایو API نسخه ۳

  • files.get
  • files.list
  • files.create
  • files.update
  • files.copy
  • files.delete
  • changes.list
  • changes.getStartPageToken
  • permissions.list
  • permissions.get
  • permissions.create
  • permissions.update
  • permissions.delete

درایو API نسخه ۲

  • files.get
  • files.list
  • files.insert
  • files.update
  • files.patch
  • files.copy
  • files.trash
  • files.untrash
  • files.delete
  • files.touch
  • children.insert
  • parents.insert
  • changes.list
  • changes.getStartPageToken
  • changes.get
  • permissions.list
  • permissions.get
  • permissions.insert
  • permissions.update
  • permissions.patch
  • permissions.delete

پارامتر supportsAllDrives=true به گوگل درایو اطلاع می‌دهد که برنامه شما برای مدیریت فایل‌های موجود در درایوهای اشتراکی طراحی شده است.

برنامه‌هایی که مجوزها را می‌خوانند یا تغییر می‌دهند، تغییرات را ردیابی می‌کنند یا در چندین مجموعه داده جستجو می‌کنند، به قابلیت‌های درایو اشتراکی اضافی نیاز دارند. ادامه این سند تغییرات اضافی مورد نیاز برای انجام این وظایف را برجسته می‌کند.

جستجوی محتوا در درایو مشترک

از متد list روی منبع files برای یافتن فایل‌های کاربر در درایوهای مشترک استفاده کنید. برای جستجوی یک درایو مشترک، به «جستجوی درایوهای مشترک» مراجعه کنید.

متد list شامل پارامترهای کوئری مختص درایو زیر است:

  • driveId : شناسه درایو مشترک برای جستجو.

  • corpora : بدنه‌هایی از آیتم‌ها (فایل‌ها یا اسناد) که کوئری روی آنها اعمال می‌شود. بدنه‌های پشتیبانی‌شده عبارتند از user ، domain ، drive و allDrives . برای کارایی بیشتر user یا drive به allDrives ترجیح دهید. به‌طور پیش‌فرض، پیکره‌ها روی user تنظیم شده‌اند.

  • includeItemsFromAllDrives : آیا آیتم‌های My Drive و shared drive باید در نتایج گنجانده شوند یا خیر. اگر ارائه نشود یا روی false تنظیم شود، آیتم‌های shared drive برگردانده نمی‌شوند.

  • supportsAllDrives : آیا برنامه درخواست‌کننده از هر دو درایو My Drive و shared drive پشتیبانی می‌کند یا خیر. اگر مقدار false باشد، آیتم‌های درایو shared در پاسخ لحاظ نمی‌شوند.

حالت‌های پرس‌وجوی زیر مختص درایوهای اشتراکی هستند:

includeItemsFromAllDrives corpora شرح پرس و جو
true user فایل‌هایی را که کاربر به آنها دسترسی داشته است، از جمله فایل‌های درایو مشترک و My Drive، جستجو می‌کند.
true domain فایل‌هایی را که در دامنه به اشتراک گذاشته شده‌اند، از جمله فایل‌های درایو مشترک و فایل‌های My Drive، جستجو می‌کند.
true drive تمام موارد موجود در درایو مشترک مشخص شده را جستجو می‌کند. driveId باید در درخواست مشخص شود.
true allDrives فایل‌هایی که کاربر به آنها دسترسی داشته و تمام درایوهای اشتراکی که در آنها عضو است را جستجو می‌کند. توجه داشته باشید که پاسخ ممکن است شامل incompleteSearch:true که نشان می‌دهد برخی از مجموعه‌ها برای این درخواست جستجو نشده‌اند.

نمونه‌های کد زیر نحوه جستجوی فایل‌ها در همه درایوهای مشترک و همچنین درایو من (My Drive) را نشان می‌دهند:

پایتون

files = []
page_token = None
while True:
    response = drive_service.files().list(
        q="mimeType='application/vnd.google-apps.folder'",
        spaces='drive',
        corpora='allDrives',
        supportsAllDrives=True,
        includeItemsFromAllDrives=True,
        fields='nextPageToken, files(id, name)',
        pageToken=page_token
    ).execute()
    files.extend(response.get('files', []))
    page_token = response.get('nextPageToken', None)
    if not page_token:
        break

نود جی اس

let files = [];
let pageToken = null;
do {
  const response = await drive_service.files.list({
    q: "mimeType='application/vnd.google-apps.folder'",
    spaces: 'drive',
    corpora: 'allDrives',
    supportsAllDrives: true,
    includeItemsFromAllDrives: true,
    fields: 'nextPageToken, files(id, name)',
    pageToken: pageToken
  });
  files = files.concat(response.data.files);
  pageToken = response.data.nextPageToken;
} while (pageToken);

جاوا

List<File> files = new ArrayList<>();
String pageToken = null;
do {
  FileList result = driveService.files().list()
      .setQ("mimeType='application/vnd.google-apps.folder'")
      .setSpaces("drive")
      .setCorpora("allDrives")
      .setSupportsAllDrives(true)
      .setIncludeItemsFromAllDrives(true)
      .setFields("nextPageToken, files(id, name)")
      .setPageToken(pageToken)
      .execute();
  files.addAll(result.getFiles());
  pageToken = result.getNextPageToken();
} while (pageToken != null);

حلقه زدن

curl -X GET \
  'https://www.googleapis.com/drive/v3/files?corpora=allDrives&includeItemsFromAllDrives=true&supportsAllDrives=true&fields=nextPageToken%2Cfiles(id%2Cname)' \
  -H 'Authorization: Bearer ACCESS_TOKEN' \
  -H 'Accept: application/json'

ACCESS_TOKEN با توکن OAuth 2.0 برنامه خود جایگزین کنید.

پیگیری تغییرات در یک درایو مشترک

برای ردیابی تغییرات در یک درایو مشترک، از متد list در منبع changes استفاده کنید. برای اطلاعات بیشتر، به بخش ردیابی تغییرات برای کاربران و درایوهای مشترک مراجعه کنید.

متد list شامل پارامترهای کوئری مختص درایو زیر است:

  • driveId : درایو مشترکی که تغییرات از آن بازگردانده می‌شوند. در صورت مشخص شدن، شناسه‌های تغییر به تغییرات در موارد درون درایو مشترک اشاره دارند که وضعیت فعلی یک فایل را ارائه می‌دهند. برای اشاره به یک تغییر خاص در درایو مشترک، باید از شناسه درایو مشترک و شناسه تغییر به عنوان شناسه استفاده شود.

  • includeItemsFromAllDrives : مشخص می‌کند که آیا فایل‌ها یا تغییرات درایو اشتراکی باید در لیست تغییرات گنجانده شوند یا خیر.

  • supportsAllDrives : آیا برنامه درخواست‌کننده از درایوهای مشترک پشتیبانی می‌کند یا خیر. اگر مقدار آن نادرست باشد، آیتم‌های درایو مشترک، شامل درایوهای مشترک و فایل‌های درون یک درایو مشترک، بازگردانده نمی‌شوند.

حالت‌های پرس‌وجوی زیر مختص درایوهای اشتراکی هستند:

includeItemsFromAllDrives driveId شرح پرس و جو
true خیر تغییرات، منعکس‌کننده‌ی تغییرات در فایل‌های داخل یا خارج از درایوهای اشتراکی هستند که کاربر به آنها دسترسی داشته است، و همچنین تغییرات در درایوهای اشتراکی که کاربر عضو آنهاست.
true بله تغییرات، منعکس‌کننده‌ی تغییرات در درایو مشترک خاص مشخص‌شده و موارد درون آن درایو مشترک هستند.

نمونه‌های کد زیر نحوه‌ی ردیابی تغییرات در یک درایو مشترک را نشان می‌دهند:

پایتون

# 1. Get the start page token for the shared drive.
response = drive_service.changes().getStartPageToken(
    supportsAllDrives=True,
    driveId='SHARED_DRIVE_ID'
).execute()
start_page_token = response.get('startPageToken')

# 2. List changes starting from the page token.
response = drive_service.changes().list(
    pageToken=start_page_token,
    supportsAllDrives=True,
    includeItemsFromAllDrives=True,
    driveId='SHARED_DRIVE_ID'
).execute()
changes = response.get('changes', [])

نود جی اس

// 1. Get the start page token for the shared drive.
const tokenResponse = await drive_service.changes.getStartPageToken({
  supportsAllDrives: true,
  driveId: 'SHARED_DRIVE_ID'
});
const startPageToken = tokenResponse.data.startPageToken;

// 2. List changes starting from the page token.
const response = await drive_service.changes.list({
  pageToken: startPageToken,
  supportsAllDrives: true,
  includeItemsFromAllDrives: true,
  driveId: 'SHARED_DRIVE_ID'
});
const changes = response.data.changes;

جاوا

// 1. Get the start page token for the shared drive.
StartPageToken tokenResult = driveService.changes().getStartPageToken()
    .setSupportsAllDrives(true)
    .setDriveId("SHARED_DRIVE_ID")
    .execute();
String startPageToken = tokenResult.getStartPageToken();

// 2. List changes starting from the page token.
ChangeList changesResult = driveService.changes().list(startPageToken)
    .setSupportsAllDrives(true)
    .setIncludeItemsFromAllDrives(true)
    .setDriveId("SHARED_DRIVE_ID")
    .execute();
List<Change> changes = changesResult.getChanges();

حلقه زدن

# 1. Get the start page token for the shared drive.
curl -X GET \
  'https://www.googleapis.com/drive/v3/changes/startPageToken?supportsAllDrives=true&driveId=SHARED_DRIVE_ID' \
  -H 'Authorization: Bearer ACCESS_TOKEN' \
  -H 'Accept: application/json'

# 2. List changes starting from the page token.
curl -X GET \
  'https://www.googleapis.com/drive/v3/changes?pageToken=START_PAGE_TOKEN&supportsAllDrives=true&includeItemsFromAllDrives=true&driveId=SHARED_DRIVE_ID' \
  -H 'Authorization: Bearer ACCESS_TOKEN' \
  -H 'Accept: application/json'

موارد زیر را جایگزین کنید:

  • SHARED_DRIVE_ID : شناسه درایو مشترک.
  • ACCESS_TOKEN : توکن OAuth 2.0 برنامه شما.
  • START_PAGE_TOKEN : توکن صفحه شروع برای درایو اشتراکی.

به جای SHARED_DRIVE_ID ، شناسه درایو مشترک را وارد کنید.

پشتیبانی از درایو اشتراکی را در رابط کاربری Drive فعال کنید

برای دسترسی به محتوای درایو اشتراکی با استفاده از رابط کاربری درایو، مطمئن شوید که کادر پشتیبانی از درایوهای اشتراکی را در برگه ادغام رابط کاربری درایو از API گوگل درایو در کنسول گوگل کلود علامت زده‌اید. برای اطلاعات بیشتر، به پیکربندی ادغام رابط کاربری درایو مراجعه کنید.

از Google Picker با درایوهای اشتراکی استفاده کنید

ابزار انتخابگر گوگل (Google Picker) از انتخاب آیتم‌ها در درایوهای اشتراکی پشتیبانی می‌کند. برای جزئیات بیشتر در مورد فعال‌سازی پشتیبانی از درایو اشتراکی و افزودن نماهای درایوهای اشتراکی در انتخابگر، به API انتخابگر گوگل (Google Picker API) مراجعه کنید.