מאחר שפרויקטים של Apps Script נמצאים ב-Google Drive, מפתחים יכולים לייבא ולייצא את קוד המקור של Apps Script באמצעות Google Drive API (לא להתבלבל עם Drive Service ב-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 classes כשרוצים לספק אנקפסולציה בטוחה.
Drive API
Google Drive API מאפשר למפתחים לגשת לקבצים ב-Google Drive באופן פרוגרמטי. ה-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 ב-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. דוגמה לכתובת ה-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 |
שני סוגי הקבצים הם server_js ו-html. |
source |
קוד המקור המקודד שמכיל את הקובץ. |
ייבוא פרויקטים ל-Drive
כדי לעדכן פרויקט קיים, מבצעים קריאה 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
ל-API של הקובץ insert
. בדומה לקריאה ל-update
, אפשר להשתמש בספריית לקוח כדי לכלול מטא-נתונים כמו שם הפרויקט ותיאור שלו.
זו דוגמה לעסקה של העלאת מדיה. הפעולה הזו תיצור פרויקט בשם 'Untitled' ב-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" } ] }