আমদানি ও রপ্তানি প্রকল্প

যেহেতু অ্যাপস স্ক্রিপ্ট প্রকল্পগুলি Google ড্রাইভে থাকে, তাই বিকাশকারীরা Google ড্রাইভ API (অ্যাপস স্ক্রিপ্টে ড্রাইভ পরিষেবার সাথে বিভ্রান্ত না হওয়া) ব্যবহার করে অ্যাপস্ স্ক্রিপ্ট সোর্স কোড আমদানি এবং রপ্তানি করতে পারে।

উদাহরণ স্বরূপ, একজন ডেভেলপার তার পছন্দের কোড এডিটর দিয়ে তার স্থানীয় মেশিনে নতুন Apps স্ক্রিপ্ট কোড লিখতে পারে এবং অন্যান্য ডেভেলপারদের সাথে সহযোগিতা করার জন্য Git এর মত একটি সংস্করণ নিয়ন্ত্রণ ব্যবস্থা ব্যবহার করতে পারে। যখন একটি সংস্করণ চূড়ান্ত করা হয়, তখন তিনি REST API ব্যবহার করে Google ড্রাইভে ফাইলগুলি আপলোড (আমদানি) করতে পারেন, যেখানে সেগুলি অন্য যেকোন অ্যাপস স্ক্রিপ্ট প্রকল্পের মতো ব্যবহার করা যেতে পারে৷

কোড পরিবর্তনগুলি স্থানীয় সংস্করণগুলিতে করা যেতে পারে এবং Google ড্রাইভ API ব্যবহার করে Apps স্ক্রিপ্ট প্রকল্পে সিঙ্ক করা যেতে পারে৷ Google ড্রাইভ থেকে একটি স্থানীয় মেশিনে বিদ্যমান প্রকল্পগুলি ডাউনলোড (রপ্তানি) করা যেতে পারে৷

বৈশিষ্ট্য এবং সীমাবদ্ধতা

আপনি যদি প্রকল্পগুলি আমদানি বা রপ্তানি করতে Google ড্রাইভ API ব্যবহার করতে চান তবে নিম্নলিখিতগুলি সম্পর্কে সচেতন হন:

  1. সার্ভার-সাইড স্ক্রিপ্ট ফাইল ".gs" এ শেষ হবে বলে আশা করা হচ্ছে। আপনি .js ফাইলগুলি ব্যবহার করে স্থানীয়ভাবে বিকাশ করতে চাইতে পারেন, তবে Google ড্রাইভে আমদানি করার আগে একটি .gs এক্সটেনশন অন্তর্ভুক্ত করার জন্য পুনঃনামকরণ নিশ্চিত করুন৷
  2. ক্লায়েন্ট-সাইড স্ক্রিপ্ট ফাইল ".html" দিয়ে শেষ হতে হবে। এর মধ্যে ক্লায়েন্ট-সাইড .html, .js বা .css ফাইল রয়েছে। আবার, আপনি স্থানীয়ভাবে অন্যান্য এক্সটেনশনগুলি ব্যবহার করে বিকাশ করতে পারেন, তবে Google ড্রাইভে আমদানি করার আগে .html এক্সটেনশন থাকা গুরুত্বপূর্ণ৷
  3. আপনি যখন প্রোজেক্ট ফাইলগুলিকে Google ড্রাইভে আমদানি করেন, তখন সেই ফাইলগুলিতে থাকা সমস্ত ডেটা ওভাররাইট হয়ে যাবে৷ আপনি আংশিক পাঠ্য যোগ বা সন্নিবেশ করতে পারবেন না; সম্পূর্ণ ফাইল আপডেট করা আবশ্যক.
  4. সার্ভার-সাইড স্ক্রিপ্ট ফাইলে অবশ্যই বৈধ জাভাস্ক্রিপ্ট থাকতে হবে। আপনার সার্ভার .js ফাইলে ত্রুটি থাকলে, Google Drive API আপডেট কলটি 5xx ত্রুটির সাথে ব্যর্থ হবে। আপনি আমদানি করার আগে আপনার কোড লিন্ট করে এটি প্রতিরোধ করতে পারেন।
  5. খালি ফাইল আমদানি করা যাবে না. আপনি যদি একটি খালি ফাইল আপলোড করার চেষ্টা করেন তবে Google ড্রাইভ API আপডেট কলটি 5xx ত্রুটির সাথে ব্যর্থ হবে৷
  6. শুধুমাত্র স্বতন্ত্র স্ক্রিপ্ট আমদানি বা রপ্তানি করা যেতে পারে. কন্টেইনার-বাউন্ড স্ক্রিপ্টগুলি Google ড্রাইভ API-এর মাধ্যমে অ্যাক্সেস করা যাবে না।
  7. শুধুমাত্র উৎস কোড আমদানি বা রপ্তানি করা যাবে. প্রোজেক্টের বৈশিষ্ট্য বা লগের মতো সংস্থানগুলিও Google ড্রাইভ API-এর মাধ্যমে প্রকাশ করা হয় না। Google ড্রাইভ API এর মাধ্যমে স্ক্রিপ্ট সংস্করণ, প্রকাশ বা স্ক্রিপ্ট চালানোর মতো কাজগুলি সম্ভব নয়৷
  8. আপনি একটি একক সার্ভার Code.gs ফাইলে সীমাবদ্ধ নন। আপনি উন্নয়নের সহজতার জন্য একাধিক ফাইল জুড়ে সার্ভার কোড ছড়িয়ে দিতে পারেন। সমস্ত সার্ভার ফাইল একই গ্লোবাল নেমস্পেসে লোড করা হয়, তাই যখন আপনি নিরাপদ এনক্যাপসুলেশন দিতে চান তখন JavaScript ক্লাস ব্যবহার করুন।

ড্রাইভ এপিআই

Google Drive API ডেভেলপারদেরকে Google Drive-এ প্রোগ্রামগতভাবে ফাইল অ্যাক্সেস করতে দেয়। এই API ফাইলগুলি ডাউনলোড করতে GET এবং ফাইল আপলোড করতে PUT/POST ব্যবহার করে। বিস্তারিত ডকুমেন্টেশন এবং দ্রুত শুরুর জন্য অনুগ্রহ করে Google ড্রাইভ API ওভারভিউ পৃষ্ঠা দেখুন।

এই নির্দেশিকাটি এই কলগুলি ব্যবহার করে ফাইল রিসোর্সের সাথে ফাইলগুলিকে তালিকাভুক্ত এবং সরানোর উপর ফোকাস করবে:

অনুমোদন

Google Drive API-এর সমস্ত অনুরোধ অবশ্যই OAuth 2.0 প্রোটোকলের মাধ্যমে একজন প্রমাণীকৃত ব্যবহারকারীর দ্বারা অনুমোদিত হতে হবে। আরও বিশদ বিবরণের জন্য, অনুগ্রহ করে Google Drive API অনুমোদনকারী ডকুমেন্টেশন দেখুন।

অন্যান্য স্কোপের পাশাপাশি একটি অ্যাপ্লিকেশনের প্রয়োজন হতে পারে (যেমন https://www.googleapis.com/auth/drive ), Google Apps স্ক্রিপ্ট প্রকল্পগুলি আমদানি বা রপ্তানি করার চেষ্টা করা সমস্ত অ্যাপ্লিকেশনকে বিশেষ সুযোগের অনুরোধ করতে হবে:

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

বিদ্যমান প্রকল্পের তালিকা করুন

আপনার ড্রাইভে সমস্ত Apps স্ক্রিপ্ট প্রকল্প তালিকাভুক্ত করতে, MIME ধরনের application/vnd.google-apps.script সহ ফাইলগুলির জন্য অনুসন্ধান করতে ফাইল সংস্থান ব্যবহার করুন৷ শুধুমাত্র আপনার মালিকানাধীন ফাইলগুলি অন্তর্ভুক্ত করার প্রতিক্রিয়া ফিল্টার করতে, 'me' in owners অন্তর্ভুক্ত করুন।

এখানে একটি নমুনা অনুরোধ এবং প্রতিক্রিয়া যা একটি JSON প্রতিক্রিয়ার মাধ্যমে ফিরে আসা Apps স্ক্রিপ্ট প্রকল্পগুলির একটি অ্যারে দেখায়৷

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 স্ক্রিপ্ট প্রকল্পের ফাইল আইডি জানেন, তাহলে আপনি নিম্নলিখিত API কলের মাধ্যমে সরাসরি এটি আনতে পারেন:

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

ড্রাইভ থেকে প্রকল্পগুলি রপ্তানি করুন৷

একবার আপনি এপিআই থেকে একটি File রিসোর্স ফেরত পেলে, exportLinks প্রপার্টিতে JSON ডেটা হিসাবে প্রোজেক্টের বিষয়বস্তু পাওয়ার জন্য একটি URL থাকবে। এই URLটি দেখতে কেমন হতে পারে তার একটি নমুনা এখানে রয়েছে:

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

প্রকল্পের বিষয়বস্তু পুনরুদ্ধার করার জন্য এই URL-এ একটি অনুরোধ করুন। নিশ্চিত করুন যে আপনি একই OAuth Bearer টোকেন সহ একটি Authorization শিরোনাম অন্তর্ভুক্ত করেছেন

এখানে একটি নমুনা অনুরোধ এবং প্রতিক্রিয়া আছে:

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 পরিষেবা নির্দেশিকা থেকে একটি সাধারণ ওয়েব অ্যাপের কোড রয়েছে৷ মনে রাখবেন যে আপনি নিম্নলিখিত 4টি বৈশিষ্ট্য সহ Files এর একটি অ্যারে ফিরে পাবেন:

id একটি প্রকল্পের মধ্যে একটি ফাইলের অভ্যন্তরীণ শনাক্তকারী, আপডেটের সময় এই ফাইলটি উল্লেখ করার জন্য প্রয়োজন৷
name স্ক্রিপ্ট এডিটরে প্রদর্শিত এক্সটেনশন ছাড়া ফাইলের নাম।
type দুই ধরনের ফাইল হল সার্ভার_জেএস এবং এইচটিএমএল।
source ফাইলে থাকা এনকোড করা সোর্স কোড।

ড্রাইভে প্রকল্প আমদানি করুন

একটি বিদ্যমান প্রজেক্ট আপডেট করতে, উপযুক্ত fileId সহ ফাইল update API-এ একটি HTTP PUT কল করুন। নীচের উদাহরণটি মিডিয়া-আপলোড অংশের জন্য একটি নমুনা লেনদেন দেখায়। একটি ক্লায়েন্ট লাইব্রেরি ব্যবহার করে, আপনার অ্যাপ্লিকেশনটি একই আপলোড কলে সহজেই মেটাডেটা এবং মিডিয়া অন্তর্ভুক্ত করতে পারে। নোট করুন যে 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"
    }
  ]
}

একটি প্রকল্পের মধ্যে নতুন ফাইল তৈরি করুন

একটি প্রকল্পের মধ্যে একটি নতুন ফাইল তৈরি করতে, id সম্পত্তি ছাড়া একটি ফাইলের জন্য একটি PUT অনুরোধ পাঠান৷ আপনি যদি একটি অজানা শনাক্তকারীর সাথে একটি ফাইল অন্তর্ভুক্ত করেন, তাহলে সিস্টেম একটি ত্রুটি বার্তা নিক্ষেপ করবে৷

একটি প্রকল্পের মধ্যে ফাইল মুছুন

একটি প্রকল্প থেকে একটি ফাইল মুছে ফেলতে, একটি PUT অনুরোধ পাঠান যা সেই ফাইলটি অন্তর্ভুক্ত করে না (কিন্তু এটি প্রকল্পের অন্যান্য সমস্ত ফাইল অন্তর্ভুক্ত করে)। আমদানি প্রক্রিয়া চলাকালীন ফেরত পাঠানো না হয় এমন কোনো ফাইল সার্ভার থেকে মুছে ফেলা হবে।

একটি প্রকল্পের মধ্যে ফাইলগুলি পুনঃনামকরণ করুন

একটি প্রকল্পের মধ্যে একটি ফাইল পুনঃনামকরণ করতে, বিদ্যমান id কিন্তু একটি নতুন name সহ একটি PUT অনুরোধ পাঠান। নোট করুন যে সার্ভার type পরিবর্তন করার কোনো প্রচেষ্টা উপেক্ষা করে।

নতুন প্রকল্প তৈরি করুন

একটি নতুন প্রকল্প তৈরি করতে, ফাইল insert API এ একটি POST অনুরোধ পাঠান৷ অনেকটা update কলের মতো, আপনি প্রকল্পের নাম এবং বিবরণের মতো মেটাডেটা অন্তর্ভুক্ত করতে একটি ক্লায়েন্ট লাইব্রেরি ব্যবহার করতে পারেন।

এখানে মিডিয়া আপলোডের একটি নমুনা লেনদেন। এটি আপনার ড্রাইভে "শিরোনামহীন" নামে একটি প্রকল্প তৈরি করবে৷ URL-এ convert পরামিতি প্রয়োজন। 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"
    }
  ]
}