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

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 क्लास का इस्तेमाल करें.

डिस्क 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"
    }
  ]
}

ऊपर दिए गए उदाहरण में, 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 में "बिना टाइटल वाला प्रोजेक्ट" नाम का एक प्रोजेक्ट बन जाएगा. यूआरएल में 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"
    }
  ]
}