Projekty Apps Script znajdują się na Dysku Google, więc programiści mogą importować i eksportować kod źródłowy Apps Script za pomocą interfejsu Google Drive API (nie należy go mylić z usługą Dysku w Apps Script).
Programista może na przykład tworzyć nowy kod Apps Script na swoim komputerze lokalnym w ulubionym edytorze kodu i korzystać z systemu kontroli wersji, takiego jak Git, aby współpracować z innymi programistami. Gdy wersja zostanie ukończona, może przesłać (zaimportować) pliki na Dysk Google za pomocą interfejsu REST API, gdzie można ich używać jak w przypadku każdego innego projektu Apps Script.
Zmiany w kodzie można wprowadzać w wersjach lokalnych i synchronizować z projektem Apps Script za pomocą interfejsu Google Drive API. Istniejące projekty można pobrać (wyeksportować) 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ć skrypty lokalnie, używając plików .js, ale przed zaimportowaniem ich na Dysk Google zmień nazwę, aby zawierała rozszerzenie .gs.
- Pliki skryptów po stronie klienta muszą kończyć się rozszerzeniem „.html”. Obejmuje to pliki .html, .js i .css po stronie klienta. Możesz też tworzyć lokalnie za pomocą innych rozszerzeń, ale przed zaimportowaniem do Dysku Google ważne jest, aby mieć rozszerzenie .html.
- Gdy zaimportujesz pliki projektu na Dysk Google, wszystkie dotychczasowe dane w tych plikach zostaną zastąpione. Nie możesz dołączać ani wstawiać części tekstu. Musisz zaktualizować cały plik.
- Pliki skryptów po stronie serwera muszą zawierać prawidłowy kod JavaScript. Jeśli w plikach .js serwera występują błędy, wywołanie aktualizacji interfejsu Google Drive API zakończy się niepowodzeniem i zostanie zwrócony błąd 5xx. Możesz temu zapobiec, sprawdzając kod przed zaimportowaniem.
- Nie można importować pustych plików. Wywołanie aktualizacji interfejsu Google Drive API zakończy się niepowodzeniem i zwróci błąd 5xx, jeśli spróbujesz przesłać pusty plik.
- Importować i eksportować można tylko skrypty autonomiczne. Do skryptów powiązanych z kontenerem nie można uzyskać dostępu za pomocą interfejsu Google Drive API.
- Importować i eksportować można tylko kod źródłowy. Zasoby takie jak właściwości projektu czy logi nie są też udostępniane przez interfejs Google Drive API. Czynności takie jak przechowywanie wersji skryptu, publikowanie czy wykonywanie skryptu nie są możliwe za pomocą interfejsu Google Drive API.
- Nie musisz ograniczać się do jednego pliku
Code.gs
serwera. Aby ułatwić sobie pracę, możesz rozdzielić kod serwera na kilka plików. Wszystkie pliki serwera są ładowane do tej samej globalnej przestrzeni nazw, więc jeśli chcesz zapewnić bezpieczne hermetyzowanie, używaj klas JavaScript.
Drive API
Interfejs Google Drive API umożliwia programistom programowy dostęp do plików na Dysku Google. Ten interfejs API używa funkcji GET
do pobierania plików i PUT/POST
do przesyłania plików. Szczegółową dokumentację i szybki start znajdziesz na stronie Omówienie interfejsu Google Drive API.
W tym przewodniku skupimy się na wyświetlaniu i przenoszeniu plików za pomocą zasobu Files przy użyciu tych wywołań:
Autoryzacja
Wszystkie żądania wysyłane do interfejsu Google Drive API muszą być autoryzowane przez 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 potrzebować aplikacja (np. https://www.googleapis.com/auth/drive
), wszystkie aplikacje próbujące importować lub eksportować projekty Google Apps Script muszą żądać specjalnego zakresu:
https://www.googleapis.com/auth/drive.scripts
Wyświetlanie listy istniejących projektów
Aby wyświetlić listę wszystkich projektów Apps Script na Dysku, użyj zasobu Files
do wyszukiwania plików o typie MIME application/vnd.google-apps.script
.
Aby odfiltrować odpowiedź tak, aby zawierała tylko pliki, których jesteś właścicielem, uwzględnij parametr wyszukiwania 'me' in owners
.
Oto przykładowe żądanie i odpowiedź, które pokazują tablicę projektów Apps Script zwróconych w 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ład, jak może wyglądać ten adres URL:
https://script.google.com/feeds/download/export?id=1234567890abcefghijklmnopqrstuvwxyz&format=json
Wyślij żądanie na ten adres URL, aby pobrać zawartość projektu.
Upewnij się, że dołączasz 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" } ] }
Powyższy przykład zawiera kod prostej aplikacji internetowej z przewodnika po usłudze HTML. Pamiętaj, że otrzymasz tablicę Files
, z której każdy element ma te 4 właściwości:
id |
Wewnętrzny identyfikator pliku w projekcie, potrzebny do odwoływania się do tego pliku podczas aktualizacji. |
name |
Nazwa pliku bez rozszerzenia wyświetlana w edytorze skryptów. |
type |
Są to pliki 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 fileId
.
Poniższy przykład pokazuje przykładową transakcję dotyczącą części przesyłania multimediów. Korzystając z jednej z bibliotek klienta, Twoja aplikacja może łatwo uwzględnić metadane i multimedia w tym samym wywołaniu przesyłania. Pamiętaj, że nagłówek Content-Type
określa typ przesyłanych w tym przypadku 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 projekcie, wyślij PUT
prośbę o plik bez właściwości id
. Jeśli dołączysz plik z nieznanym identyfikatorem, system wyświetli komunikat o błędzie.
Usuwanie plików w projekcie
Aby usunąć plik z projektu, wyślij żądanie PUT
, które nie zawiera tego pliku (ale zawiera wszystkie inne pliki w projekcie). Każdy plik, który nie zostanie odesłany podczas procesu importowania, zostanie usunięty z serwera.
Zmienianie nazw plików w projekcie
Aby zmienić nazwę pliku w projekcie, wyślij 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 żądanie POST
do interfejsu API pliku
insert
. 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ładowa transakcja przesyłania multimediów. Spowoduje to utworzenie na Dysku projektu o nazwie „Bez tytułu”. W adresie URL wymagany jest parametr convert
.
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" } ] }