Projekte importieren und exportieren

Da sich Apps Script-Projekte auf Google Drive befinden, können Entwickler Apps Script-Quellcode mit der Google Drive API importieren und exportieren. Diese API ist nicht mit dem Drive-Dienst in Apps Script zu verwechseln.

So kann ein Entwickler beispielsweise neuen Apps Script-Code auf seinem lokalen Computer mit seinem bevorzugten Code-Editor schreiben und ein Versionsverwaltungssystem wie Git verwenden, um mit anderen Entwicklern zusammenzuarbeiten. Wenn eine Version fertiggestellt ist, kann sie die Dateien mit der REST API in Google Drive hochladen (importieren), wo sie wie jedes andere Apps Script-Projekt verwendet werden können.

Codeänderungen können an den lokalen Versionen vorgenommen und mithilfe der Google Drive API mit dem Apps Script-Projekt synchronisiert werden. Vorhandene Projekte können aus Google Drive auf einen lokalen Computer heruntergeladen (exportiert) werden.

Funktionen und Beschränkungen

Wenn Sie die Google Drive API zum Importieren oder Exportieren von Projekten verwenden möchten, beachten Sie Folgendes:

  1. Serverseitige Skriptdateien müssen auf „.gs“ enden. Sie können lokal mit JS-Dateien entwickeln, müssen sie aber vor dem Importieren in Google Drive umbenennen, sodass sie die Endung .gs haben.
  2. Clientseitige Skriptdateien müssen mit „.html“ enden. Dazu gehören clientseitige HTML-, JS- oder CSS-Dateien. Sie können wieder lokal mit anderen Erweiterungen entwickeln, aber es ist wichtig, dass die .html-Erweiterung vor dem Import in Google Drive vorhanden ist.
  3. Wenn Sie Projektdateien in Google Drive importieren, werden alle vorhandenen Daten in diesen Dateien überschrieben. Sie können keinen Teiltext anhängen oder einfügen. Die gesamte Datei muss aktualisiert werden.
  4. Serverseitige Scriptdateien müssen gültigen JavaScript-Code enthalten. Wenn in Ihren Server-JS-Dateien Fehler vorhanden sind, schlägt der Google Drive API-Aktualisierungsaufruf mit einem 5xx-Fehler fehl. Sie können dies verhindern, indem Sie Ihren Code vor dem Importieren prüfen.
  5. Leere Dateien können nicht importiert werden. Der Google Drive API-Aktualisierungsaufruf schlägt mit einem 5xx-Fehler fehl, wenn Sie versuchen, eine leere Datei hochzuladen.
  6. Es können nur eigenständige Skripts importiert oder exportiert werden. Auf containergebundene Skripts kann nicht über die Google Drive API zugegriffen werden.
  7. Es kann nur Quellcode importiert oder exportiert werden. Ressourcen wie Projekteigenschaften oder Logs sind auch nicht über die Google Drive API verfügbar. Aktionen wie die Versionsverwaltung, Veröffentlichung oder Ausführung des Skripts sind über die Google Drive API nicht möglich.
  8. Sie sind nicht auf eine einzelne Code.gs-Datei beschränkt. Sie können Servercode zur einfacheren Entwicklung auf mehrere Dateien verteilen. Alle Serverdateien werden in denselben globalen Namespace geladen. Verwenden Sie daher JavaScript-Klassen, wenn Sie eine sichere Kapselung benötigen.

Drive API

Mit der Google Drive API können Entwickler programmatisch auf Dateien in Google Drive zugreifen. Diese API verwendet GET zum Herunterladen von Dateien und PUT/POST zum Hochladen von Dateien. Eine detaillierte Dokumentation und Schnellstarts finden Sie auf der Übersichtsseite zur Google Drive API.

In diesem Leitfaden geht es hauptsächlich um das Auflisten und Verschieben von Dateien mit der Files-Ressource mithilfe der folgenden Aufrufe:

Autorisierung

Alle Anfragen an die Google Drive API müssen von einem authentifizierten Nutzer über das OAuth 2.0-Protokoll autorisiert werden. Weitere Informationen finden Sie in der Dokumentation zur Autorisierung der Google Drive API.

Zusätzlich zu anderen Bereichen, die eine Anwendung möglicherweise benötigt (z. B. https://www.googleapis.com/auth/drive), müssen alle Anwendungen, die versuchen, Google Apps Script-Projekte zu importieren oder zu exportieren, den speziellen Bereich anfordern:

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

Vorhandene Projekte auflisten

Wenn Sie alle Apps Script-Projekte in Ihrem Drive auflisten möchten, verwenden Sie die Files-Ressource, um nach Dateien mit dem MIME-Typ application/vnd.google-apps.script zu suchen. Wenn Sie die Antwort filtern möchten, sodass nur Dateien angezeigt werden, die Ihnen gehören, fügen Sie den Suchparameter 'me' in owners ein.

Hier sehen Sie eine Beispielanfrage und -antwort, in der ein Array von Apps Script-Projekten zurückgegeben wird.

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

Wenn Sie die Datei-ID eines Apps Script-Projekts kennen, können Sie sie mit dem folgenden API-Aufruf direkt abrufen:

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

Projekte aus Drive exportieren

Sobald Sie eine File-Ressource von der API erhalten, enthält die Property exportLinks eine URL, die Sie abrufen können, um den Inhalt des Projekts als JSON-Daten zu erhalten. So könnte diese URL aussehen:

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

Stellen Sie eine Anfrage an diese URL, um den Inhalt des Projekts abzurufen. Achten Sie darauf, dass Sie einen Authorization-Header mit demselben OAuth-Bearer-Token einfügen.

Hier sehen Sie ein Beispiel für eine Anfrage und eine Antwort:

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

Das obige Beispiel enthält Code für eine einfache Web-App aus dem Leitfaden zum HTML-Dienst. Sie erhalten ein Array von Files, die jeweils die folgenden vier Attribute haben:

id Interne Kennung einer Datei in einem Projekt, die zum Referenzieren dieser Datei bei Aktualisierungen erforderlich ist.
name Der Name der Datei ohne Erweiterungen, wie er im Script Editor angezeigt wird.
type Die beiden Dateitypen sind „server_js“ und „html“.
source Der codierte Quellcode in der Datei.

Projekte in Drive importieren

Wenn Sie ein vorhandenes Projekt aktualisieren möchten, führen Sie einen HTTP-PUT-Aufruf an die Datei-API update mit dem entsprechenden fileId aus. Das folgende Beispiel zeigt eine Beispieltransaktion für den Media-Upload. Mit einer der Clientbibliotheken kann Ihre Anwendung Metadaten und Medien ganz einfach im selben Uploadaufruf einfügen. Der Header Content-Type gibt den Typ des in diesem Fall hochgeladenen Inhalts an.

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

Neue Dateien in einem Projekt erstellen

Wenn Sie eine neue Datei in einem Projekt erstellen möchten, senden Sie eine PUT-Anfrage für eine Datei ohne das Attribut id. Wenn Sie eine Datei mit einer unbekannten Kennung einfügen, wird eine Fehlermeldung angezeigt.

Dateien in einem Projekt löschen

Wenn Sie eine Datei aus einem Projekt löschen möchten, senden Sie eine PUT-Anfrage, die diese Datei nicht enthält, aber alle anderen Dateien im Projekt. Alle Dateien, die während des Importvorgangs nicht zurückgesendet werden, werden vom Server gelöscht.

Dateien in einem Projekt umbenennen

Wenn Sie eine Datei in einem Projekt umbenennen möchten, senden Sie eine PUT-Anfrage mit der vorhandenen id, aber einer neuen name. Hinweis: Der Server ignoriert alle Versuche, zu type zu wechseln.

Neues Projekt erstellen

Senden Sie zum Erstellen eines neuen Projekts eine POST-Anfrage an die API insert. Ähnlich wie beim update-Aufruf können Sie eine Clientbibliothek verwenden, um Metadaten wie den Projektnamen und die Beschreibung einzufügen.

Hier ist ein Beispiel für eine Transaktion für den Media-Upload. Dadurch wird in Ihrer Ablage ein Projekt mit dem Namen „Untitled“ erstellt. Der Parameter convert in der URL ist erforderlich. Wie beim update-Aufruf ist der Content-Type-Header erforderlich.

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