我如何从另一个谷歌脚本调用已发布的谷歌脚本?脚本在不同的帐户中 [英] how do i call a published google script from another google script? the scripts are in different accounts

查看:117
本文介绍了我如何从另一个谷歌脚本调用已发布的谷歌脚本?脚本在不同的帐户中的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

  //脚本调用发布的脚本,这个脚本在账户中1 
function callScript(){
try {//发布的url
var response = UrlFetchApp.fetch(https://script.google.com/macros/s/../exec?calendar ='CalendarName'); //日历名称作为参数

} catch(e){
Logger.log(e);
}
Logger.log(response.getContentText());
}

//帐户2
//代码发布后,它将以调用脚本的用户身份运行(帐户1),访问权限为任何人
函数doGet(e){//发布的脚本

var app = UiApp.createApplication();
var calendar = e.parameter.calendar; //日历名称作为参数
//确定现在有多少事件正在发生
var now = new Date();
var oneMinuteFromNow = new Date(now.getTime()+(60 * 1000));
var events = CalendarApp.getCalendarsByName(calendar)[0] .getEvents(now,oneMinuteFromNow);
var email = Session.getActiveUser()。getEmail();
for(i in events){
var tituloEvento = events [i] .getTitle();
var descEvento = events [i] .getDescription();
var insertar = leerBD(email,tituloEvento,descEvento);
if(insertar){
var inserto = insertarBD(email,tituloEvento,descEvento);
}
}
返回ContentService.createTextOutput(e.parameter.string.calendar);
}

我想在帐户2中调用脚本并将日历名称作为参数,在帐户2中,脚本将以调用脚本并获取某些事件的用户身份运行。

t需要在URL中包含的参数中使用引号,试试像这样:

  var response = UrlFetchApp.fetch(https ://script.google.com/macros/s/../exec?calendar = CalendarName); //日历名称作为参数

还有:

你为什么要写 e.parameter.string.calendar 在你的示例代码的最后一步?什么是字符串用于?我想目的是要返回别的东西,而不仅仅是日历的名字......请解释。



这里是一个工作演示,我删除了您的特定函数调用并使用公共议程。
它仅返回记录器中日历的名称。

  //脚本调用发布的脚本,此脚本在帐户中1 
function callScript(){
try {//发布的网址
var response = UrlFetchApp.fetch(https://script.google.com/macros/s/ AKfycbxg-XiPOSIzTATNO520r2DYqLWFjSJXIZ4h-9G_4eV4UZTgxnjo / EXEC日历= test_agenda); //日历名称作为参数

}赶上(E){
Logger.log(E);
}
Logger.log(response.getContentText());
}

//帐户2
//代码发布后,它将以调用脚本的用户身份运行(帐户1),访问权限为任何人
函数doGet(e){//发布的脚本

var app = UiApp.createApplication();
var calendar = e.parameter.calendar; //日历名称作为参数
//确定现在有多少事件正在发生
var now = new Date();
var oneMinuteFromNow = new Date(now.getTime()+(60 * 1000));
var events = CalendarApp.getCalendarsByName(calendar)[0] .getEvents(now,oneMinuteFromNow);
var email = Session.getActiveUser()。getEmail();
for(i in events){
var tituloEvento = events [i] .getTitle();
var descEvento = events [i] .getDescription();
}
返回ContentService.createTextOutput(e.parameter.calendar);
}


//script calling the published script, this script is in the account 1
function callScript(){
    try{//published url
       var response =UrlFetchApp.fetch("https://script.google.com/macros/s/../exec?  calendar='CalendarName'");//calendar name as parameter

    }catch(e){
  Logger.log(e);
 }
 Logger.log(response.getContentText());
}

//account 2
//the code is published, it will run as the user who call the script(account 1), the   access is for anyone 
function doGet(e){//published script

  var app = UiApp.createApplication();
  var calendar=e.parameter.calendar; //calendar name as parameter
  // Determines how many events are happening now 
  var now = new Date();
  var oneMinuteFromNow = new Date(now.getTime() + (60 * 1000));
  var events = CalendarApp.getCalendarsByName(calendar)  [0].getEvents(now,oneMinuteFromNow);
  var email=Session.getActiveUser().getEmail();
  for(i in events){
     var tituloEvento=events[i].getTitle();
     var descEvento= events[i].getDescription();
     var insertar=leerBD(email,tituloEvento,descEvento);
     if (insertar) {
       var inserto=insertarBD(email,tituloEvento,descEvento); 
     } 
  }  
  return ContentService.createTextOutput(e.parameter.string.calendar);
 }

I want to call the script in the account 2 and pass a calendar name as parameter, in the account 2, the script will run as the user who call the script and get some events

解决方案

You don't need to use quotes in the parameters included in your URL, try like this:

   var response =UrlFetchApp.fetch("https://script.google.com/macros/s/../exec?calendar=CalendarName");//calendar name as parameter

and also :

why are you writing e.parameter.string.calendar in the last tine of your sample code ? What is string for ? I guess the purpose is to return something else than just the calendar name ... please explain.

here is a working demo where I removed your specific function calls and use a public agenda. it returns only the name of the calendar in the logger.

//script calling the published script, this script is in the account 1
function callScript(){
    try{//published url
       var response =UrlFetchApp.fetch("https://script.google.com/macros/s/AKfycbxg-XiPOSIzTATNO520r2DYqLWFjSJXIZ4h-9G_4eV4UZTgxnjo/exec?calendar=test_agenda");//calendar name as parameter

    }catch(e){
  Logger.log(e);
 }
 Logger.log(response.getContentText());
}

//account 2
//the code is published, it will run as the user who call the script(account 1), the   access is for anyone 
function doGet(e){//published script

  var app = UiApp.createApplication();
  var calendar=e.parameter.calendar; //calendar name as parameter
  // Determines how many events are happening now 
  var now = new Date();
  var oneMinuteFromNow = new Date(now.getTime() + (60 * 1000));
  var events = CalendarApp.getCalendarsByName(calendar)  [0].getEvents(now,oneMinuteFromNow);
  var email=Session.getActiveUser().getEmail();
  for(i in events){
     var tituloEvento=events[i].getTitle();
     var descEvento= events[i].getDescription();
  }  
  return ContentService.createTextOutput(e.parameter.calendar);
 }

这篇关于我如何从另一个谷歌脚本调用已发布的谷歌脚本?脚本在不同的帐户中的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆