Poiché i progetti Google Apps Script risiedono su Google Drive, gli sviluppatori possono importare ed esportare il codice sorgente di Apps Script utilizzando l' API Google Drive (da non confondere con il servizio Drive in Apps Script).
Ad esempio, uno sviluppatore può creare nuovo codice Apps Script sulla propria macchina locale con il suo editor di codice preferito e utilizzare un sistema di controllo delle versioni come Git per collaborare con altri sviluppatori. Una volta finalizzata una versione, può caricare (importare) i file su Google Drive utilizzando l'API REST, dove possono essere utilizzati come qualsiasi altro progetto Apps Script.
Le modifiche al codice possono essere apportate alle versioni locali e sincronizzate con il progetto Apps Script utilizzando l'API Google Drive. I progetti esistenti possono essere scaricati (esportati) da Google Drive su una macchina locale.
Funzionalità e limitazioni
Se vuoi utilizzare l'API Google Drive per importare o esportare progetti, tieni presente quanto segue:
- I file di script lato server devono terminare con ".gs". Potresti voler sviluppare localmente utilizzando file .js, ma assicurati di rinominarli in modo da includere un'estensione .gs prima di importarli in Google Drive.
- I file di script lato client devono terminare con ".html". Sono inclusi i file .html, .js o .css lato client. Anche in questo caso, puoi sviluppare localmente utilizzando altre estensioni, ma è importante avere l'estensione .html prima di importare in Google Drive.
- Quando importi i file di progetto in Google Drive, tutti i dati esistenti in questi file verranno sovrascritti. Non puoi aggiungere o inserire testo parziale; l'intero file deve essere aggiornato.
- I file di script lato server devono contenere JavaScript valido. Se nei file .js del server sono presenti errori, la chiamata di aggiornamento dell'API Google Drive non andrà a buon fine e verrà restituito un errore 5xx. Puoi evitare questo problema eseguendo l'analisi tramite lint del codice prima dell'importazione.
- Non è possibile importare file vuoti. La chiamata di aggiornamento dell'API Google Drive non andrà a buon fine e verrà restituito un errore 5xx se provi a caricare un file vuoto.
- È possibile importare o esportare solo script autonomi. Non è possibile accedere agli script associati a container tramite l'API Google Drive.
- È possibile importare o esportare solo il codice sorgente. Anche le risorse come le proprietà o i log del progetto non sono esposte dall'API Google Drive. Non è possibile eseguire azioni come il controllo delle versioni, la pubblicazione o l'esecuzione dello script utilizzando l'API Google Drive.
- Non sei limitato a un singolo file server
Code.gs. Puoi distribuire il codice del server su più file per semplificare lo sviluppo. Tutti i file del server vengono caricati nello stesso spazio dei nomi globale, quindi utilizza le classi JavaScript quando vuoi fornire un'incapsulamento sicuro.
API Drive
L'API Google Drive consente agli sviluppatori di accedere ai file in Google Drive a livello di programmazione. Questa API utilizza GET per scaricare i file e PUT/POST per caricare i file. Per la documentazione dettagliata e le guide rapide, consulta la pagina Panoramica dell'API Google Drive per.
Questa guida è incentrata sull'elenco e sullo spostamento dei file con la risorsa Files utilizzando queste chiamate:
Autorizzazione
Tutte le richieste all'API Google Drive devono essere autorizzate da un utente autenticato tramite il protocollo OAuth 2.0. Per maggiori dettagli, consulta la documentazione sull'autorizzazione dell'API Google Drive.
Oltre ad altri ambiti di cui un'applicazione potrebbe aver bisogno
(ad esempio https://www.googleapis.com/auth/drive), tutte le applicazioni che tentano
di importare o esportare progetti Google Apps Script devono richiedere l'ambito speciale:
https://www.googleapis.com/auth/drive.scripts
Per testare le seguenti richieste di esempio, utilizza un token di accesso OAuth 2.0 ottenuto da OAuth 2.0 Playground.
Elenca i progetti esistenti
Per elencare tutti i progetti Apps Script in Drive,
utilizza la risorsa Files per eseguire una query sui file con il
tipo MIME application/vnd.google-apps.script. Per filtrare la risposta in modo da
includere solo i file di tua proprietà, includi il parametro di ricerca 'me' in owners.
Ecco una richiesta e una risposta di esempio che mostra un array di progetti Apps Script restituiti tramite una risposta 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 } ] }
Se conosci l'ID file di un progetto Apps Script, puoi recuperarlo direttamente con la seguente chiamata API:
GET https://www.googleapis.com/drive/v2/files/1234567890abcefghijklmnopqrstuvwxyz
Authorization: Bearer ya29.fakebearerstring
L'ID file di un progetto non è uguale alla chiave del progetto. L'ID file è la stringa alfanumerica nell'URL del progetto.
Esporta progetti da Drive
Una volta recuperata una risorsa File dall'API,
la proprietà exportLinks conterrà un URL da recuperare per ottenere i contenuti del
progetto come dati JSON. Ecco un esempio di come potrebbe apparire questo URL:
https://script.google.com/feeds/download/export?id=1234567890abcefghijklmnopqrstuvwxyz&format=json
Invia una richiesta a questo URL per recuperare i contenuti del progetto stesso.
Assicurati di includere un'intestazione Authorization con lo stesso token Bearer OAuth.
Ecco una richiesta e una risposta di esempio:
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" } ] }
L'esempio precedente include il codice per un'app web dalla guida del servizio HTML
Service. Viene restituito un array di Files, ognuno con le seguenti 4 proprietà:
id |
Identificatore interno di un file all'interno di un progetto, necessario per fare riferimento a questo file durante gli aggiornamenti. |
name |
Il nome del file senza estensioni, così come viene visualizzato nell'editor di script. |
type |
I due tipi di file sono server_js e html. |
source |
Il codice sorgente codificato contenuto nel file. |
Importa progetti in Drive
Per aggiornare un progetto esistente, effettua una chiamata HTTP PUT all'API del file
update con il fileId appropriato.
L'esempio seguente mostra una transazione di esempio per la parte di caricamento dei contenuti multimediali. Utilizzando
una delle librerie client, la tua applicazione può includere facilmente
metadati e contenuti multimediali nella stessa chiamata di caricamento. L'intestazione Content-Type specifica il tipo di contenuti caricati in questo caso.
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" } ] }
Crea nuovi file all'interno di un progetto
Per creare un nuovo file all'interno di un progetto, invia una richiesta PUT per un file senza la proprietà id. Se includi un file con un identificatore sconosciuto, il sistema genererà un messaggio di errore.
Elimina file all'interno di un progetto
Per eliminare un file da un progetto, invia una richiesta PUT che non includa il file (ma che includa tutti gli altri file del progetto). Qualsiasi file non inviato durante il processo di importazione verrà eliminato dal server.
Rinomina file all'interno di un progetto
Per rinominare un file all'interno di un progetto, invia una richiesta PUT con l'id esistente, ma un nuovo name. Il server ignora qualsiasi tentativo di modificare il type.
Crea nuovo progetto
Per creare un nuovo progetto, invia una richiesta POST all'API del file
insert. Analogamente alla chiamata update, puoi utilizzare una libreria client per includere metadati come il nome e la descrizione del progetto.
Ecco una transazione di esempio del caricamento dei contenuti multimediali. Verrà creato un progetto denominato "Senza titolo" in Drive. Il parametro convert nell'URL è obbligatorio. Come per la chiamata update, l'intestazione Content-Type è obbligatoria.
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" } ] }