איך אפשר להפעיל סקריפט של גוגל מתוך סקריפט בחשבון אחר?
-
@צדיק-תמים 1.מה שהוא כתב בחלק ד' אמרת שלא רלוונטי למקרה שלנו, נכון? אז הבנתי את מה שצריך לכתוב ולשלוח, אבל איפה שולחים את זה? בסוף הקישור? ככה
function myFunction() { const response = UrlFetchApp.fetch("https://script.google.com/macros/s/AKfycbwwxUHLhwYnn2O3HTjsa5cAQZjeA_DUj3R_w6ttmZ2S2-gV0xQQZUW3W8wftYKSwUtN/exec?del:159,count:5"); Logger.log(response.getContentText()); }
? ואני כותב את שם המשתנה כפי שהוא נקרא בסקריפט-נקודתיים-ערך-פסיק משתנה ב' וכו'?
ובחתימה של הסקריפט אני צריך לכתוב את המשתנים שאני אמור לקבל, נכון?
2.רק בעיה אחת, כחלק מהפעולה הסקריפט גם משנה כמה דברים בקובץ גוגל שיטס של הלקוח, השאלה האם כשהסקריפט מבצע את הפעולות זה נחשב כאילו אני מבצע את הפעולות-ואז אני צריך לקבל הרשאת עריכה לקובץ, או שנחשב שהלקוח עושה את הפעולות וככה הכל בסדר?
ואם זה נחשב שאני עושה את הפעולות אז מה יכולים לעשות כדי שהסקריפט יוכל לשנות דברים בקובץ של הלקוח אבל בלי שיצטרך לתת לי הרשאת עריכה?תודה רבה בכל אופן על ההסברים המפורטים!
@שמואל-ש כתב באיך אפשר להפעיל סקריפט של גוגל מתוך סקריפט בחשבון אחר?:
אני כותב את שם המשתנה כפי שהוא נקרא בסקריפט-נקודתיים-ערך-פסיק משתנה ב' וכו'?
ממש לא
קראת את ההסבר של צבי?
בסוף הקישור כותבים?
ואזפרמטר=ערך
, כשבין כל פרמטר-ערך מפרידים עם&
.
בדוגמה שלך זה יהיה:https://script.google.com/macros/s/AKfycbwwxU...wUtN/exec?del=159&count=5
@שמואל-ש כתב באיך אפשר להפעיל סקריפט של גוגל מתוך סקריפט בחשבון אחר?:
ובחתימה של הסקריפט אני צריך לכתוב את המשתנים שאני אמור לקבל, נכון?
מה זה חתימה של הסקריפט?
@שמואל-ש כתב באיך אפשר להפעיל סקריפט של גוגל מתוך סקריפט בחשבון אחר?:
2.רק בעיה אחת, כחלק מהפעולה הסקריפט גם משנה כמה דברים בקובץ גוגל שיטס של הלקוח, השאלה האם כשהסקריפט מבצע את הפעולות זה נחשב כאילו אני מבצע את הפעולות-ואז אני צריך לקבל הרשאת עריכה לקובץ, או שנחשב שהלקוח עושה את הפעולות וככה הכל בסדר?
ואם זה נחשב שאני עושה את הפעולות אז מה יכולים לעשות כדי שהסקריפט יוכל לשנות דברים בקובץ של הלקוח אבל בלי שיצטרך לתת לי הרשאת עריכה?כיוון שאתה צריך להפעיל את הסקריפט מתוך סקריפט אחר, אז זה יפעל בשמך, וכמובן שאי אפשר לערוך בלי הרשאת עריכה...
אפשר לפרוס את הסקריפט כך שיפעל בשם מי שניגש אליו, כמובן אחרי אישור מתן הרשאה, אבל אתה הרי (ממה שהבנתי) רוצה להפעיל את הסקריפט מתוך סקריפט אחר... -
@שמואל-ש כתב באיך אפשר להפעיל סקריפט של גוגל מתוך סקריפט בחשבון אחר?:
אני כותב את שם המשתנה כפי שהוא נקרא בסקריפט-נקודתיים-ערך-פסיק משתנה ב' וכו'?
ממש לא
קראת את ההסבר של צבי?
בסוף הקישור כותבים?
ואזפרמטר=ערך
, כשבין כל פרמטר-ערך מפרידים עם&
.
בדוגמה שלך זה יהיה:https://script.google.com/macros/s/AKfycbwwxU...wUtN/exec?del=159&count=5
@שמואל-ש כתב באיך אפשר להפעיל סקריפט של גוגל מתוך סקריפט בחשבון אחר?:
ובחתימה של הסקריפט אני צריך לכתוב את המשתנים שאני אמור לקבל, נכון?
מה זה חתימה של הסקריפט?
@שמואל-ש כתב באיך אפשר להפעיל סקריפט של גוגל מתוך סקריפט בחשבון אחר?:
2.רק בעיה אחת, כחלק מהפעולה הסקריפט גם משנה כמה דברים בקובץ גוגל שיטס של הלקוח, השאלה האם כשהסקריפט מבצע את הפעולות זה נחשב כאילו אני מבצע את הפעולות-ואז אני צריך לקבל הרשאת עריכה לקובץ, או שנחשב שהלקוח עושה את הפעולות וככה הכל בסדר?
ואם זה נחשב שאני עושה את הפעולות אז מה יכולים לעשות כדי שהסקריפט יוכל לשנות דברים בקובץ של הלקוח אבל בלי שיצטרך לתת לי הרשאת עריכה?כיוון שאתה צריך להפעיל את הסקריפט מתוך סקריפט אחר, אז זה יפעל בשמך, וכמובן שאי אפשר לערוך בלי הרשאת עריכה...
אפשר לפרוס את הסקריפט כך שיפעל בשם מי שניגש אליו, כמובן אחרי אישור מתן הרשאה, אבל אתה הרי (ממה שהבנתי) רוצה להפעיל את הסקריפט מתוך סקריפט אחר...@צדיק-תמים כתב באיך אפשר להפעיל סקריפט של גוגל מתוך סקריפט בחשבון אחר?:
מה זה חתימה של הסקריפט?
function doGet(del,count){
@צדיק-תמים כתב באיך אפשר להפעיל סקריפט של גוגל מתוך סקריפט בחשבון אחר?:
אבל אתה הרי (ממה שהבנתי) רוצה להפעיל את הסקריפט מתוך סקריפט אחר...
אבל הסקריפט המפעיל הוא בצד הלקוח, והסקריפט המופעל הוא אצלי, אז השאלה האם אפשר לעשות שהפעולה תיעשה ע"ש מי שהריץ את הסקריפט המפעיל?
-
@צדיק-תמים כתב באיך אפשר להפעיל סקריפט של גוגל מתוך סקריפט בחשבון אחר?:
מה זה חתימה של הסקריפט?
function doGet(del,count){
@צדיק-תמים כתב באיך אפשר להפעיל סקריפט של גוגל מתוך סקריפט בחשבון אחר?:
אבל אתה הרי (ממה שהבנתי) רוצה להפעיל את הסקריפט מתוך סקריפט אחר...
אבל הסקריפט המפעיל הוא בצד הלקוח, והסקריפט המופעל הוא אצלי, אז השאלה האם אפשר לעשות שהפעולה תיעשה ע"ש מי שהריץ את הסקריפט המפעיל?
@שמואל-ש לא יודע למה אתה קורא לזה חתימה, אבל ממש לא
הפונקציה מקבלת ארגומנט אחד אוטומטי מגוגל סקריפט עם מידע על הrequest, בין השאר על הפרמטרים של הurl
אם אתה רוצה לחייב שליחה של פרמטר אתה צריך לבדוק את זה ידנית, לדוגמה:function doGet(e) { if (!e.parameter.count) { return ContentService.createTextOutput("error: count not provided"); } }
@שמואל-ש כתב באיך אפשר להפעיל סקריפט של גוגל מתוך סקריפט בחשבון אחר?:
אבל הסקריפט המפעיל הוא בצד הלקוח, והסקריפט המופעל הוא אצלי, אז השאלה האם אפשר לעשות שהפעולה תיעשה ע"ש מי שהריץ את הסקריפט המפעיל?
בגדול התשובה היא לא
אפשר לנסות קומבינה של לקבל טוקן אימות עם
ScriptApp.getOAuthToken
, להעביר אותו לסקריפט המופעל ואז לבצע את הפעולות מול הREST API של גוגל ולא המתודות המובנות בגוגל סקריפט, לא חושב שזה מה שאתה מחפש. -
@שמואל-ש לא יודע למה אתה קורא לזה חתימה, אבל ממש לא
הפונקציה מקבלת ארגומנט אחד אוטומטי מגוגל סקריפט עם מידע על הrequest, בין השאר על הפרמטרים של הurl
אם אתה רוצה לחייב שליחה של פרמטר אתה צריך לבדוק את זה ידנית, לדוגמה:function doGet(e) { if (!e.parameter.count) { return ContentService.createTextOutput("error: count not provided"); } }
@שמואל-ש כתב באיך אפשר להפעיל סקריפט של גוגל מתוך סקריפט בחשבון אחר?:
אבל הסקריפט המפעיל הוא בצד הלקוח, והסקריפט המופעל הוא אצלי, אז השאלה האם אפשר לעשות שהפעולה תיעשה ע"ש מי שהריץ את הסקריפט המפעיל?
בגדול התשובה היא לא
אפשר לנסות קומבינה של לקבל טוקן אימות עם
ScriptApp.getOAuthToken
, להעביר אותו לסקריפט המופעל ואז לבצע את הפעולות מול הREST API של גוגל ולא המתודות המובנות בגוגל סקריפט, לא חושב שזה מה שאתה מחפש.@צדיק-תמים ואיפה אוכל לראות את לוג ההפעלה? כי במפעיל לא כתוב לי שום לוג, ובמופעל אני לא רואה בכלל את ההפעלה בלשונית 'הפעלות'
-
@צדיק-תמים ואיפה אוכל לראות את לוג ההפעלה? כי במפעיל לא כתוב לי שום לוג, ובמופעל אני לא רואה בכלל את ההפעלה בלשונית 'הפעלות'
-
@שמואל-ש אז אולי באמת לא היתה הפעלה (כלומר לא התבצעה קריאה לסקריפט המופעל)? כי בהחלט אמור להופיע בלשונית הפעלות משהו כזה:
@צדיק-תמים אבל מופיע גם כל מה שכתבתי בשורות
Logger.log();
כי אכן היה כתוב לי הפעלה וכו', אבל הלוג של מה שכתבתי שיוצג לי-לא הוצג, זה אמור להציג?
-
@צדיק-תמים אבל מופיע גם כל מה שכתבתי בשורות
Logger.log();
כי אכן היה כתוב לי הפעלה וכו', אבל הלוג של מה שכתבתי שיוצג לי-לא הוצג, זה אמור להציג?
@שמואל-ש לא, לוגים לא יופיעו שם בהפעלות ע"י בקשת HTTP. מעצבן אבל זה מה יש
אם תשייך את הסקריפט לפרויקט Google Cloud Platform) GCP) כנראה שתוכל לגשת ללוגים דרך הדשבורד של GCP, מוזמן לנסות
https://developers.google.com/apps-script/guides/logging#using_cloud_logging -
@שמואל-ש לא, לוגים לא יופיעו שם בהפעלות ע"י בקשת HTTP. מעצבן אבל זה מה יש
אם תשייך את הסקריפט לפרויקט Google Cloud Platform) GCP) כנראה שתוכל לגשת ללוגים דרך הדשבורד של GCP, מוזמן לנסות
https://developers.google.com/apps-script/guides/logging#using_cloud_logging@צדיק-תמים לא התחלתי להבין מה קורה שם...
-
@שמואל-ש לא, לוגים לא יופיעו שם בהפעלות ע"י בקשת HTTP. מעצבן אבל זה מה יש
אם תשייך את הסקריפט לפרויקט Google Cloud Platform) GCP) כנראה שתוכל לגשת ללוגים דרך הדשבורד של GCP, מוזמן לנסות
https://developers.google.com/apps-script/guides/logging#using_cloud_logging@צדיק-תמים אשמח אם תוכל להסביר לי קצת על הנ"ל, וחוץ מזה האם אפשר להגביל את השימוש בו רק למספר אנשים ושאנשים אחרים לא יוכלו להשתמש בו?
-
(התגובה של @צבי-ש עונה כבר על חלק ממה שכתבתי, כתבתי את כמעט כל התגובה לפני שהוא הגיב, חושב שיש בזה תועלת גם כך. יצויין גם שהפוסט הזה ממש לא מכסה את כל הנושא אלא רק את השימוש הבסיסי ממש.)
@שמואל-ש לא עברתי ממש על הקוד, אבל שים לב שהוא נתן לך קוד לקרוא לסקריפט הפרוס, וגם זה קוד שיעבוד לך רק בדפדפן/Node.js ולא בגוגל סקריפט, (בדפדפן אגב אין טעם להשתמש ב
XMLHttpRequest
אלא בfetch
החדש והנוח יותר)
אבל השיא הוא כשהוא שולח אותך לייבא קובץ לא קיים...
זה כוחו של רובוט, שהוא לא מתבייש לחרטטלגופה של שאלה:
השאלה מתחלקת פה ל2, חלק ראשון: הסקריפט שאותו רוצים להפעיל. צריך "לפרוס" אותו, דהיינו לקבל כתובת URL מגוגל, שכאשר קוראים אליה - בין אם זה מגוגל סקריפט אחר, מהדפדפן או מכל מקום אחר, ירוץ קוד מסוים.איך לפרוס:
תיצור פונקצייה בשםdoGet
(שים לב לכתוב בדיוק ככה, כולל האות הגדולה באמצע. זה מעכב) שהיא זו שתרוץ בקריאה לכתובת, בתוכה תשים את הקוד שאתה מעוניין להפעיל,
תלחץ על כפתור "לפריסה" בצד שמאל למעלה, תחבר ב"פריסה חדשה", שים לב שהכל מוגדר כמו בתמונה:
חלק שני: איך לקרוא לURL שקיבלת מגוגל.
אם מעוניינים (זה מה שהבנתי ממך) לבצע את זה מתוך גוגל סקריפט, צריך להשתמש במתודה שהם מספקים לקריאות לאתרים חיצוניים - UrlFetchAppUrlFetchApp.fetch(https://script.google.com/macros/s/AKfycbxfVyU0fVXXXXXXXXXXXXXXXXXXXXXXRjdVy_/exec);
שים לב - הקוד שירוץ בפועל בקריאה לכתובת הוא לא הקוד העדכני ביותר! בשביל לעדכן את הקוד שירוץ בקריאה לכתובת, לוחצים "ניהול הפריסות", ויוצרים גרסה חדשה לפריסה הקיימת:
נ.ב. אם אתה רוצה שבקריאה לכתובת יקבלו תגובת טקסט, צריך להחזיר מהפונקציה מופע של ContentService.
@צדיק-תמים ברשותך עוד כמה שאלות...
1.איך אני כותב את הפונקצייהfunction doGet() {
או שצריך להכניס גם בסוגריים e ?
2.כשאני רוצה לגשת למשתנים ששלחתי ב URL, שלחתי משתנה בשם title ומשתנה בשם pass, איך אני כותב בסקריפט כשאני רוצה להשתמש בו? פשוט לכתוב את שם המשתנה? זה מאותחל אוטומטית או מה? @צבי-ש כבר הסביר למעלה, אבל לא הבנתי מה קורה שם-גם בתיעוד של גוגל, אשמח אם תוכל להסביר לי!
3.למה אני לא יכול לעשות בפריסה באפשרות של 'לבצע בתור' לעשות שיבצע בתור הבנאדם עצמו וכך גם אוכל להגביל לאנשים ספציפיים? -
@צדיק-תמים ברשותך עוד כמה שאלות...
1.איך אני כותב את הפונקצייהfunction doGet() {
או שצריך להכניס גם בסוגריים e ?
2.כשאני רוצה לגשת למשתנים ששלחתי ב URL, שלחתי משתנה בשם title ומשתנה בשם pass, איך אני כותב בסקריפט כשאני רוצה להשתמש בו? פשוט לכתוב את שם המשתנה? זה מאותחל אוטומטית או מה? @צבי-ש כבר הסביר למעלה, אבל לא הבנתי מה קורה שם-גם בתיעוד של גוגל, אשמח אם תוכל להסביר לי!
3.למה אני לא יכול לעשות בפריסה באפשרות של 'לבצע בתור' לעשות שיבצע בתור הבנאדם עצמו וכך גם אוכל להגביל לאנשים ספציפיים?@שמואל-ש
- אם אתה רוצה לגשת לפרטי הבקשה, תעביר לפונקציה את הארגומנט שמייצג את הrequest, בתיעוד של גוגל קוראים לו
e
אבל אפשר לכתוב לדוגמהreq
. אם לא, אין צורך להעביר את הארגומנט. - הדגמתי לעיל
@צדיק-תמים כתב באיך אפשר להפעיל סקריפט של גוגל מתוך סקריפט בחשבון אחר?:
הפונקציה מקבלת ארגומנט אחד אוטומטי מגוגל סקריפט עם מידע על הrequest, בין השאר על הפרמטרים של הurl
אם אתה רוצה לחייב שליחה של פרמטר אתה צריך לבדוק את זה ידנית, לדוגמה:function doGet(e) { if (!e.parameter.count) { return ContentService.createTextOutput("error: count not provided"); } }
בדוגמה מבצעים תנאי על הערך של הפרמטר count.
@שמואל-ש כתב באיך אפשר להפעיל סקריפט של גוגל מתוך סקריפט בחשבון אחר?:
3.למה אני לא יכול לעשות בפריסה באפשרות של 'לבצע בתור' לעשות שיבצע בתור הבנאדם עצמו וכך גם אוכל להגביל לאנשים ספציפיים?
כי כתבת שאתה רוצה להפעיל את זה מתוך סקריפט אחר. והוא לא יכול להזדהות במסך האימות של גוגל...
אם אתה רוצה שישתמשו ישירות בסקריפט הפרוס, באמת אפשר לעשות את זה. - אם אתה רוצה לגשת לפרטי הבקשה, תעביר לפונקציה את הארגומנט שמייצג את הrequest, בתיעוד של גוגל קוראים לו
-
@שמואל-ש
- אם אתה רוצה לגשת לפרטי הבקשה, תעביר לפונקציה את הארגומנט שמייצג את הrequest, בתיעוד של גוגל קוראים לו
e
אבל אפשר לכתוב לדוגמהreq
. אם לא, אין צורך להעביר את הארגומנט. - הדגמתי לעיל
@צדיק-תמים כתב באיך אפשר להפעיל סקריפט של גוגל מתוך סקריפט בחשבון אחר?:
הפונקציה מקבלת ארגומנט אחד אוטומטי מגוגל סקריפט עם מידע על הrequest, בין השאר על הפרמטרים של הurl
אם אתה רוצה לחייב שליחה של פרמטר אתה צריך לבדוק את זה ידנית, לדוגמה:function doGet(e) { if (!e.parameter.count) { return ContentService.createTextOutput("error: count not provided"); } }
בדוגמה מבצעים תנאי על הערך של הפרמטר count.
@שמואל-ש כתב באיך אפשר להפעיל סקריפט של גוגל מתוך סקריפט בחשבון אחר?:
3.למה אני לא יכול לעשות בפריסה באפשרות של 'לבצע בתור' לעשות שיבצע בתור הבנאדם עצמו וכך גם אוכל להגביל לאנשים ספציפיים?
כי כתבת שאתה רוצה להפעיל את זה מתוך סקריפט אחר. והוא לא יכול להזדהות במסך האימות של גוגל...
אם אתה רוצה שישתמשו ישירות בסקריפט הפרוס, באמת אפשר לעשות את זה.@צדיק-תמים סליחה אם אני מנדנד...
1.מה זאת אומרת לפרטי הבקשה? ומה זה הארגומנט? ו-request? כנראה שאני יודע על מה אתה מדבר אבל לא מבין את המילים...
2.ולמעשה בהשתמשות-למשל אני רוצה להשוות את המשתנה asd למשתנה שאני מקבל, איך אני כותב את זה?if (asd< ){}
גדול מ?
3.אני רוצה למשל שזה יהיה בגוגל שיטס כפקודת מאקרו, שכשילחצו על מקש שיפעיל מאקרו שהמאקרו יפעיל את הנ"ל, שם אפשר לעשות ככה? - אם אתה רוצה לגשת לפרטי הבקשה, תעביר לפונקציה את הארגומנט שמייצג את הrequest, בתיעוד של גוגל קוראים לו
-
@צדיק-תמים סליחה אם אני מנדנד...
1.מה זאת אומרת לפרטי הבקשה? ומה זה הארגומנט? ו-request? כנראה שאני יודע על מה אתה מדבר אבל לא מבין את המילים...
2.ולמעשה בהשתמשות-למשל אני רוצה להשוות את המשתנה asd למשתנה שאני מקבל, איך אני כותב את זה?if (asd< ){}
גדול מ?
3.אני רוצה למשל שזה יהיה בגוגל שיטס כפקודת מאקרו, שכשילחצו על מקש שיפעיל מאקרו שהמאקרו יפעיל את הנ"ל, שם אפשר לעשות ככה?@שמואל-ש ארגומנט של פונקציה בJS אתה יודע מה זה?
הפונקציה מקבלת ארגומנט שהוא אובייקט, שמכיל מידע על פרטי הrequest - הקריאת רשת לכתובת של הסקריפט, לדוגמה פרמטרים של הURL, וככה אפשר לגשת אליהם מתוך הפונקציה.- כל הפרמטרים מגיעים כמחרוזת, ולכן צריך קודם להמיר למספר -
if (parseInt(e.parameter.asd) > 5) { }
שים לב שאם לא נשלח פרמטר asd או שהוא לא מספרי, התנאי לא יתקיים כי parseInt יחזיר
NaN
שלא "גדול מ5"...@שמואל-ש כתב באיך אפשר להפעיל סקריפט של גוגל מתוך סקריפט בחשבון אחר?:
3.אני רוצה למשל שזה יהיה בגוגל שיטס כפקודת מאקרו, שכשילחצו על מקש שיפעיל מאקרו שהמאקרו יפעיל את הנ"ל, שם אפשר לעשות ככה?
לא
כל עוד הסקריפט הוא זה ש"פותח" את הURL של הפריסה ולא המשתמש - זה לא אפשרי