Dado que los proyectos de Apps Script residen en Google Drive, los desarrolladores pueden importar y exportar el código fuente de Apps Script con la API de Google Drive (no debe confundirse con el servicio de Drive en Apps Script).
Por ejemplo, un desarrollador puede crear código nuevo de Apps Script en su máquina local con su editor de código favorito y usar un sistema de control de versiones, como Git, para colaborar con otros desarrolladores. Cuando se finaliza una versión, puede subir (importar) los archivos a Google Drive con la API de REST, donde se pueden usar como cualquier otro proyecto de Apps Script.
Los cambios de código se pueden realizar en las versiones locales y sincronizarse con el proyecto de Apps Script con la API de Google Drive. Los proyectos existentes se pueden descargar (exportar) de Google Drive a una máquina local.
Funciones y limitaciones
Si deseas usar la API de Google Drive para importar o exportar proyectos, ten en cuenta lo siguiente:
- Se espera que los archivos de secuencia de comandos del servidor terminen en ".gs". Te recomendamos que realices el desarrollo de forma local con archivos .js, pero asegúrate de cambiar el nombre para que incluyan la extensión .gs antes de importarlos a Google Drive.
- Los archivos de secuencias de comandos del cliente deben terminar con ".html". Esto incluye archivos .html, .js o .css del cliente. Una vez más, puedes desarrollar de forma local con otras extensiones, pero es importante tener la extensión .html antes de importarlo a Google Drive.
- Cuando importas archivos de proyecto a Google Drive, se reemplazarán todos los datos existentes en esos archivos. No puedes agregar ni insertar texto parcial. Se debe actualizar todo el archivo.
- Los archivos de secuencia de comandos del servidor deben contener JavaScript válido. Si hay errores en los archivos .js del servidor, la llamada de actualización de la API de Google Drive fallará con un error 5xx. Para evitar esto, puedes lintear tu código antes de importar.
- No se pueden importar archivos vacíos. La llamada de actualización de la API de Google Drive fallará con un error 5xx si intentas subir un archivo vacío.
- Solo se pueden importar o exportar secuencias de comandos independientes. No se puede acceder a las secuencias de comandos vinculadas a contenedores a través de la API de Google Drive.
- Solo se puede importar o exportar código fuente. Los recursos, como las propiedades o los registros del proyecto, tampoco se exponen a través de la API de Google Drive. No es posible realizar acciones como crear versiones de la secuencia de comandos, publicarla o ejecutarla a través de la API de Google Drive.
- No estás limitado a un solo archivo
Code.gs
del servidor. Puedes distribuir el código del servidor en varios archivos para facilitar el desarrollo. Todos los archivos del servidor se cargan en el mismo espacio de nombres global, por lo que debes usar clases de JavaScript cuando quieras proporcionar un encapsulamiento seguro.
API de Drive
La API de Google Drive permite que los desarrolladores accedan a los archivos de Google Drive de forma programática. Esta API usa GET
para descargar archivos y PUT/POST
para subir archivos. Consulta la página Descripción general de la API de Google Drive para obtener documentación detallada y guías de inicio rápido.
En esta guía, se enfocará en enumerar y mover archivos con el recurso Files con estas llamadas:
Autorización
Todas las solicitudes a la API de Google Drive deben estar autorizadas por un usuario autenticado a través del protocolo OAuth 2.0. Para obtener más detalles, consulta la documentación de autorización de la API de Google Drive.
Además de otros alcances que una aplicación podría necesitar (como https://www.googleapis.com/auth/drive
), todas las aplicaciones que intenten importar o exportar proyectos de Google Apps Script deben solicitar el alcance especial:
https://www.googleapis.com/auth/drive.scripts
Cómo mostrar una lista de proyectos existentes
Para enumerar todos los proyectos de Apps Script en tu unidad de Drive, usa el recurso Files para consultar archivos con el tipo de MIME application/vnd.google-apps.script
.
Para filtrar la respuesta de modo que solo incluya los archivos que te pertenecen, incluye el parámetro de búsqueda 'me' in owners
.
A continuación, se muestra una solicitud y una respuesta de muestra que muestran un array de proyectos de Apps Script que se muestra a través de una respuesta 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 } ] }
Si conoces el ID de archivo de un proyecto de Apps Script, puedes recuperarlo directamente con la siguiente llamada a la API:
GET https://www.googleapis.com/drive/v2/files/1234567890abcefghijklmnopqrstuvwxyz
Authorization: Bearer ya29.fakebearerstring
Cómo exportar proyectos desde Drive
Una vez que obtengas un recurso File
de la API,
la propiedad exportLinks
contendrá una URL para recuperar el contenido de
el proyecto como datos JSON. Este es un ejemplo de cómo podría verse esta URL:
https://script.google.com/feeds/download/export?id=1234567890abcefghijklmnopqrstuvwxyz&format=json
Realiza una solicitud a esta URL para recuperar el contenido del proyecto.
Asegúrate de incluir un encabezado Authorization
con el mismo token de OAuth Bearer
.
A continuación, se muestra una solicitud y una respuesta de ejemplo:
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" } ] }
El ejemplo anterior incluye código para una app web simple de la guía de servicio de HTML. Ten en cuenta que se muestra un array de Files
, cada uno con las siguientes 4 propiedades:
id |
Es el identificador interno de un archivo dentro de un proyecto, necesario para hacer referencia a este archivo durante las actualizaciones. |
name |
Es el nombre del archivo sin extensiones, como se muestra en el editor de secuencia de comandos. |
type |
Los dos tipos de archivos son server_js y html. |
source |
Es el código fuente codificado que se incluye en el archivo. |
Importa proyectos a Drive
Para actualizar un proyecto existente, realiza una llamada HTTP PUT
a la API de archivo update
con el fileId
adecuado.
En el siguiente ejemplo, se muestra una transacción de muestra para la parte de carga de contenido multimedia. Con una de las bibliotecas cliente, tu aplicación puede incluir fácilmente los metadatos y el contenido multimedia en la misma llamada de carga. Ten en cuenta que el encabezado Content-Type
especifica el tipo de contenido que se subió en este 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 archivos nuevos dentro de un proyecto
Para crear un archivo nuevo dentro de un proyecto, envía una solicitud PUT
para un archivo sin la propiedad id
. Si incluyes un archivo con un identificador desconocido, el sistema mostrará un mensaje de error.
Borra archivos dentro de un proyecto
Para borrar un archivo de un proyecto, envía una solicitud PUT
que no lo incluya (pero que incluya todos los demás archivos del proyecto). Cualquier archivo que no se envíe durante el proceso de importación se borrará del servidor.
Cambia el nombre de los archivos de un proyecto
Para cambiar el nombre de un archivo dentro de un proyecto, envía una solicitud PUT
con el id
existente, pero con un name
nuevo. Ten en cuenta que el servidor ignora cualquier intento de cambiar a type
.
Crear proyecto nuevo
Para crear un proyecto nuevo, envía una solicitud POST
a la API de archivo insert
. Al igual que la llamada a update
, puedes usar una biblioteca cliente para incluir metadatos, como el nombre y la descripción del proyecto.
Este es un ejemplo de transacción de la carga de contenido multimedia. Se creará un proyecto llamado "Sin título" en tu unidad de Drive. El parámetro convert
en la URL es obligatorio.
Al igual que con la llamada a update
, se requiere el encabezado 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" } ] }