Poiché i progetti 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 di Apps Script).
Ad esempio, una sviluppatore può creare un nuovo codice Apps Script sulla sua macchina locale con il suo editor di codice preferito e usare un sistema di controllo della versione come Git per collaborare con altri sviluppatori. Quando una versione viene finalizzata, 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 nelle versioni locali e sincronizzate con il progetto Apps Script utilizzando l'API Google Drive. I progetti esistenti possono essere scaricati (esportati) da Google Drive a un computer 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 dovrebbero terminare con ".gs". Puoi sviluppare localmente utilizzando i file .js, ma assicurati di rinominare in modo da includere un'estensione .gs prima di eseguire l'importazione su Google Drive.
- I file di script lato client devono terminare con ".html". inclusi i file .html, .js o .css lato client. Puoi sviluppare in locale utilizzando altre estensioni, ma è importante avere l'estensione .html prima di importarla su Google Drive.
- Quando importi i file di progetto su Google Drive, tutti i dati presenti nei file verranno sovrascritti. Non puoi aggiungere o inserire testo parziale; l'intero file deve essere aggiornato.
- I file di script lato server devono contenere codice JavaScript valido. Se sono presenti errori nei file .js del server, la chiamata di aggiornamento dell'API Google Drive avrà esito negativo con un errore 5xx. Puoi evitarlo eseguendo l'analisi tramite lint del codice prima dell'importazione.
- Non è possibile importare file vuoti. Se provi a caricare un file vuoto, la chiamata di aggiornamento dell'API Google Drive non andrà a buon fine e restituirà un errore 5xx.
- È possibile importare o esportare solo gli script autonomi. Gli script limitati al container non sono accessibili tramite l'API Google Drive.
- È possibile importare o esportare solo il codice sorgente. Anche risorse come le proprietà o i log del progetto non sono esposte tramite l'API Google Drive. Azioni come il controllo delle versioni degli script, la pubblicazione o l'esecuzione dello script non sono possibili tramite l'API Google Drive.
- Non devi limitarti a un singolo file
Code.gs
del server. Puoi distribuire il codice server tra 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 su Google Drive in modo programmatico. Questa API utilizza GET
per scaricare file e PUT/POST
per caricare
file. Consulta la pagina Panoramica dell'API Google Drive per documentazione dettagliata e guide rapide.
Questa guida si concentrerà sull'elenco e sullo spostamento dei file con la risorsa File 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 sulle autorizzazioni 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
Elenca progetti esistenti
Per elencare tutti i progetti Apps Script nel tuo Drive, utilizza la risorsa File per eseguire query relative ai 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 un esempio di richiesta e risposta 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
Esporta progetti da Drive
Quando ricevi una risorsa File
dall'API, la proprietà exportLinks
conterrà un URL da recuperare per recuperare i contenuti del progetto come dati JSON. Ecco un esempio di come si potrebbe presentare questo URL:
https://script.google.com/feeds/download/export?id=1234567890abcefghijklmnopqrstuvwxyz&format=json
Effettua 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 un esempio di richiesta e risposta:
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 riportato sopra include il codice per una semplice applicazione web della guida di HTML
Service. Tieni presente che viene restituito un array di Files
, ciascuno con le seguenti quattro 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, come 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 su Drive
Per aggiornare un progetto esistente, effettua una chiamata HTTP PUT
all'API del file update
con il file fileId
appropriato.
L'esempio seguente mostra una transazione di esempio per la parte relativa al caricamento di contenuti multimediali. Utilizzando una delle librerie client, l'applicazione può includere facilmente metadati e contenuti multimediali nella stessa chiamata di caricamento. Tieni presente che 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" } ] }
Creare 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.
Eliminare file all'interno di un progetto
Per eliminare un file da un progetto, invia una richiesta PUT
che non includa quel file (ma che includa tutti gli altri file del progetto). I file che non vengono restituiti durante il processo di importazione vengono eliminati dal server.
Rinominare i file all'interno di un progetto
Per rinominare un file all'interno di un progetto, invia una richiesta PUT
con il id
esistente ma un nuovo name
. Tieni presente che il server ignora qualsiasi tentativo di modifica in type
.
Crea nuovo progetto
Per creare un nuovo progetto, invia una richiesta POST
all'API
insert
del file. Come con la 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 di contenuti multimediali. In questo modo, su Drive verrà creato
un progetto denominato "Senza titolo". 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" } ] }