Wdrażanie obsługi dysków współdzielonych

Z tego dokumentu dowiesz się, jak zaimplementować obsługę dysków współdzielonych w aplikacji za pomocą interfejsu Google Drive API.

Dyski współdzielone mają inne modele organizacji, udostępniania i własności niż Mój dysk. Jeśli Twoja aplikacja ma tworzyć pliki na dyskach współdzielonych i nimi zarządzać, musisz zaimplementować w niej obsługę dysków współdzielonych. Złożoność implementacji zależy od funkcjonalności aplikacji.

Na początek musisz dodać parametr zapytania supportsAllDrives=true do żądań, gdy aplikacja wykonuje te operacje:

Drive API v3

  • 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

Drive API v2

  • 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

Parametr supportsAllDrives=true informuje Dysk Google, że Twoja aplikacja jest przeznaczona do obsługi plików na dyskach współdzielonych.

Aplikacje, które odczytują lub modyfikują uprawnienia, śledzą zmiany lub wyszukują w wielu korpusach, wymagają dodatkowych funkcji dysku współdzielonego. W dalszej części tego dokumentu opisujemy dodatkowe zmiany wymagane do wykonania tych zadań.

Wyszukiwanie treści na dysku współdzielonym

Aby znaleźć pliki użytkownika na dyskach współdzielonych, użyj metody list w zasobie files. Aby wyszukać dysk współdzielony, przeczytaj artykuł Wyszukiwanie dysków współdzielonych.

Metoda list zawiera te parametry zapytania dotyczące dysków współdzielonych:

  • driveId: identyfikator dysku współdzielonego, na którym ma być prowadzone wyszukiwanie.

  • corpora: korpusy elementów (plików lub dokumentów), do których odnosi się zapytanie. Obsługiwane korpusy to user, domain, drive i allDrives. Aby zwiększyć wydajność, używaj user lub drive zamiast allDrives. Domyślnie korpusy są ustawione na user.

  • includeItemsFromAllDrives: czy w wynikach mają być uwzględniane elementy z Mojego dysku i dysków współdzielonych. Jeśli ten parametr nie jest obecny lub ma wartość false, elementy z dysków współdzielonych nie są zwracane.

  • supportsAllDrives: czy aplikacja wysyłająca żądanie obsługuje Mój dysk i dyski współdzielone. Jeśli wartość to false, elementy z dysków współdzielonych nie są uwzględniane w odpowiedzi.

Te tryby zapytań są specyficzne dla dysków współdzielonych:

includeItemsFromAllDrives corpora Opis zapytania
true user Wyszukuje pliki, do których użytkownik miał dostęp, w tym pliki z dysków współdzielonych i Mojego dysku.
true domain Wyszukuje pliki udostępnione w domenie, w tym pliki z dysków współdzielonych i Mojego dysku.
true drive Wyszukuje wszystkie elementy na określonym dysku współdzielonym. W żądaniu musi być określony parametr driveId.
true allDrives Wyszukuje pliki, do których użytkownik miał dostęp, oraz wszystkie dyski współdzielone, których jest członkiem. Pamiętaj, że odpowiedź może zawierać incompleteSearch:true, co oznacza, że niektóre korpusy nie zostały przeszukane w ramach tego żądania.

Te przykłady kodu pokazują, jak wyszukiwać pliki na wszystkich dyskach współdzielonych oraz na Moim dysku:

Python

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

Node.js

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

Java

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

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'

Zastąp ACCESS_TOKEN tokenem OAuth 2.0 swojej aplikacji.

Śledzenie zmian na dysku współdzielonym

Aby śledzić zmiany na dysku współdzielonym, użyj metody list w zasobie changes. Więcej informacji znajdziesz w artykule Śledzenie zmian użytkowników i dysków współdzielonych.

Metoda list zawiera te parametry zapytania dotyczące dysków współdzielonych:

  • driveId: dysk współdzielony, z którego mają być zwracane zmiany. Jeśli ten parametr jest określony, identyfikatory zmian odnoszą się do zmian elementów na dysku współdzielonym, które przedstawiają bieżący stan pliku. Aby odwołać się do konkretnej zmiany na dysku współdzielonym, musisz użyć zarówno identyfikatora dysku współdzielonego, jak i identyfikatora zmiany.

  • includeItemsFromAllDrives: czy w liście zmian mają być uwzględniane pliki lub zmiany na dysku współdzielonym.

  • supportsAllDrives: czy aplikacja wysyłająca żądanie obsługuje dyski współdzielone. Jeśli wartość to false, elementy z dysków współdzielonych, w tym dyski współdzielone i pliki na dyskach współdzielonych, nie są zwracane.

Te tryby zapytań są specyficzne dla dysków współdzielonych:

includeItemsFromAllDrives driveId Opis zapytania
true Nie Zmiany odzwierciedlają zmiany plików wewnątrz i na zewnątrz dysków współdzielonych, do których użytkownik miał dostęp, oraz zmiany na dyskach współdzielonych, których użytkownik jest członkiem.
true Tak Zmiany odzwierciedlają zmiany na określonym dysku współdzielonym i elementach na tym dysku.

Te przykłady kodu pokazują, jak śledzić zmiany na dysku współdzielonym:

Python

# 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', [])

Node.js

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

Java

// 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();

curl

# 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'

Zastąp te elementy:

  • SHARED_DRIVE_ID: identyfikator dysku współdzielonego.
  • ACCESS_TOKEN: token OAuth 2.0 Twojej aplikacji.
  • START_PAGE_TOKEN: token strony startowej dysku współdzielonego.

Zastąp SHARED_DRIVE_ID identyfikatorem dysku współdzielonego.

Włączanie obsługi dysków współdzielonych w interfejsie Dysku

Aby uzyskać dostęp do treści dysku współdzielonego za pomocą interfejsu Dysku, upewnij się, że na karcie Integracja z interfejsem Dysku w interfejsie Google Drive API w konsoli Google Cloud masz zaznaczone pole Obsługa dysków współdzielonych. Więcej informacji znajdziesz w artykule Konfigurowanie integracji z interfejsem Dysku.

Używanie selektora Google z dyskami współdzielonymi

Selektor Google obsługuje wybieranie elementów na dyskach współdzielonych. Szczegółowe informacje o włączaniu obsługi dysków współdzielonych i dodawaniu widoków dysków współdzielonych w selektorze znajdziesz w artykule Interfejs Google Picker API.