Projekty Apps Script znajdują się na Dysku Google, dlatego programiści mogą importować i eksportować kod źródłowy Apps Script za pomocą interfejsu Google Drive API (nie mylić z usługą Dysku w Apps Script).
Programistka może na przykład utworzyć nowy kod Apps Script na komputerze lokalnym za pomocą swojego ulubionego edytora kodu, a do współpracy z innymi deweloperami używać systemu kontroli wersji, takiego jak Git. Po sfinalizowaniu wersji może ona przesłać (zaimportować) pliki na Dysk Google za pomocą interfejsu API REST, skąd będzie można ich używać tak samo jak każdego innego projektu Apps Script.
Zmiany kodu 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 importować lub eksportować projekty za pomocą interfejsu Google Drive API, pamiętaj o tych kwestiach:
- Pliki skryptów po stronie serwera powinny mieć na końcu „.gs”. Możesz programować lokalnie, używając plików .js, ale przed zaimportowaniem plików na Dysk Google zmień ich nazwę, aby uwzględnić rozszerzenie .gs.
- Pliki skryptu po stronie klienta muszą kończyć się rozszerzeniem „.html”. Dotyczy to też plików .html, .js i .css po stronie klienta. Możesz także tworzyć treści lokalnie, korzystając z innych rozszerzeń, ale przed zaimportowaniem danych na Dysk Google ważne jest, aby mieć rozszerzenie .html.
- Gdy zaimportujesz pliki projektu na Dysk Google, wszystkie dane w tych plikach zostaną zastąpione. Nie można dołączyć ani wstawić częściowego tekstu. Cały plik musi zostać zaktualizowany.
- Pliki skryptów po stronie serwera muszą zawierać prawidłowy kod JavaScript. Jeśli pliki .js serwera zawierają błędy, wywołanie aktualizacji interfejsu Google Drive API zakończy się niepowodzeniem 5xx. Możesz temu zapobiec, lintując kod przed jego zaimportowaniem.
- Nie można zaimportować pustych plików. Wywołanie aktualizacji interfejsu Google Drive API zakończy się niepowodzeniem i wywołaniem błędu 5xx, jeśli spróbujesz przesłać pusty plik.
- Można importować i eksportować tylko samodzielne skrypty. Nie można uzyskać dostępu do skryptów powiązanych z kontenerem za pomocą interfejsu Google Drive API.
- Można importować i eksportować tylko kod źródłowy. Zasoby, takie jak właściwości i logi projektu, również nie są udostępniane przez interfejs Google Drive API. Działania, takie jak obsługa wersji skryptów, publikowanie lub 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 programowanie, możesz rozłożyć kod serwera na kilka plików. Wszystkie pliki serwera są wczytywane w tej samej globalnej przestrzeni nazw, dlatego jeśli chcesz zapewnić ich bezpieczne zamknięcie, używaj klas JavaScript.
Drive API
Interfejs Google Drive API pozwala programistom na programowy dostęp do plików na Dysku Google. Ten interfejs API używa metody GET
do pobierania plików i PUT/POST
do przesyłania plików. Na stronie z omówieniem interfejsu Google Drive API znajdziesz szczegółową dokumentację i krótkie wprowadzenia.
W tym przewodniku skupimy się na wyświetlaniu listy i przenoszeniu plików za pomocą zasobu Pliki przy użyciu tych wywołań:
Upoważnienie
Wszystkie żądania wysyłane do interfejsu Google Drive API muszą być autoryzowane przez użytkownika przy użyciu 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 (na przykład 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świetlenie listy istniejących projektów
Aby wyświetlić wszystkie projekty Apps Script na Dysku, użyj zasobu Pliki, aby wyszukać pliki z typem MIME application/vnd.google-apps.script
.
Aby w odpowiedzi uwzględnić tylko pliki należące do Ciebie, dodaj parametr wyszukiwania 'me' in owners
.
Oto przykładowe żądanie i odpowiedź, które wyświetlają tablicę projektów Apps Script zwracanych 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, używając tego wywołania interfejsu API:
GET https://www.googleapis.com/drive/v2/files/1234567890abcefghijklmnopqrstuvwxyz
Authorization: Bearer ya29.fakebearerstring
Eksportowanie projektów z Dysku
Gdy pobierzesz z interfejsu API zasób File
, właściwość exportLinks
będzie zawierać adres URL do pobrania zawartości projektu w postaci danych JSON. Oto przykładowy adres URL:
https://script.google.com/feeds/download/export?id=1234567890abcefghijklmnopqrstuvwxyz&format=json
Wyślij żądanie na ten adres URL, aby pobrać zawartość samego projektu.
Pamiętaj, aby dołączyć 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. Zauważ, że zwracasz tablicę typu Files
, z których każda ma 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 rozszerzeń wyświetlana w edytorze skryptów. |
type |
Dostępne są 2 typy plików:server_js i html. |
source |
Zakodowany kod źródłowy w pliku. |
Importuj projekty na Dysk
Aby zaktualizować istniejący projekt, wykonaj wywołanie HTTP PUT
do pliku update
API z odpowiednim fileId
.
Przykład poniżej pokazuje przykładową transakcję dotyczącą części przesyłania multimediów. Korzystając z jednej z bibliotek klienta, aplikacja może łatwo dołączyć metadane i multimedia w tym samym wywołaniu przesyłania. Pamiętaj, że nagłówek Content-Type
określa typ treści, które przesyłasz w tym przypadku.
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 żądanie PUT
dotyczące pliku bez właściwości id
. Jeśli dołączysz plik o nieznanym identyfikatorze, system zgłosi 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 obejmuje wszystkie inne pliki w projekcie). Wszystkie pliki, które nie zostaną odesłane podczas importu, zostaną usunięte z serwera.
Zmienianie nazw plików w projekcie
Aby zmienić nazwę pliku w projekcie, wyślij żądanie PUT
z istniejącymi elementami id
, ale nowymi name
. Pamiętaj, że serwer ignoruje wszystkie próby zmiany na type
.
Utwórz nowy projekt
Aby utworzyć nowy projekt, wyślij żądanie POST
do pliku insert
API. Podobnie jak w przypadku wywołania update
, za pomocą biblioteki klienta możesz dołączyć metadane, takie jak nazwa i opis projektu.
Oto przykładowa transakcja dotycząca przesłania multimediów. Spowoduje to utworzenie na Dysku projektu
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" } ] }