Ponieważ projekty Apps Script znajdują się w Google Dysku, deweloperzy mogą importować i eksportować kod źródłowy Apps Script za pomocą interfejsu Google Drive API (nie należy go mylić z usługą Drive w Apps Script).
Na przykład programista może tworzyć nowy kod Apps Script na swoim komputerze za pomocą ulubionego edytora kodu i używać systemu kontroli wersji, takiego jak Git, do współpracy z innymi programistami. Gdy wersja zostanie sfinalizowana, możesz przesłać (importować) pliki na Dysk Google za pomocą interfejsu API REST, gdzie można ich używać jak każdego innego projektu Apps Script.
Zmiany kodu można wprowadzać w wersjach lokalnych i synchronizować je z projektem Apps Script za pomocą interfejsu Google Drive API. Istniejące projekty można pobrać (eksportować) z Dysku Google na komputer lokalny.
Funkcje i ograniczenia
Jeśli chcesz używać interfejsu Google Drive API do importowania lub eksportowania projektów, pamiętaj o tych kwestiach:
- Pliki skryptu po stronie serwera powinny kończyć się na „.gs”. Możesz tworzyć pliki na komputerze lokalnym przy użyciu plików .js, ale przed importowaniem na Dysk Google zmień ich nazwy, aby zawierały rozszerzenie .gs.
- Pliki skryptów po stronie klienta muszą kończyć się rozszerzeniem „.html”. Dotyczy to plików po stronie klienta .html, .js lub .css. Podobnie jak w przypadku innych rozszerzeń, możesz tworzyć aplikacje lokalnie, ale ważne jest, aby przed zaimportowaniem ich na Dysk Google miały rozszerzenie .html.
- Gdy importujesz pliki projektu na Dysk Google, wszystkie istniejące dane w tych plikach zostaną zastąpione. Nie możesz dołączać ani wstawiać częściowego tekstu. Musisz zaktualizować cały plik.
- Pliki skryptów po stronie serwera muszą zawierać prawidłowy kod JavaScript. Jeśli w plikach .js na serwerze występują błędy, wywołanie aktualizacji interfejsu Google Drive API zakończy się błędem 5xx. Możesz temu zapobiec, wykonując linting kodu przed importowaniem.
- Puste pliki nie mogą być importowane. Jeśli spróbujesz przesłać pusty plik, wywołanie interfejsu API Dysku Google zakończy się błędem 5xx.
- Tylko samodzielne skrypty można importować i eksportować. Skrypty powiązane z kontenerem nie są dostępne za pomocą interfejsu Dysk Google API.
- Tylko kod źródłowy można importować i eksportować. Zasoby takie jak właściwości projektu czy logi nie są też dostępne za pomocą interfejsu Dysk Google API. Za pomocą interfejsu Google Drive API nie można wykonywać takich czynności jak publikowanie czy uruchamianie skryptu.
- Nie musisz ograniczać się do pliku
Code.gs
na jednym serwerze. Aby ułatwić sobie tworzenie, możesz rozmieścić kod serwera w kilku plikach. Wszystkie pliki serwera są ładowane do tej samej globalnej przestrzeni nazw, dlatego używaj klas JavaScript, gdy chcesz zapewnić bezpieczne stosowanie enkapsulacji.
Drive API
Interfejs Drive API umożliwia programistom dostęp do plików na Dysku Google w ramach programowania. Ten interfejs API używa GET
do pobierania plików i PUT/POST
do przesyłania plików. Szczegółową dokumentację i samouczki znajdziesz na stronie z omówieniem interfejsu Google Drive API.
W tym przewodniku skupimy się na wyświetlaniu i przenoszeniu plików za pomocą zasobu Files za pomocą tych wywołań:
Autoryzacja
Wszystkie żądania wysyłane do interfejsu Dysk Google API muszą być autoryzowane przez uwierzytelnionego użytkownika za pomocą protokołu OAuth 2.0. Więcej informacji znajdziesz w dokumentacji autoryzacji interfejsu Google Drive API.
Oprócz innych zakresów, których może wymagać aplikacja (np. https://www.googleapis.com/auth/drive
), wszystkie aplikacje próbujące importować lub eksportować projekty Google Apps Script muszą poprosić o specjalny zakres:
https://www.googleapis.com/auth/drive.scripts
Lista istniejących projektów
Aby wyświetlić listę wszystkich projektów Apps Script na Dysku, użyj zasobu Pliki do wyszukiwania plików o typie MIME application/vnd.google-apps.script
.
Aby odfiltrować odpowiedzi tak, aby obejmowały tylko Twoje pliki, dodaj parametr wyszukiwania 'me' in owners
.
Oto przykładowe żądanie i odpowiedź, które pokazują tablicę projektów Apps Script zwróconą w formie odpowiedzi JSON.
GET https://www.googleapis.com/drive/v2/files?q=mimeType%3D'application%2Fvnd.google-apps.script'+and+'me'+in+owners Authorization: Bearer ya29.fakebearerstring
{ "kind": "drive#fileList", "etag": "\"kjsas92/f3zGUXczKMxEB_9ZTMRFOF3d1ZU\"", "selfLink": "https://www.googleapis.com/drive/v2/files?q=mimeType%3D'application/vnd.google-apps.script'+and+'me'+in+owners", "items": [ { "kind": "drive#file", "id": "1vi0uwcMdHsRv1YFtgq7XdiTGSdqgjIYpdQNC0A_Udn79LOhH0vYL132D", "etag": "\"kjsas92/MTM3MDk3ODY5ODQyNg\"", "selfLink": "https://www.googleapis.com/drive/v2/files/1vi0uwcMdHsRv1YFtgq7XdiTGSdqgjIYpdQNC0A_Udn79LOhH0vYL132D", "alternateLink": "https://script.google.com/a/google.com/d/1vi0uwcMdHsRv1YFtgq7XdiTGSdqgjIYpdQNC0A_Udn79LOhH0vYL132D/edit?usp=drivesdk", "iconLink": "https://ssl.gstatic.com/docs/doclist/images/icon_11_script_list.png", "title": "Mail merge", "mimeType": "application/vnd.google-apps.script", "description": "", "labels": { "starred": false, "hidden": false, "trashed": true, "restricted": false, "viewed": true }, "createdDate": "2013-06-11T19:24:45.188Z", "modifiedDate": "2013-06-11T19:24:58.426Z", "modifiedByMeDate": "2013-06-11T19:24:58.426Z", "lastViewedByMeDate": "2013-06-11T19:24:58.426Z", "parents": [ { "kind": "drive#parentReference", "id": "0APdyIOzo7bWDUk9PVA", "selfLink": "https://www.googleapis.com/drive/v2/files/1vi0uwcMdHsRv1YFtgq7XdiTGSdqgjIYpdQNC0A_Udn79LOhH0vYL132D/parents/0APdyIOzo7bWDUk9PVA", "parentLink": "https://www.googleapis.com/drive/v2/files/0APdyIOzo7bWDUk9PVA", "isRoot": true } ], "exportLinks": { "application/json": "https://script.google.com/feeds/download/export?id=1234567890abcefghijklmnopqrstuvwxyz&format=json" }, "userPermission": { "kind": "drive#permission", "etag": "\"kjsas92/259X2r5DVstv1CcIQTjt_RQPSW8\"", "id": "me", "selfLink": "https://www.googleapis.com/drive/v2/files/1vi0uwcMdHsRv1YFtgq7XdiTGSdqgjIYpdQNC0A_Udn79LOhH0vYL132D/permissions/me", "role": "owner", "type": "user" }, "quotaBytesUsed": "0", "ownerNames": [ "John Doe" ], "owners": [ { "kind": "drive#user", "displayName": "John Doe", "picture": { "url": "https://lh4.googleusercontent.com/-yd1rIb6Pe2Y/AAAAAAAAAAI/AAAAAAAAAGs/PP5vTuZonik/s64/photo.jpg" }, "isAuthenticatedUser": true, "permissionId": "1234566789" } ], "lastModifyingUserName": "John Doe", "lastModifyingUser": { "kind": "drive#user", "displayName": "John Doe", "picture": { "url": "https://lh4.googleusercontent.com/-yd1rIb6Pe2Y/AAAAAAAAAAI/AAAAAAAAAGs/PP5vTuZonik/s64/photo.jpg" }, "isAuthenticatedUser": true, "permissionId": "1234566789" }, "editable": true, "writersCanShare": true, "shared": false, "explicitlyTrashed": true, "appDataContents": false } ] }
Jeśli znasz identyfikator pliku projektu Apps Script, możesz go pobrać bezpośrednio za pomocą tego wywołania interfejsu API:
GET https://www.googleapis.com/drive/v2/files/1234567890abcefghijklmnopqrstuvwxyz
Authorization: Bearer ya29.fakebearerstring
Eksportowanie projektów z Dysku
Gdy otrzymasz z interfejsu API zasób File
, właściwość exportLinks
będzie zawierać adres URL, z którego możesz pobrać zawartość projektu w postaci danych JSON. Oto przykładowy adres URL:
https://script.google.com/feeds/download/export?id=1234567890abcefghijklmnopqrstuvwxyz&format=json
Prześlij żądanie do tego adresu URL, aby pobrać zawartość projektu.
Upewnij się, że zawierasz nagłówek Authorization
z tym samym tokenem OAuth Bearer
.
Oto przykładowe żądanie i odpowiedź:
GET https://script.google.com/feeds/download/export?id=1234567890abcefghijklmnopqrstuvwxyz&format=json Authorization: Bearer ya29.fakebearerstring
{ "files": [ { "id":"9basdfbd-749a-4as9b-b9d1-d64basdf803", "name":"Code", "type":"server_js", "source":"function doGet() {\n return HtmlService.createHtmlOutputFromFile(\u0027index\u0027);\n}\n" }, { "id":"3asf7c0d-1afb-4a9-8431-5asdfc79e7ae", "name":"index", "type":"html", "source":"\u003chtml\u003e\n \u003cbody\u003e\n Hello, world!\n \u003c/body\u003e\n\u003c/html\u003e" } ] }
Przykład powyżej zawiera kod prostej aplikacji internetowej z przewodnika HTMLService. Zwróć uwagę, że zwracany jest tablica Files
, w której każdy element ma 4 właściwości:
id |
Wewnętrzny identyfikator pliku w projekcie, potrzebny do odniesienia do tego pliku podczas aktualizacji. |
name |
Nazwa pliku bez rozszerzeń, jaką widzisz w Edytorze skryptów. |
type |
Są to pliki o typach server_js i html. |
source |
zakodowany kod źródłowy zawarty w pliku; |
Importowanie projektów na Dysk
Aby zaktualizować istniejący projekt, wyślij wywołanie HTTP PUT
do interfejsu API pliku update
z odpowiednim parametrem fileId
.
Przykład poniżej pokazuje transakcję dotyczącą przesyłania multimediów. Za pomocą jednej z bibliotek klienta aplikacja może łatwo uwzględnić metadane i multimedia w tym samym wywołaniu przesyłania. Pamiętaj, że w tym przypadku nagłówek Content-Type
określa typ przesłanych treści.
PUT https://www.googleapis.com/upload/drive/v2/files/1234567890abcefghijklmnopqrstuvwxyz Authorization: Bearer ya29.fakebearerestring Content-Type: application/vnd.google-apps.script+json
{ "files": [ { "id":"9basdfbd-749a-4as9b-b9d1-d64basdf803", "name":"Code", "type":"server_js", "source":"function doGet() {\n return HtmlService.createHtmlOutputFromFile(\u0027index\u0027);\n}\n" }, { "id":"3asf7c0d-1afb-4a9-8431-5asdfc79e7ae", "name":"index", "type":"html", "source":"\u003chtml\u003e\n \u003cbody\u003e\n New message!!\n \u003c/body\u003e\n\u003c/html\u003e" } ] }
Tworzenie nowych plików w projekcie
Aby utworzyć nowy plik w ramach projektu, wyślij żądanie PUT
dotyczące pliku bez właściwości id
. Jeśli dodasz plik z nieznanym identyfikatorem, system wyświetli komunikat o błędzie.
Usuwanie plików w projekcie
Aby usunąć plik z projektu, wyślij prośbę PUT
, która nie zawiera tego pliku (ale zawiera wszystkie inne pliki w projekcie). Plik, który nie zostanie wysłany z powrotem podczas procesu importowania, zostanie usunięty z serwera.
Zmienianie nazwy plików w projekcie
Aby zmienić nazwę pliku w projekcie, wyślij prośbę PUT
z dotychczasowym id
, ale nowym name
. Pamiętaj, że serwer ignoruje wszelkie próby zmiany na type
.
Utwórz nowy projekt
Aby utworzyć nowy projekt, wyślij do interfejsu POST
żądanie dotyczące pliku w interfejsie insert
API. Podobnie jak w przypadku wywołania update
możesz użyć biblioteki klienta, aby uwzględnić metadane, takie jak nazwa i opis projektu.
Oto przykład przesyłania multimediów. Na Dysku zostanie utworzony projekt o nazwie „Bez tytułu”. Parametr convert
w adresie URL jest wymagany.
Podobnie jak w przypadku wywołania update
, wymagany jest nagłówek Content-Type
.
POST https://www.googleapis.com/upload/drive/v2/files?convert=true Authorization: Bearer ya29.fakebearerestring Content-Type: application/vnd.google-apps.script+json
{ "files": [ { "name":"Code", "type":"server_js", "source":"function doGet() {\n return HtmlService.createHtmlOutputFromFile(\u0027index\u0027);\n}\n" }, { "name":"index", "type":"html", "source":"\u003chtml\u003e\n \u003cbody\u003e\n Hello, world!!\n \u003c/body\u003e\n\u003c/html\u003e" } ] }