เนื่องจากโปรเจ็กต์ Apps Script อยู่ใน Google ไดรฟ์ นักพัฒนาซอฟต์แวร์จึงสามารถนำเข้าและส่งออกซอร์สโค้ดของ Apps Script ได้โดยใช้ Google ไดรฟ์ API (อย่าสับสนกับบริการไดรฟ์ ใน Apps Script)
ตัวอย่างเช่น นักพัฒนาซอฟต์แวร์สามารถเขียนโค้ด Apps Script ใหม่ในเครื่องของตนเอง ด้วยโปรแกรมแก้ไขโค้ดที่ชื่นชอบ และใช้ระบบควบคุมเวอร์ชัน เช่น Git เพื่อทำงานร่วมกับนักพัฒนาซอฟต์แวร์คนอื่นๆ เมื่อ เวอร์ชันเสร็จสมบูรณ์แล้ว เธอจะอัปโหลด (นำเข้า) ไฟล์ไปยัง Google ไดรฟ์ได้โดยใช้ REST API ซึ่งจะใช้ไฟล์ได้เหมือนกับโปรเจ็กต์ Apps Script อื่นๆ
คุณสามารถทำการเปลี่ยนแปลงโค้ดในเวอร์ชันในเครื่องและซิงค์กับโปรเจ็กต์ Apps Script โดยใช้ Google Drive API คุณดาวน์โหลด (ส่งออก) โปรเจ็กต์ที่มีอยู่จาก Google ไดรฟ์ไปยังเครื่องของคุณเองได้
ฟีเจอร์และข้อจำกัด
หากต้องการใช้ Google ไดรฟ์ API เพื่อนำเข้าหรือส่งออกโปรเจ็กต์ โปรดทราบข้อมูลต่อไปนี้
- ไฟล์สคริปต์ฝั่งเซิร์ฟเวอร์ควรลงท้ายด้วย ".gs" คุณอาจต้องการพัฒนาในเครื่องโดยใช้ไฟล์ .js แต่โปรดเปลี่ยนชื่อให้มีนามสกุล .gs ก่อนนำเข้าไปยัง Google ไดรฟ์
- ไฟล์สคริปต์ฝั่งไคลเอ็นต์ต้องลงท้ายด้วย ".html" ซึ่งรวมถึงไฟล์ .html, .js หรือ .css ฝั่งไคลเอ็นต์ คุณสามารถพัฒนาในเครื่องโดยใช้ส่วนขยายอื่นๆ ได้ แต่สิ่งสำคัญคือต้องมีส่วนขยาย .html ก่อนที่จะนำเข้าไปยัง Google ไดรฟ์
- เมื่อนำเข้าไฟล์โปรเจ็กต์ไปยัง Google ไดรฟ์ ระบบจะเขียนทับข้อมูลที่มีอยู่ทั้งหมดในไฟล์เหล่านั้น คุณไม่สามารถผนวกหรือแทรกข้อความบางส่วนได้ คุณต้องอัปเดตทั้งไฟล์
- ไฟล์สคริปต์ฝั่งเซิร์ฟเวอร์ต้องมี JavaScript ที่ถูกต้อง หากมีข้อผิดพลาดในไฟล์ .js ของเซิร์ฟเวอร์ การเรียกอัปเดต Google Drive API จะล้มเหลวพร้อมข้อผิดพลาด 5xx คุณป้องกันปัญหานี้ได้โดยการตรวจสอบโค้ดก่อน นำเข้า
- นำเข้าไฟล์ที่ว่างเปล่าไม่ได้ การเรียกอัปเดต Google ไดรฟ์ API จะล้มเหลวพร้อมข้อผิดพลาด 5xx หากคุณพยายามอัปโหลดไฟล์ที่ว่างเปล่า
- นำเข้าหรือส่งออกได้เฉพาะสคริปต์แบบสแตนด์อโลน สคริปต์ที่ผูกกับคอนเทนเนอร์ จะเข้าถึงผ่าน Google Drive API ไม่ได้
- นำเข้าหรือส่งออกได้เฉพาะซอร์สโค้ด นอกจากนี้ ระบบจะไม่แสดงทรัพยากร เช่น พร็อพเพอร์ตี้หรือบันทึกของโปรเจ็กต์ผ่าน Google ไดรฟ์ API ด้วย คุณไม่สามารถดำเนินการต่างๆ เช่น การกำหนดเวอร์ชันสคริปต์ การเผยแพร่ หรือการเรียกใช้สคริปต์ผ่าน Google ไดรฟ์ API
- คุณไม่จำเป็นต้องใช้ไฟล์
Code.gs
เซิร์ฟเวอร์เดียว คุณสามารถกระจายโค้ดฝั่งเซิร์ฟเวอร์ ไปยังหลายไฟล์เพื่อให้พัฒนาได้ง่าย ระบบจะโหลดไฟล์เซิร์ฟเวอร์ทั้งหมดลงในเนมสเปซส่วนกลางเดียวกัน ดังนั้นให้ใช้คลาส JavaScript เมื่อต้องการให้การแคปซูลที่ปลอดภัย
API ไดรฟ์
Google ไดรฟ์ API ช่วยให้นักพัฒนาซอฟต์แวร์เข้าถึงไฟล์ใน Google ไดรฟ์
โดยใช้โปรแกรมได้ API นี้ใช้ 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
แสดงโปรเจ็กต์ที่มีอยู่
หากต้องการแสดงโปรเจ็กต์ Apps Script ทั้งหมดในไดรฟ์ ให้ใช้แหล่งข้อมูลไฟล์
เพื่อค้นหาไฟล์ที่มี MIME ประเภท application/vnd.google-apps.script
หากต้องการกรองคำตอบให้มีเฉพาะไฟล์ที่คุณเป็นเจ้าของ ให้ใส่พารามิเตอร์การค้นหา 'me' in owners
ต่อไปนี้คือคำขอและการตอบกลับตัวอย่างที่แสดงอาร์เรย์ของโปรเจ็กต์ Apps Script ที่ส่งกลับผ่านการตอบกลับ JSON
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 คุณจะดึงข้อมูลได้โดยตรง ด้วยการเรียก API ต่อไปนี้
GET https://www.googleapis.com/drive/v2/files/1234567890abcefghijklmnopqrstuvwxyz
Authorization: Bearer ya29.fakebearerstring
ส่งออกโปรเจ็กต์จากไดรฟ์
เมื่อได้รับทรัพยากร File
จาก API
พร็อพเพอร์ตี้ exportLinks
จะมี URL ที่ใช้ดึงข้อมูลเนื้อหาของ
โปรเจ็กต์เป็นข้อมูล JSON ตัวอย่างลักษณะของ URL นี้
https://script.google.com/feeds/download/export?id=1234567890abcefghijklmnopqrstuvwxyz&format=json
ส่งคำขอไปยัง URL นี้เพื่อดึงเนื้อหาของโปรเจ็กต์
ตรวจสอบว่าคุณได้รวมส่วนหัว Authorization
ที่มีโทเค็น Bearer
OAuth เดียวกัน
ตัวอย่างคำขอและการตอบกลับมีดังนี้
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
ซึ่งแต่ละรายการมีพร็อพเพอร์ตี้ 4 รายการต่อไปนี้
id |
ตัวระบุภายในของไฟล์ภายในโปรเจ็กต์ ซึ่งจำเป็นต่อการอ้างอิงไฟล์นี้ในระหว่างการอัปเดต |
name |
ชื่อไฟล์ที่ไม่มีนามสกุลตามที่แสดงในโปรแกรมแก้ไขสคริปต์ |
type |
ไฟล์มี 2 ประเภท ได้แก่ server_js และ html |
source |
ซอร์สโค้ดที่เข้ารหัสซึ่งอยู่ในไฟล์ |
นำเข้าโปรเจ็กต์ไปยังไดรฟ์
หากต้องการอัปเดตโปรเจ็กต์ที่มีอยู่ ให้เรียกใช้ HTTP PUT
ไปยัง API ของไฟล์
update
ด้วย fileId
ที่เหมาะสม
ตัวอย่างด้านล่างแสดงธุรกรรมตัวอย่างสำหรับส่วนการอัปโหลดสื่อ การใช้ไลบรารีไคลเอ็นต์อย่างใดอย่างหนึ่งจะช่วยให้แอปพลิเคชันของคุณใส่ข้อมูลเมตาและสื่อในการเรียกอัปโหลดเดียวกันได้อย่างง่ายดาย
โปรดทราบว่าส่วนหัว
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
สำหรับไฟล์ที่ไม่มีพร็อพเพอร์ตี้ id
หากคุณรวมไฟล์ที่มีตัวระบุที่ไม่รู้จัก ระบบ
จะแสดงข้อความแสดงข้อผิดพลาด
ลบไฟล์ภายในโปรเจ็กต์
หากต้องการลบไฟล์ออกจากโปรเจ็กต์ ให้ส่งคำขอ PUT
ที่ไม่มีไฟล์นั้น (แต่มีไฟล์อื่นๆ ทั้งหมดในโปรเจ็กต์) ระบบจะลบไฟล์ที่ไม่ได้ส่งกลับในระหว่างกระบวนการนำเข้าออกจากเซิร์ฟเวอร์
เปลี่ยนชื่อไฟล์ภายในโปรเจ็กต์
หากต้องการเปลี่ยนชื่อไฟล์ภายในโปรเจ็กต์ ให้ส่งPUT
คำขอพร้อมid
ที่มีอยู่
แต่มีname
ใหม่ โปรดทราบว่าเซิร์ฟเวอร์จะไม่สนใจความพยายามใดๆ ที่จะเปลี่ยนเป็น type
สร้างโปรเจ็กต์ใหม่
หากต้องการสร้างโปรเจ็กต์ใหม่ ให้ส่งคำขอ POST
ไปยังไฟล์
insert
API เช่นเดียวกับupdate
การเรียก
คุณสามารถใช้ไลบรารีของไคลเอ็นต์เพื่อรวมข้อมูลเมตา เช่น ชื่อโปรเจ็กต์และ
คำอธิบาย
ตัวอย่างธุรกรรมการอัปโหลดสื่อมีดังนี้ ซึ่งจะสร้างโปรเจ็กต์
ชื่อ "ไม่มีชื่อ" ในไดรฟ์ ต้องระบุconvert
พารามิเตอร์ใน URL
เช่นเดียวกับการเรียก 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" } ] }