Google 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 का इस्तेमाल करना है, तो इन बातों का ध्यान रखें:
- सर्वर-साइड स्क्रिप्ट फ़ाइलों के नाम के आखिर में ".gs" होना चाहिए. आपके पास .js फ़ाइलों का इस्तेमाल करके, स्थानीय तौर पर डेवलपमेंट करने का विकल्प होता है. हालांकि, Google Drive में इंपोर्ट करने से पहले, फ़ाइल का नाम बदलकर .gs एक्सटेंशन शामिल करना न भूलें.
- क्लाइंट-साइड स्क्रिप्ट फ़ाइलों के नाम के आखिर में ".html" होना चाहिए. इसमें क्लाइंट-साइड .html, .js या .css फ़ाइलें शामिल हैं. आपके पास अन्य एक्सटेंशन का इस्तेमाल करके, स्थानीय तौर पर डेवलपमेंट करने का विकल्प होता है. हालांकि, Google Drive में इंपोर्ट करने से पहले, .html एक्सटेंशन होना ज़रूरी है.
- प्रोजेक्ट की फ़ाइलों को Google Drive में इंपोर्ट करने पर, उन फ़ाइलों में मौजूद मौजूदा डेटा मिट जाएगा. टेक्स्ट के कुछ हिस्से को जोड़ा या डाला नहीं जा सकता. पूरी फ़ाइल को अपडेट करना होगा.
- सर्वर-साइड स्क्रिप्ट फ़ाइलों में मान्य JavaScript होना चाहिए. अगर आपके सर्वर की .js फ़ाइलों में गड़बड़ियां हैं, तो Google Drive API को अपडेट करने का अनुरोध पूरा नहीं होगा. साथ ही, 5xx गड़बड़ी दिखेगी. कोड इंपोर्ट करने से पहले, उसे जांचकर इस समस्या से बचा जा सकता है.
- खाली फ़ाइलों को इंपोर्ट नहीं किया जा सकता. अगर आपने कोई खाली फ़ाइल अपलोड करने की कोशिश की, तो Google Drive API के अपडेट कॉल में 5xx गड़बड़ी का मैसेज दिखेगा.
- सिर्फ़ स्टैंडअलोन स्क्रिप्ट इंपोर्ट या एक्सपोर्ट की जा सकती हैं. कंटेनर से जुड़ी स्क्रिप्ट को Google Drive API के ज़रिए ऐक्सेस नहीं किया जा सकता.
- सिर्फ़ सोर्स कोड को इंपोर्ट या एक्सपोर्ट किया जा सकता है. Google Drive API, प्रोजेक्ट की प्रॉपर्टी या लॉग जैसे संसाधन भी नहीं दिखाता है. Google Drive API का इस्तेमाल करके, स्क्रिप्ट वर्शनिंग, स्क्रिप्ट पब्लिश करने या उसे चलाने जैसी कार्रवाइयां नहीं की जा सकतीं.
- आपके पास एक से ज़्यादा सर्वर
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
यहां दिए गए सैंपल अनुरोधों को आज़माने के लिए, OAuth 2.0 Playground से मिला OAuth 2.0 बियरर टोकन इस्तेमाल करें.
मौजूदा प्रोजेक्ट की सूची बनाना
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 का एक कलेक्शन वापस मिलता है. इसमें हर 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" } ] }
किसी प्रोजेक्ट में नई फ़ाइलें बनाना
किसी प्रोजेक्ट में नई फ़ाइल बनाने के लिए, PUT प्रॉपर्टी के बिना फ़ाइल का अनुरोध करने के लिए PUT अनुरोध भेजें.id अगर आपने ऐसी फ़ाइल शामिल की है जिसमें अनजान आइडेंटिफ़ायर है, तो सिस्टम गड़बड़ी का मैसेज दिखाएगा.
किसी प्रोजेक्ट में मौजूद फ़ाइलें मिटाना
किसी प्रोजेक्ट से कोई फ़ाइल मिटाने के लिए, 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" } ] }