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

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

उदाहरण के लिए, कोई डेवलपर अपनी लोकल मशीन पर, अपने पसंदीदा कोड एडिटर की मदद से नया 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 क्लास का इस्तेमाल करें.

डिस्क API

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

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

अनुमति देना

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

प्रोजेक्ट के कॉन्टेंट को वापस पाने के लिए, इस यूआरएल पर अनुरोध करें. पक्का करें कि आपने 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 का कलेक्शन वापस मिलता है. इनमें से हर एक में ये चार प्रॉपर्टी होती हैं:

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

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

किसी मौजूदा प्रोजेक्ट को अपडेट करने के लिए, फ़ाइल update एपीआई को सही fileId के साथ एचटीटीपी 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"
    }
  ]
}