प्रोजेक्ट इंपोर्ट और एक्सपोर्ट करना

Apps Script प्रोजेक्ट, Google Drive पर मौजूद हैं. इसलिए, डेवलपर Google Drive API का इस्तेमाल करके Apps Script सोर्स कोड को इंपोर्ट और एक्सपोर्ट कर सकते हैं. इसे Apps Script में Drive सेवा से अलग कर सकते हैं.

उदाहरण के लिए, कोई डेवलपर अपनी लोकल मशीन पर अपने पसंदीदा कोड एडिटर की मदद से, नया 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 फ़ाइलें शामिल होती हैं. फिर से, किसी दूसरे एक्सटेंशन का इस्तेमाल करके स्थानीय तौर पर डेवलप किया जा सकता है, लेकिन Google Drive में इंपोर्ट करने से पहले .html एक्सटेंशन होना ज़रूरी है.
  3. प्रोजेक्ट फ़ाइलों को Google Drive में इंपोर्ट करने पर, उन फ़ाइलों में मौजूद पूरा डेटा ओवरराइट हो जाएगा. आप आंशिक टेक्स्ट जोड़ या शामिल नहीं कर सकते; पूरी फ़ाइल अपडेट होनी चाहिए.
  4. सर्वर साइड स्क्रिप्ट फ़ाइलों में मान्य JavaScript होना चाहिए. अगर आपके सर्वर की .js फ़ाइलों में कोई गड़बड़ी है, तो Google Drive API अपडेट कॉल 5xx गड़बड़ी के साथ नहीं हो पाएगा. इंपोर्ट करने से पहले अपने कोड को लिंटिंग करके इसे रोका जा सकता है.
  5. खाली फ़ाइलें इंपोर्ट नहीं की जा सकतीं. अगर कोई खाली फ़ाइल अपलोड करने की कोशिश की जाती है, तो Google Drive API अपडेट कॉल 5xx गड़बड़ी के साथ नहीं हो पाएगा.
  6. सिर्फ़ स्टैंडअलोन स्क्रिप्ट इंपोर्ट या एक्सपोर्ट की जा सकती हैं. कंटेनर के हिसाब से बनी स्क्रिप्ट को Google Drive API से ऐक्सेस नहीं किया जा सकता.
  7. सिर्फ़ सोर्स कोड को इंपोर्ट या एक्सपोर्ट किया जा सकता है. प्रोजेक्ट प्रॉपर्टी या लॉग जैसे संसाधन भी Google Drive API की मदद से सार्वजनिक नहीं किए जाते. Google Drive API से स्क्रिप्ट वर्शनिंग, स्क्रिप्ट को पब्लिश या एक्ज़ीक्यूट करने जैसी कार्रवाइयां नहीं की जा सकतीं.
  8. सिर्फ़ एक सर्वर Code.gs फ़ाइल का इस्तेमाल किया जा सकता है. आसानी से डेवलपमेंट के लिए, आप कई फ़ाइलों में सर्वर कोड फैला सकते हैं. सभी सर्वर फ़ाइलें एक ही ग्लोबल नेमस्पेस में लोड होती हैं. इसलिए, सुरक्षित एनकैप्सुलेशन देने के लिए, JavaScript क्लास का इस्तेमाल करें.

Drive API

Google Drive API से डेवलपर, प्रोग्राम के हिसाब से Google Drive में मौजूद फ़ाइलों को ऐक्सेस कर सकते हैं. यह एपीआई, फ़ाइलें डाउनलोड करने के लिए GET और फ़ाइलें अपलोड करने के लिए PUT/POST का इस्तेमाल करता है. ज़्यादा जानकारी वाले दस्तावेज़ और क्विकस्टार्ट के लिए, Google Drive API की खास जानकारी देने वाला पेज देखें.

इस गाइड में इन कॉल का इस्तेमाल करके, फ़ाइलों के रिसॉर्स की मदद से फ़ाइलों की सूची बनाने और उन्हें ट्रांसफ़र करने पर फ़ोकस किया जाएगा:

अनुमति देना

Google Drive API को किए जाने वाले सभी अनुरोधों की पुष्टि, किसी ऐसे उपयोगकर्ता के पास होनी चाहिए जिसके लिए OAuth 2.0 प्रोटोकॉल की मदद से पुष्टि की गई हो. ज़्यादा जानकारी के लिए, कृपया Google Drive API से जुड़ी अनुमति देने वाले दस्तावेज़ देखें.

ऐप्लिकेशन को जिन दूसरे दायरे की ज़रूरत पड़ सकती है (जैसे कि https://www.googleapis.com/auth/drive), उन्हें Google Apps Script प्रोजेक्ट को इंपोर्ट या एक्सपोर्ट करने की कोशिश करने वाले सभी ऐप्लिकेशन को खास दायरे का अनुरोध करना होगा:

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

मौजूदा प्रोजेक्ट की सूची बनाना

अपनी Drive में मौजूद सभी Apps Script प्रोजेक्ट की सूची बनाने के लिए, फ़ाइल संसाधन का इस्तेमाल करके, application/vnd.google-apps.script के MIME टाइप वाली फ़ाइलों से जुड़ी क्वेरी करें. जवाब को फ़िल्टर करके सिर्फ़ अपने मालिकाना हक वाली फ़ाइलों को शामिल करने के लिए, सर्च पैरामीटर 'me' in owners शामिल करें.

यहां अनुरोध और उसके जवाब का एक उदाहरण दिया गया है जो JSON रिस्पॉन्स के ज़रिए लौटाए गए Apps Script प्रोजेक्ट की कैटगरी दिखाता है.

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 प्रोजेक्ट का फ़ाइल आईडी पता है, तो इसे नीचे दिए गए एपीआई कॉल की मदद से सीधे फ़ेच किया जा सकता है:

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

Drive से प्रोजेक्ट एक्सपोर्ट करना

एपीआई से File रिसॉर्स वापस मिलने के बाद, exportLinks प्रॉपर्टी में एक यूआरएल होगा, जिसे फ़ेच करके प्रोजेक्ट का कॉन्टेंट JSON डेटा के तौर पर पाया जा सकेगा. यहां एक नमूना दिया गया है कि यह यूआरएल कैसा दिखेगा:

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

प्रोजेक्ट का कॉन्टेंट वापस पाने के लिए, इस यूआरएल से अनुरोध करें. पक्का करें कि आपने एक जैसे 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"
    }
  ]
}

ऊपर दिए गए उदाहरण में, एचटीएमएल सेवा गाइड में मौजूद सामान्य वेब ऐप्लिकेशन के लिए कोड शामिल है. ध्यान दें कि आपको Files की कैटगरी वापस मिल जाती है, जिसमें हर एक की प्रॉपर्टी में नीचे दी गई चार प्रॉपर्टी होंगी:

id प्रोजेक्ट में मौजूद फ़ाइल का इंटरनल आइडेंटिफ़ायर, जो अपडेट के दौरान इस फ़ाइल का रेफ़रंस देने के लिए ज़रूरी है.
name बिना एक्सटेंशन वाली फ़ाइल का नाम, जैसा कि स्क्रिप्ट एडिटर में दिखाया गया है.
type सर्वर_js और एचटीएमएल दो तरह की फ़ाइलें होते हैं.
source कोड में बदला गया फ़ाइल में मौजूद सोर्स कोड.

Drive में प्रोजेक्ट इंपोर्ट करें

किसी मौजूदा प्रोजेक्ट को अपडेट करने के लिए, सही fileId के साथ update API फ़ाइल में एक एचटीटीपी 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 के साथ PUT अनुरोध भेजें, लेकिन नया name. ध्यान दें कि सर्वर type में बदलने की किसी भी कोशिश को अनदेखा कर देता है.

नया प्रोजेक्ट बनाएं

नया प्रोजेक्ट बनाने के लिए, फ़ाइल insert एपीआई को POST अनुरोध भेजें. update कॉल की तरह ही, प्रोजेक्ट का नाम और ब्यौरा जैसा मेटाडेटा शामिल करने के लिए, क्लाइंट लाइब्रेरी का इस्तेमाल किया जा सकता है.

यहां मीडिया अपलोड का एक नमूना लेन-देन दिया गया है. इससे आपकी Drive में, "Untitled" नाम का प्रोजेक्ट बन जाएगा. यूआरएल में 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"
    }
  ]
}