Projeleri İçe ve Dışa Aktarma

Apps Script projeleri Google Drive'da bulunduğundan geliştiriciler, Google Drive API'yi (Apps Script'teki Drive Hizmeti ile karıştırılmamalıdır) kullanarak Apps Script kaynak kodunu içe ve dışa aktarabilir.

Örneğin, bir geliştirici yerel makinesinde en sevdiği kod düzenleyiciyle yeni Apps Script kodu yazabilir ve diğer geliştiricilerle ortak çalışmak için Git gibi bir sürüm kontrol sistemi kullanabilir. Bir sürüm tamamlandığında, dosyaları REST API'yi kullanarak Google Drive'a yükleyebilir (içe aktarabilir). Bu dosyalar, diğer tüm Apps Script projeleri gibi kullanılabilir.

Yerel sürümlerde kod değişiklikleri yapılabilir ve Google Drive API kullanılarak Apps Komut Dosyası projesiyle senkronize edilebilir. Mevcut projeler Google Drive'dan yerel bir makineye indirilebilir (dışa aktarılabilir).

Özellikler ve Sınırlılıklar

Projeleri içe veya dışa aktarmak için Google Drive API'yi kullanmak istiyorsanız aşağıdakileri göz önünde bulundurun:

  1. Sunucu tarafı komut dosyası dosyalarının ".gs" ile bitmesi gerekir. .js dosyalarını kullanarak yerel olarak geliştirmek isteyebilirsiniz. Ancak Google Drive'a aktarmadan önce dosyaları .gs uzantısı içerecek şekilde yeniden adlandırdığınızdan emin olun.
  2. İstemci tarafı komut dosyası dosyalarının ".html" ile bitmesi gerekir. Buna istemci tarafı .html, .js veya .css dosyaları dahildir. Diğer uzantıları kullanarak yerel olarak geliştirme yapabilirsiniz ancak Google Drive'a aktarmadan önce .html uzantısının olması önemlidir.
  3. Proje dosyalarını Google Drive'a aktardığınızda, bu dosyalardaki mevcut verilerin üzerine yazılır. Kısmi metin ekleyemez veya ekleyemezsiniz. Dosyanın tamamı güncellenmelidir.
  4. Sunucu tarafı komut dosyası dosyaları geçerli JavaScript içermelidir. Sunucu .js dosyalarınızda hata varsa Google Drive API güncelleme çağrısı 5xx hatasıyla başarısız olur. Kodunuzu içe aktarmadan önce linting yaparak bu durumu önleyebilirsiniz.
  5. Boş dosyalar içe aktarılamaz. Boş bir dosya yüklemeye çalışırsanız Google Drive API güncelleme çağrısı 5xx hatasıyla başarısız olur.
  6. Yalnızca bağımsız komut dosyaları içe veya dışa aktarılabilir. Kapsüllere bağlı komut dosyalarına Google Drive API üzerinden erişilemez.
  7. Yalnızca kaynak kodları içe veya dışa aktarılabilir. Proje mülkleri veya günlükler gibi kaynaklar da Google Drive API aracılığıyla kullanıma sunulmaz. Komut dosyası sürüm belirleme, komut dosyasını yayınlama veya yürütme gibi işlemler Google Drive API üzerinden yapılamaz.
  8. Tek bir sunucu Code.gs dosyasıyla sınırlı değilsiniz. Geliştirme kolaylığı için sunucu kodunu birden fazla dosyaya dağıtabilirsiniz. Tüm sunucu dosyaları aynı global ad alanına yüklenir. Bu nedenle, güvenli kapsülleme sağlamak istediğinizde JavaScript sınıflarını kullanın.

Drive API'sı

Google Drive API, geliştiricilerin Google Drive'daki dosyalara programatik olarak erişmesine olanak tanır. Bu API, dosyaları indirmek için GET ve dosyaları yüklemek için PUT/POST kullanır. Ayrıntılı dokümanlar ve hızlı başlangıç kılavuzları için lütfen Google Drive API'ye Genel Bakış sayfasını inceleyin.

Bu kılavuzda, aşağıdaki çağrıları kullanarak Dosyalar kaynağı ile dosyaları listelemeyi ve taşımayı ele alacağız:

Yetkilendirme

Google Drive API'sine gönderilen tüm isteklerin, kimliği doğrulanmış bir kullanıcı tarafından OAuth 2.0 protokolü üzerinden yetkilendirilmesi gerekir. Daha fazla bilgi için lütfen Google Drive API yetkilendirme belgelerine bakın.

Bir uygulamanın ihtiyaç duyabileceği diğer kapsamlara (https://www.googleapis.com/auth/drive gibi) ek olarak, Google Apps Komut Dosyası projelerini içe veya dışa aktarmaya çalışan tüm uygulamalar özel kapsamı istemelidir:

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

Mevcut projeleri listeleme

Drive'ınızdaki tüm Apps Script projelerini listelemek için application/vnd.google-apps.script MIME türüne sahip dosyaları sorgulamak üzere Dosyalar kaynağını kullanın. Yanıtı yalnızca sahip olduğunuz dosyaları içerecek şekilde filtrelemek için 'me' in owners arama parametresini ekleyin.

Aşağıda, JSON yanıtı aracılığıyla döndürülen bir Apps Script projeleri dizisini gösteren örnek bir istek ve yanıt verilmiştir.

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

Bir Apps Komut Dosyası projesinin dosya kimliğini biliyorsanız aşağıdaki API çağrısıyla doğrudan alabilirsiniz:

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

Drive'dan projeleri dışa aktarma

API'den bir File kaynağı aldıktan sonra exportLinks mülkü, projenin içeriğini JSON verileriyle almak için getirilecek bir URL içerir. Bu URL'nin nasıl görünebileceğine dair bir örnek aşağıda verilmiştir:

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

Projenin içeriğini almak için bu URL'ye istek gönderin. Aynı OAuth Bearer jetonuyla bir Authorization başlığı eklediğinizden emin olun

Aşağıda örnek bir istek ve yanıt verilmiştir:

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

Yukarıdaki örnekte, HTML Hizmeti kılavuzundaki basit bir web uygulamasının kodu yer almaktadır. Her biri aşağıdaki 4 özelliğe sahip bir Files dizisi döndürüldüğünü unutmayın:

id Projedeki bir dosyanın dahili tanımlayıcısı. Güncellemeler sırasında bu dosyaya referans vermek için gereklidir.
name Komut dosyası düzenleyicisinde gösterildiği şekilde, uzantısı olmayan dosyanın adı.
type İki dosya türü server_js ve html'dir.
source Dosyada bulunan kodlanmış kaynak kod.

Projeleri Drive'a aktarma

Mevcut bir projeyi güncellemek için uygun fileId ile dosya update API'sine HTTP PUT çağrısı yapın. Aşağıdaki örnekte, medya yükleme bölümü için örnek bir işlem gösterilmektedir. Uygulamanız, istemci kitaplıklarından birini kullanarak meta verileri ve medyayı aynı yükleme çağrısına kolayca dahil edebilir. Content-Type üstbilgisinin, bu durumda yüklenen içeriğin türünü belirttiğini unutmayın.

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

Proje içinde yeni dosya oluşturma

Bir projede yeni bir dosya oluşturmak için id mülkü olmadan dosya için PUT isteği gönderin. Bilinmeyen tanımlayıcı içeren bir dosya eklerseniz sistem bir hata mesajı gösterir.

Projedeki dosyaları silme

Bir projedeki dosyayı silmek için söz konusu dosyayı içermeyen (ancak projedeki diğer tüm dosyaları içeren) bir PUT isteği gönderin. İçe aktarma işlemi sırasında geri gönderilmeyen dosyalar sunucudan silinir.

Projedeki dosyaları yeniden adlandırma

Bir projedeki dosyayı yeniden adlandırmak için mevcut id ile yeni bir name içeren bir PUT isteği gönderin. Sunucunun, type olarak değiştirilme girişimlerini yoksadığını unutmayın.

Yeni proje oluştur

Yeni bir proje oluşturmak için insert API'ye bir POST isteği gönderin. update çağrısına benzer şekilde, proje adı ve açıklaması gibi meta verileri dahil etmek için bir istemci kitaplığı kullanabilirsiniz.

Aşağıda, medya yükleme işlemine ait örnek bir işlem verilmiştir. Bu işlem, Drive'ınızda "Başlıksız" adlı bir proje oluşturur. URL'deki convert parametresi gereklidir. update çağrısında olduğu gibi Content-Type başlığı gereklidir.

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