מאחר שפרויקטים של Apps Script נמצאים ב-Google Drive, מפתחים יכולים לייבא ולייצא את קוד המקור של Apps Script באמצעות Google Drive API (להבדיל משירות Drive ב-Apps Script).
לדוגמה, מפתחת יכולה לכתוב קוד חדש של Apps Script במחשב המקומי שלה באמצעות עורך הקוד המועדף עליה, ולהשתמש במערכת לניהול גרסאות כמו Git כדי לשתף פעולה עם מפתחים אחרים. אחרי שמסיימים גרסה, היא יכולה להעלות (לייבא) את הקבצים ל-Google Drive באמצעות API ל-REST, ולהשתמש בהם כמו בכל פרויקט אחר ב-Apps Script.
ניתן לבצע שינויים בקוד בגרסאות המקומיות ולסנכרן אותו עם פרויקט Apps Script באמצעות Google Drive API. אפשר להוריד (לייצא) פרויקטים קיימים מ-Google Drive למכונה מקומית.
תכונות ומגבלות
אם אתם רוצים להשתמש ב-Google Drive API כדי לייבא או לייצא פרויקטים, חשוב שתשימו לב לנקודות הבאות:
- קובצי סקריפט בצד השרת אמורים להסתיים ב-".gs". מומלץ לפתח באופן מקומי באמצעות קובצי .js, אבל חשוב לשנות את השם כך שיכלול תוסף gs. לפני הייבוא ל-Google Drive.
- קובצי סקריפט בצד הלקוח צריכים להסתיים ב-".html". כולל קובצי .html, .js או .css בצד הלקוח. שוב, אפשר לפתח באופן מקומי באמצעות תוספים אחרים, אבל חשוב להתקין את תוסף html .לפני הייבוא ל-Google Drive.
- כשמייבאים קובצי פרויקט אל Google Drive, כל הנתונים הקיימים בקבצים האלה מוחלפים. אי אפשר להוסיף או להוסיף טקסט חלקי. צריך לעדכן את כל הקובץ.
- קובצי סקריפט בצד השרת חייבים להכיל JavaScript חוקי. אם יש שגיאות בקובצי ה-js של השרת, הקריאה לעדכון Google Drive API תיכשל ותופיע שגיאה 5xx. אפשר למנוע זאת על ידי שכפול הקוד לפני הייבוא.
- אי אפשר לייבא קבצים ריקים. הקריאה לעדכון Google Drive API תיכשל ותוצג שגיאת 5xx אם תנסו להעלות קובץ ריק.
- אפשר לייבא או לייצא רק סקריפטים עצמאיים. לא ניתן לגשת לסקריפטים שמקושרים לקונטיינרים דרך Google Drive API.
- ניתן לייבא או לייצא רק קוד מקור. גם משאבים כמו מאפייני פרויקט או יומנים לא נחשפים דרך Google Drive API. לא ניתן לבצע פעולות כמו ניהול גרסאות של סקריפט, פרסום או הפעלה של הסקריפט באמצעות Google Drive API.
- אתם לא מוגבלים לקובץ
Code.gs
של שרת אחד. תוכלו לפזר את קוד השרת על פני מספר קבצים כדי שיהיה קל לפתח אותו. כל קובצי השרת נטענים באותו מרחב שמות גלובלי, לכן כדאי להשתמש במחלקות JavaScript כשרוצים לספק אנקפסולציה בטוחה.
Drive API
ה-API של Google Drive מאפשר למפתחים לגשת לקבצים ב-Google Drive באופן פרוגרמטי. ב-API הזה נעשה שימוש ב-GET
כדי להוריד קבצים וב-PUT/POST
כדי להעלות קבצים. בדף הסקירה הכללית של Google Drive API תוכלו למצוא תיעוד מפורט ומדריכים למתחילים.
המדריך הזה יתמקד ברישום ובהעברה של קבצים באמצעות המשאב Files באמצעות הקריאות הבאות:
הרשאות
כל הבקשות ל-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 ב-Drive שלכם, אפשר להשתמש במשאב Files כדי לשלוח שאילתות לגבי קבצים עם סוג ה-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
ייצוא פרויקטים מ-Drive
אחרי שמקבלים בחזרה משאב File
מה-API, הנכס ב-exportLinks
יכיל כתובת URL לאחזור כדי לקבל את תוכן הפרויקט כנתוני JSON. הנה דוגמה לכתובת אתר זו:
https://script.google.com/feeds/download/export?id=1234567890abcefghijklmnopqrstuvwxyz&format=json
צריך לשלוח בקשה לכתובת ה-URL הזו כדי לאחזר את התוכן של הפרויקט עצמו.
יש להקפיד לכלול כותרת 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
, שלכל אחד מהם יש 4 המאפיינים הבאים:
id |
מזהה פנימי של קובץ בתוך פרויקט, שנדרש כדי להפנות לקובץ הזה במהלך עדכונים. |
name |
שם הקובץ ללא הסיומות, כפי שמוצג בעורך הסקריפטים. |
type |
שני סוגי הקבצים הם server_js ו-html. |
source |
קוד המקור המקודד שנמצא בקובץ. |
ייבוא פרויקטים אל Drive
כדי לעדכן פרויקט קיים, צריך לבצע קריאה ל-HTTP PUT
של הקובץ update
API עם ה-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
ל-API של הקובץ insert
. בדומה לקריאה ל-update
, אפשר להשתמש בספריית לקוח כדי לכלול מטא-נתונים כמו השם והתיאור של הפרויקט.
הנה עסקה לדוגמה של העלאת המדיה. הפעולה הזו תיצור ב-Drive פרויקט בשם 'ללא שם'. הפרמטר 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" } ] }