Importer et exporter des projets

Étant donné que les projets Apps Script se trouvent sur Google Drive, les développeurs peuvent importer et exporter le code source Apps Script à l'aide de l'API Google Drive (à ne pas confondre avec le service Drive dans Apps Script).

Par exemple, un développeur peut créer du code Apps Script sur son ordinateur local avec son éditeur de code préféré et utiliser un système de contrôle des versions tel que Git pour collaborer avec d'autres développeurs. Une fois la version finalisée, elle peut importer (importer) les fichiers dans Google Drive à l'aide de l'API REST, où ils peuvent être utilisés comme n'importe quel autre projet Apps Script.

Les modifications de code peuvent être apportées sur les versions locales et synchronisées avec le projet Apps Script à l'aide de l'API Google Drive. Les projets existants peuvent être téléchargés (exportés) depuis Google Drive vers un ordinateur local.

Fonctionnalités et limites

Si vous souhaitez utiliser l'API Google Drive pour importer ou exporter des projets, tenez compte des points suivants:

  1. Les fichiers de script côté serveur doivent se terminer par ".gs". Vous pouvez développer en local à l'aide de fichiers .js, mais assurez-vous d'inclure l'extension .gs dans le nom du fichier avant de l'importer dans Google Drive.
  2. Les fichiers de script côté client doivent se terminer par ".html". Cela inclut les fichiers .html, .js ou .css côté client. Là encore, vous pouvez développer localement à l'aide d'autres extensions, mais il est important d'utiliser l'extension .html avant d'importer dans Google Drive.
  3. Lorsque vous importez des fichiers de projet dans Google Drive, toutes les données existantes dans ces fichiers sont écrasées. Vous ne pouvez pas ajouter ni insérer de texte partiel. Le fichier entier doit être mis à jour.
  4. Les fichiers de script côté serveur doivent contenir du code JavaScript valide. En cas d'erreur dans les fichiers .js de votre serveur, l'appel de mise à jour de l'API Google Drive échouera avec une erreur 5xx. Pour éviter cela, effectuez un linting sur votre code avant l'importation.
  5. Impossible d'importer des fichiers vides. Si vous essayez d'importer un fichier vide, l'appel de mise à jour de l'API Google Drive échouera et renverra une erreur 5xx.
  6. Seuls les scripts autonomes peuvent être importés ou exportés. Les scripts liés à des conteneurs ne sont pas accessibles via l'API Google Drive.
  7. Seul le code source peut être importé ou exporté. Les ressources telles que les propriétés ou les journaux de projet ne sont pas non plus exposées via l'API Google Drive. Des actions telles que la gestion des versions, la publication ou l'exécution du script ne sont pas possibles via l'API Google Drive.
  8. Vous n'êtes pas limité à un seul fichier Code.gs de serveur. Pour faciliter le développement, vous pouvez répartir le code du serveur sur plusieurs fichiers. Tous les fichiers du serveur sont chargés dans le même espace de noms global. Par conséquent, utilisez des classes JavaScript lorsque vous souhaitez fournir une encapsulation sécurisée.

API Drive

L'API Google Drive permet aux développeurs d'accéder par programmation aux fichiers dans Google Drive. Cette API utilise GET pour télécharger des fichiers et PUT/POST pour les importer. Veuillez consulter la page de présentation de l'API Google Drive pour obtenir de la documentation détaillée et des guides de démarrage rapide.

Ce guide explique comment répertorier et déplacer des fichiers avec la ressource Files à l'aide des appels suivants:

Autorisation

Toutes les requêtes adressées à l'API Google Drive doivent être autorisées par un utilisateur authentifié via le protocole OAuth 2.0. Pour en savoir plus, consultez la documentation sur les autorisations de l'API Google Drive.

En plus des autres champs d'application dont une application peut avoir besoin (tels que https://www.googleapis.com/auth/drive), toutes les applications qui tentent d'importer ou d'exporter des projets Google Apps Script doivent demander le champ d'application spécial:

https://www.googleapis.com/auth/drive.scripts

Lister les projets existants

Pour répertorier tous les projets Apps Script de votre Drive, utilisez la ressource Fichiers afin de rechercher les fichiers dont le type MIME est application/vnd.google-apps.script. Pour filtrer la réponse afin de n'inclure que les fichiers dont vous êtes propriétaire, incluez le paramètre de recherche 'me' in owners.

Voici un exemple de requête et de réponse qui affiche un tableau de projets Apps Script renvoyés via une réponse 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 vous connaissez l'ID d'un projet Apps Script, vous pouvez le récupérer directement avec l'appel d'API suivant:

GET https://www.googleapis.com/drive/v2/files/1234567890abcefghijklmnopqrstuvwxyz
Authorization:  Bearer ya29.fakebearerstring

Exporter des projets depuis Drive

Lorsque vous récupérez une ressource File de l'API, la propriété exportLinks contient une URL à extraire pour obtenir le contenu du projet sous forme de données JSON. Voici un exemple d'URL:

https://script.google.com/feeds/download/export?id=1234567890abcefghijklmnopqrstuvwxyz&format=json

Envoyez une requête à cette URL pour récupérer le contenu du projet lui-même. Assurez-vous d'inclure un en-tête Authorization avec le même jeton OAuth Bearer

Voici un exemple de requête et de réponse:

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'exemple ci-dessus inclut le code d'une application Web simple provenant du guide HTML Service. Notez que vous recevez un tableau de Files, chacun avec les quatre propriétés suivantes:

id Identifiant interne d'un fichier au sein d'un projet, nécessaire pour référencer ce fichier lors des mises à jour.
name Nom du fichier sans extensions, tel qu'affiché dans l'éditeur de scripts.
type Les deux types de fichiers sont server_js et html.
source Le code source encodé contenu dans le fichier

Importer des projets dans Drive

Pour mettre à jour un projet existant, effectuez un appel HTTP PUT vers l'API du fichier update avec le fileId approprié. Vous trouverez ci-dessous un exemple de transaction pour la partie "importation de contenus multimédias". À l'aide de l'une des bibliothèques clientes, votre application peut facilement inclure les métadonnées et le contenu multimédia dans le même appel d'importation. Notez que l'en-tête Content-Type spécifie le type de contenu importé dans ce cas.

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"
    }
  ]
}

Créer des fichiers dans un projet

Pour créer un fichier dans un projet, envoyez une requête PUT pour un fichier sans la propriété id. Si vous incluez un fichier avec un identifiant inconnu, le système génère un message d'erreur.

Supprimer des fichiers dans un projet

Pour supprimer un fichier d'un projet, envoyez une requête PUT qui n'inclut pas ce fichier (mais qui inclut tous les autres fichiers du projet). Tout fichier qui n'est pas renvoyé lors du processus d'importation sera supprimé du serveur.

Renommer des fichiers dans un projet

Pour renommer un fichier dans un projet, envoyez une requête PUT avec le id existant, mais un nouveau name. Notez que le serveur ignore toute tentative de remplacement par type.

Create new project

Pour créer un projet, envoyez une requête POST au fichier API insert. À l'instar de l'appel update, vous pouvez utiliser une bibliothèque cliente pour inclure des métadonnées telles que le nom et la description du projet.

Voici un exemple de transaction de l'importation du média. Un projet intitulé "Untitled" (Sans titre) est créé dans votre Drive. Le paramètre convert est obligatoire dans l'URL. Comme pour l'appel update, l'en-tête Content-Type est obligatoire.

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"
    }
  ]
}