واردات و صادرات پروژه ها

از آنجایی که پروژه‌های 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 برای وارد کردن یا صادرات پروژه‌ها استفاده کنید، به موارد زیر توجه داشته باشید:

  1. انتظار می رود فایل های اسکریپت سمت سرور به ".gs" ختم شوند. ممکن است بخواهید با استفاده از فایل‌های js. به صورت محلی توسعه دهید، اما مطمئن شوید که قبل از وارد کردن به Google Drive، پسوند .gs را تغییر نام دهید.
  2. فایل های اسکریپت سمت کلاینت باید با ".html" ختم شوند. این شامل فایل‌های html، .js یا css. سمت کلاینت می‌شود. مجدداً، می‌توانید به صورت محلی با استفاده از برنامه‌های افزودنی دیگر توسعه دهید، اما مهم است که پسوند html را قبل از وارد کردن به Google Drive داشته باشید.
  3. وقتی فایل‌های پروژه را به Google Drive وارد می‌کنید، همه داده‌های موجود در آن فایل‌ها رونویسی می‌شوند. شما نمی توانید متن جزئی را اضافه یا وارد کنید. کل فایل باید آپدیت بشه
  4. فایل های اسکریپت سمت سرور باید حاوی جاوا اسکریپت معتبر باشند. اگر در فایل‌های .js سرور شما خطاهایی وجود داشته باشد، تماس به‌روزرسانی API Google Drive با خطای 5xx انجام نمی‌شود. می‌توانید قبل از وارد کردن کد، از این امر جلوگیری کنید.
  5. فایل های خالی را نمی توان وارد کرد. اگر بخواهید یک فایل خالی را آپلود کنید، تماس به‌روزرسانی API Google Drive با خطای 5xx ناموفق خواهد بود.
  6. فقط اسکریپت های مستقل را می توان وارد یا صادر کرد. از طریق Google Drive API نمی توان به اسکریپت های محدود به کانتینر دسترسی داشت.
  7. فقط کد منبع را می توان وارد یا صادر کرد. منابعی مانند ویژگی‌های پروژه یا گزارش‌ها نیز از طریق Google Drive API در معرض دید قرار نمی‌گیرند. اقداماتی مانند نسخه‌سازی اسکریپت، انتشار یا اجرای اسکریپت از طریق Google Drive API امکان‌پذیر نیست.
  8. شما محدود به یک فایل 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"
    }
  ]
}