Migracja interfejsu Google Drive API v3

Zdecydowałem się na migrację z Google Drive API v2 do v3 i nie było to łatwe zadanie. Nawet myślałem, że Google napisał tę dokumentację , jest w niej wiele luk i nie ma zbyt wielu informacji na ten temat w Internecie.

Dzielę się tym, co znalazłem.

Author: IvanRF, 2016-02-02

1 answers

Najpierw Przeczytaj oficjalne dokumenty: Migrate to Google Drive API v3


Pobierz

Download został zmieniony. Pole downloadUrl już nie istnieje. Teraz Można to osiągnąć za pomocą tego:

service.files().get(fileId).executeMediaAndDownloadTo(outputStream);

Wypróbowałem nowe pole webContentLink, ale zwraca ono zawartość HTML, zamiast zawartości pliku. Innymi słowy, daje link do interfejsu WWW dysku.


Upload

Upload wymaga tylko zmiany słowa insert na create, nic więcej.


Trash / Update

Zmarnowałem trochę czasu z tym . Kiedyś było proste service.files().trash(fileId).execute(). Docs say

Pliki.trash - > pliki.update with {'trashed': true}

Przykładowy kod dla update W v2 tworzy get na pliku, ustawia nowe wartości, a następnie wywołuje update.

Na v3, użycie update w ten sposób rzuca ten wyjątek:

{
  "code" : 403,
  "errors" : [ {
    "domain" : "global",
    "message" : "The resource body includes fields which are not directly writable.",
    "reason" : "fieldNotWritable"
  } ],
  "message" : "The resource body includes fields which are not directly writable."
}

Rozwiązaniem jest utworzenie pustego File ustawiając tylko nowy wartości:

File newContent = new File();
newContent.setTrashed(true);
service.files().update(fileId, newContent).execute();

Uwaga: File odnosi się do com.google.api.services.drive.model.File (nie jest to java.io.File).


Lista

Pliki zwracane przez service.files().list() nie zawierają teraz informacji, tzn. każde pole ma wartość null. Jeśli chcesz, aby list na v3 zachowywał się jak w v2, nazwij to tak:

service.files().list().setFields("nextPageToken, files");

Docs on Search for Files use setFields("nextPageToken, files(id, name)") but there is no documentation on how to get all the info for a file. Teraz wiesz, po prostu dołącz "pliki".


Pola

Pełne zasoby nie są już domyślnie zwracane. Użyj parametru fields query, aby zażądać zwrócenia określonych pól. Jeśli pozostawiono nieokreślony, zwracany jest tylko podzbiór powszechnie używanych pól.

Ta ostatnia część nie jest do końca prawdziwa, ponieważ w niektórych przypadkach jesteś zmuszony do użycia setFields. Na przykład, jeśli użyjesz service.about().get().execute(), otrzymasz ten błąd:

"The 'fields' parameter is required for this method."

, który jest rozwiązany przez wywołanie service.about().get().setFields("user, storageQuota").execute(), na przykład.

Na końcu docs jest wymieniony jako:

Parametr zapytania fields powinien być określony dla metod, które zwracają


Aby uzyskać resztę zmian, postępuj zgodnie z tabelą Google w dokumentach.

 37
Author: IvanRF,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-09-24 19:51:41