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.
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.
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