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 (que no se debe confundir 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 sincronizar con el proyecto de Apps Script a través de la API de Google Drive. Los proyectos existentes se pueden descargar (exportar) de Google Drive a una máquina local.
Funciones y limitaciones
Si quieres 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". Es posible que desees desarrollar localmente con archivos .js, pero asegúrate de cambiarles 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. Nuevamente, puedes desarrollar de forma local con otras extensiones, pero es importante tener la extensión .html antes de importar a Google Drive.
- Cuando importes 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 código 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. Puedes evitar esto si analizas tu código con lint antes de importarlo.
- 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 los 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 se pueden realizar acciones como el control de versiones, la publicación o la ejecución de secuencias de comandos a través de la API de Google Drive.
- No estás limitado a un solo archivo
Code.gsdel 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 una encapsulación segura.
API de Drive
La API de Google Drive permite a los desarrolladores acceder a los archivos de Google Drive de forma programática. Esta API usa GET para descargar archivos y PUT/POST para subirlos. Consulta la página de 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, nos enfocaremos en cómo enumerar y mover archivos con el recurso Files a través de las siguientes 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
Enumera los proyectos existentes
Para enumerar todos los proyectos de Apps Script en tu unidad de Drive, usa el recurso Files para consultar los archivos con el tipo de MIME application/vnd.google-apps.script.
Para filtrar la respuesta y que solo incluya los archivos que te pertenecen, incluye el parámetro de búsqueda 'me' in owners.
A continuación, se muestran una solicitud y una respuesta de ejemplo que muestran un array de proyectos de Apps Script que se devolvieron 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 recibas un recurso File de la API, la propiedad exportLinks contendrá una URL para recuperar el contenido del proyecto como datos JSON. A continuación, se muestra 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 muestran un ejemplo de solicitud y respuesta:
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 HTML Service. Ten en cuenta que recibirás 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 |
Nombre del archivo sin extensiones, como se muestra en el Editor de secuencias 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. |
Cómo importar proyectos a Drive
Para actualizar un proyecto existente, realiza una llamada PUT HTTP a la API de update con el fileId adecuado.
En el siguiente ejemplo, se muestra una transacción de muestra para la parte de carga de medios. Con una de las bibliotecas cliente, tu aplicación puede incluir fácilmente metadatos y 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" } ] }
Crear archivos nuevos en 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 incluya ese archivo (pero que sí 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.
Cómo cambiar 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 un proyecto nuevo
Para crear un proyecto nuevo, envía una solicitud POST a la API de archivos insert. Al igual que con la llamada update, puedes usar una biblioteca cliente para incluir metadatos, como el nombre y la descripción del proyecto.
A continuación, se muestra una transacción de muestra de la carga de medios. Se creará un proyecto llamado "Sin título" en tu unidad. Se requiere el parámetro convert en la URL.
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" } ] }