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:
- 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.
- İ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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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" } ] }