از آنجایی که پروژههای Apps Script در Google Drive قرار دارند، توسعهدهندگان میتوانند کد منبع Apps Script را با استفاده از Google Drive API وارد و صادر کنند (با سرویس Drive در Apps Script اشتباه گرفته نشود).
برای مثال، یک توسعهدهنده میتواند کد Apps Script جدید را با ویرایشگر کد مورد علاقهاش در دستگاه محلی خود بنویسد و از یک سیستم کنترل نسخه مانند Git برای همکاری با توسعهدهندگان دیگر استفاده کند. وقتی نسخه نهایی شد، او میتواند فایلها را با استفاده از REST API به Google Drive آپلود (وارد) کند، جایی که میتوان از آنها مانند سایر پروژههای Apps Script استفاده کرد.
تغییرات کد را می توان در نسخه های محلی ایجاد کرد و با استفاده از Google Drive API با پروژه Apps Script همگام سازی کرد. پروژه های موجود را می توان از Google Drive به یک ماشین محلی دانلود کرد (صادرات کرد).
ویژگی ها و محدودیت ها
اگر میخواهید از Google Drive API برای وارد کردن یا صادرات پروژهها استفاده کنید، به موارد زیر توجه داشته باشید:
- انتظار می رود فایل های اسکریپت سمت سرور به ".gs" ختم شوند. ممکن است بخواهید با استفاده از فایلهای js. به صورت محلی توسعه دهید، اما مطمئن شوید که قبل از وارد کردن به Google Drive، پسوند .gs را تغییر نام دهید.
- فایل های اسکریپت سمت کلاینت باید با ".html" ختم شوند. این شامل فایلهای html، .js یا css. سمت کلاینت میشود. مجدداً، میتوانید به صورت محلی با استفاده از برنامههای افزودنی دیگر توسعه دهید، اما مهم است که پسوند html را قبل از وارد کردن به Google Drive داشته باشید.
- وقتی فایلهای پروژه را به Google Drive وارد میکنید، همه دادههای موجود در آن فایلها رونویسی میشوند. شما نمی توانید متن جزئی را اضافه یا وارد کنید. کل فایل باید آپدیت بشه
- فایل های اسکریپت سمت سرور باید حاوی جاوا اسکریپت معتبر باشند. اگر در فایلهای .js سرور شما خطاهایی وجود داشته باشد، تماس بهروزرسانی API Google Drive با خطای 5xx انجام نمیشود. میتوانید قبل از وارد کردن کد، از این امر جلوگیری کنید.
- فایل های خالی را نمی توان وارد کرد. اگر بخواهید یک فایل خالی را آپلود کنید، تماس بهروزرسانی API Google Drive با خطای 5xx ناموفق خواهد بود.
- فقط اسکریپت های مستقل را می توان وارد یا صادر کرد. از طریق Google Drive API نمی توان به اسکریپت های محدود به کانتینر دسترسی داشت.
- فقط کد منبع را می توان وارد یا صادر کرد. منابعی مانند ویژگیهای پروژه یا گزارشها نیز از طریق Google Drive API در معرض دید قرار نمیگیرند. اقداماتی مانند نسخهسازی اسکریپت، انتشار یا اجرای اسکریپت از طریق Google Drive API امکانپذیر نیست.
- شما محدود به یک فایل
Code.gs
سرور نیستید. برای سهولت در توسعه می توانید کد سرور را در چندین فایل پخش کنید. همه فایلهای سرور در فضای نام جهانی یکسانی بارگذاری میشوند، بنابراین زمانی که میخواهید کپسولهسازی ایمن ارائه کنید از کلاسهای جاوا اسکریپت استفاده کنید.
Drive API
Google Drive API به توسعه دهندگان این امکان را می دهد که به صورت برنامه ریزی شده به فایل های موجود در Google Drive دسترسی داشته باشند. این API از GET
برای دانلود فایل ها و PUT/POST
برای آپلود فایل ها استفاده می کند. لطفاً برای مستندات دقیق و شروع سریع به صفحه نمای کلی Google Drive API مراجعه کنید.
این راهنما بر روی فهرست کردن و جابجایی فایلها با منبع Files با استفاده از این تماسها تمرکز میکند:
مجوز
همه درخواستها به API Google Drive باید توسط یک کاربر تأیید شده از طریق پروتکل OAuth 2.0 مجاز باشد. برای جزئیات بیشتر، لطفاً به اسناد مجوز Google Drive API مراجعه کنید.
علاوه بر سایر حوزههایی که ممکن است یک برنامه به آن نیاز داشته باشد (مانند https://www.googleapis.com/auth/drive
)، همه برنامههایی که تلاش میکنند پروژههای Google Apps Script را وارد یا صادر کنند، باید محدوده خاصی را درخواست کنند:
https://www.googleapis.com/auth/drive.scripts
لیست پروژه های موجود
برای فهرست کردن همه پروژههای Apps Script در Drive خود، از منبع Files برای درخواست فایلهایی با نوع MIME application/vnd.google-apps.script
استفاده کنید. برای فیلتر کردن پاسخ که فقط شامل فایلهایی باشد که متعلق به شماست، پارامتر جستجوی 'me' in owners
قرار دهید.
در اینجا یک نمونه درخواست و پاسخ است که آرایه ای از پروژه های Apps Script را نشان می دهد که از طریق یک پاسخ 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 } ] }
اگر شناسه فایل یک پروژه Apps Script را میدانید، میتوانید مستقیماً آن را با فراخوانی API زیر واکشی کنید:
GET https://www.googleapis.com/drive/v2/files/1234567890abcefghijklmnopqrstuvwxyz
Authorization: Bearer ya29.fakebearerstring
پروژه ها را از Drive صادر کنید
هنگامی که یک منبع File
را از API برگردانید، ویژگی exportLinks
حاوی یک URL برای واکشی برای دریافت محتویات پروژه به عنوان داده JSON خواهد بود. در اینجا نمونه ای از ظاهر این URL آمده است:
https://script.google.com/feeds/download/export?id=1234567890abcefghijklmnopqrstuvwxyz&format=json
برای بازیابی محتویات خود پروژه از این URL درخواست دهید. اطمینان حاصل کنید که یک سرصفحه Authorization
با همان نشانه OAuth Bearer
اضافه کرده اید
در اینجا یک نمونه درخواست و پاسخ آمده است:
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" } ] }
مثال بالا شامل کد یک برنامه وب ساده از راهنمای HTML Service است. توجه داشته باشید که آرایهای از Files
دریافت میکنید که هر کدام دارای 4 ویژگی زیر هستند:
id | شناسه داخلی یک فایل در یک پروژه، برای ارجاع به این فایل در طول به روز رسانی مورد نیاز است. |
name | نام فایل بدون پسوند، همانطور که در ویرایشگر اسکریپت نشان داده شده است. |
type | دو نوع فایل server_js و html هستند. |
source | کد منبع کدگذاری شده موجود در فایل. |
پروژه ها را به Drive وارد کنید
برای بهروزرسانی یک پروژه موجود، یک فراخوانی HTTP PUT
به API update
فایل با fileId
مناسب برقرار کنید. مثال زیر یک تراکنش نمونه برای بخش آپلود رسانه را نشان می دهد. با استفاده از یکی از کتابخانه های سرویس گیرنده ، برنامه شما می تواند به راحتی ابرداده و رسانه را در همان تماس آپلود قرار دهد. توجه داشته باشید که هدر Content-Type
نوع محتوای آپلود شده را در این مورد مشخص می کند.
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" } ] }
ایجاد فایل های جدید در یک پروژه
برای ایجاد یک فایل جدید در یک پروژه، یک درخواست PUT
برای یک فایل بدون ویژگی id
ارسال کنید. اگر فایلی با شناسه ناشناخته اضافه کنید، سیستم یک پیغام خطا ارسال می کند.
حذف فایل های داخل پروژه
برای حذف یک فایل از یک پروژه، یک درخواست PUT
ارسال کنید که شامل آن فایل نیست (اما شامل تمام فایل های دیگر پروژه می شود). هر فایلی که در طی فرآیند واردات بازگردانده نشود از سرور حذف خواهد شد.
تغییر نام فایل ها در یک پروژه
برای تغییر نام یک فایل در یک پروژه، یک درخواست PUT
با id
موجود اما یک name
جدید ارسال کنید. توجه داشته باشید که سرور هرگونه تلاشی برای تغییر type
را نادیده می گیرد.
پروژه جدید ایجاد کنید
برای ایجاد یک پروژه جدید، یک درخواست POST
به API insert
فایل ارسال کنید. مانند update
بهروزرسانی، میتوانید از کتابخانه مشتری برای گنجاندن ابردادههایی مانند نام پروژه و توضیحات استفاده کنید.
در اینجا یک نمونه تراکنش از آپلود رسانه است. با این کار پروژه ای به نام "Untitled" در Drive شما ایجاد می شود. پارامتر convert
در URL مورد نیاز است. مانند تماس update
، سربرگ Content-Type
مورد نیاز است.
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" } ] }