Projeleri İçe ve Dışa Aktarma

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

Örneğin, bir geliştirici favori kod düzenleyicisini kullanarak yerel makinesinde yeni Apps Komut Dosyası 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) ve dosyalar diğer Apps Komut Dosyası 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ırlamalar

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

  1. Sunucu tarafı komut dosyası dosyalarının ".gs" ile bitmesi beklenir. .js dosyalarını kullanarak yerel olarak geliştirme yapmak isteyebilirsiniz, ancak Google Drive'a aktarmadan önce bir .gs uzantısı içerecek şekilde yeniden adlandırmayı unutmayın.
  2. İstemci tarafı komut dosyası dosyalarının ".html" ile bitmesi gerekir. Buna istemci tarafı .html, .js veya .css dosyaları da dahildir. Başka uzantıları kullanarak yerel olarak da geliştirme yapabilirsiniz, ancak Google Drive'a aktarma işleminden önce .html uzantısına sahip olmanız önemlidir.
  3. Proje dosyalarını Google Drive'a aktardığınızda, bu dosyalardaki mevcut tüm 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. Sunucunuzun .js dosyalarında hatalar varsa Google Drive API güncelleme çağrısı, 5xx hatası vererek başarısız olur. İçe aktarmadan önce kodunuzu satır içi yaparak bu durumu önleyebilirsiniz.
  5. Boş dosyalar içe aktarılamaz. Boş bir dosya yüklemeyi denerseniz Google Drive API güncelleme çağrısı 5xx hatası vererek başarısız olur.
  6. Yalnızca bağımsız komut dosyaları içe veya dışa aktarılabilir. Kapsayıcıya bağlı komut dosyalarına Google Drive API üzerinden erişilemez.
  7. Yalnızca kaynak kodları içe veya dışa aktarılabilir. Proje özellikleri veya günlükler gibi kaynaklar da Google Drive API aracılığıyla kullanıma sunulmaz. Komut dosyası sürümü oluşturma, 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. Sunucu dosyalarının tümü aynı küresel ad alanına yüklenir. Bu nedenle, güvenli bir kapsülleme sağlamak istediğinizde JavaScript sınıflarını kullanın.

Drive API

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

Bu kılavuz, aşağıdaki çağrıları kullanarak dosyaları Dosyalar kaynağında listelemeye ve taşımaya odaklanacaktır:

Yetkilendirme

Google Drive API'ye yapılan tüm istekler, kimliği doğrulanmış bir kullanıcı tarafından OAuth 2.0 protokolü aracılığıyla yetkilendirilmelidir. Daha fazla bilgi için lütfen Google Drive API yetkilendirme belgelerini inceleyin.

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 listeleyin

Drive'ınızdaki tüm Apps Komut Dosyası projelerini listelemek için Dosyalar kaynağını kullanarak application/vnd.google-apps.script MIME türüne sahip dosyaları sorgulayın. Yanıtı yalnızca sahibi olduğunuz dosyaları içerecek şekilde filtrelemek için 'me' in owners arama parametresini dahil edin.

Aşağıda, JSON yanıtı aracılığıyla döndürülen bir dizi Apps Komut Dosyası projesinin gösterildiği örnek 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 getirebilirsiniz:

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

Projeleri Drive'dan dışa aktarın

API'den bir File kaynağı geri aldığınızda exportLinks mülkü, projenin içeriklerini JSON verileri olarak almak için getirilecek bir URL içerir. Aşağıda, bu URL'nin nasıl görünebileceğine dair bir örnek verilmiştir:

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

Projenin kendi içeriğini almak için bu URL'ye istekte bulunun. Aynı OAuth Bearer jetonuna sahip bir Authorization üst bilgisi 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 örnek, HTML Hizmeti kılavuzundan alınan basit bir web uygulamasına ait kodu içerir. Her biri aşağıdaki 4 özelliğe sahip bir Files dizisini geri alacağınızı unutmayın:

id Proje içindeki bir dosyanın, güncellemeler sırasında bu dosyaya referansta bulunması için gereken dahili tanımlayıcısı.
name Uzantının olmadığı dosyanın, Komut Dosyası Düzenleyici'de görüntülenen adı.
type İki dosya türü server_js ve html'dir.
source Dosyanın içerdiği kodlanmış kaynak kodu.

Projeleri Drive'a aktarın

Mevcut bir projeyi güncellemek için update API dosyasına uygun fileId ile HTTP PUT çağrısı yapın. Aşağıdaki örnekte, medya yükleme kısmı 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 ekleyebilir. Content-Type üst bilgisinin, 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"
    }
  ]
}

Bir proje içinde yeni dosyalar oluşturma

Bir projede yeni bir dosya oluşturmak için id özelliği olmayan bir dosya için PUT isteği gönderin. Tanımlayıcısı bilinmeyen bir dosya eklerseniz sistem bir hata mesajı verir.

Bir proje içindeki dosyaları silme

Projedeki bir 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 tüm dosyalar sunucudan silinir.

Proje içindeki dosyaları yeniden adlandırma

Proje içindeki bir dosyayı yeniden adlandırmak için mevcut id ile bir PUT isteği ancak yeni name isteği gönderin. Sunucunun type olarak değiştirme girişimlerini yoksaydığını unutmayın.

Yeni proje oluştur

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

Medya yükleme işleminin örnek bir işlemini burada görebilirsiniz. Bu işlem, Drive'ınızda "Adsız" adlı bir proje oluşturur. URL'deki convert parametresi zorunludur. update çağrısında olduğu gibi, Content-Type başlığı da 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"
    }
  ]
}