通过URL触发GAS功能

时间:2019-06-07 00:56:30

标签: google-apps-script arduino

这是很新的内容,但请尝试一下。我正在尝试设置一个Arduino运动传感器来触发脚本。此时,我的目标是通过URL触发脚本。我在下面的代码中找到了我正在处理的代码,但是在运行/调试时,我继续遇到此错误。

TypeError:无法从未定义中读取属性“ parameter”。 (第4行,文件“代码”)

我一直在研究e.parameter对象,但未能取得进展

      function doGet(e) {
  Logger.log(e)
  var passedString,whatToReturn;

  passedString = e.parameter.searchStringName;
  if (passedString === 'tylog') {
    whatToReturn = tylog();  //Run function One
  };

 return ContentService.createTextOutput(whatToReturn);
};


var mns = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Monster")
var tyl = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("tyLog")
var tyd = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("tyData")
var twl = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("twLog")
var twd = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("twData")
var tym = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("tyMaster")
var twm = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("twMaster")
var test = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("test")
var tydate = tyd.getRange('A2');
var tydur = tyd.getRange(2, 2);

// Start functions
function start() {
  tyl.getRange('A1').setValue(new Date());
  twl.getRange('A1').setValue(new Date());
}

//Log Typhoon ride
function tylog() {
  tyl.getRange(tyl.getLastRow() + 1, 1).setValue(new Date());  
}

//Log Twister ride
function twlog() {
  twl.getRange(twl.getLastRow() + 1, 1).setValue(new Date());
}


//Send Data to both logs and clear

function tyclear() {
  tyd.getRange('A2:H2').copyTo(tym.getRange(tym.getLastRow() + 1, 1), {contentsOnly: true});
  twd.getRange('A2:H2').copyTo(twm.getRange(twm.getLastRow() + 1, 1), {contentsOnly: true});
  tyl.getRange('A1:A100').clearContent();
  twl.getRange('A1:A100').clearContent();

}

URL请求:

https://script.google.com/macros/s/AKfycbxC5zYevR1IhfFcUMjmIqUaQ1dKNHTm4mhmWBq_Rc9HgemJQ6Q/exec?searchStringName=tylog

Debug Image

我将其单独放入一个新项目中,但仍返回未定义的内容。

function doGet(e) {
  var passedString,whatToReturn;

  passedString = e.parameter.searchStringName;
  if (passedString === 'functionOne') {
    whatToReturn = functionOne();  //Run function One
  };

  return ContentService.createTextOutput(whatToReturn);
};

function functionOne() {
  var something;
return ContentService.createTextOutput("Hello, world!"); }

2 个答案:

答案 0 :(得分:1)

我相信您的网址应为{id:1, path:img-001.jpg, hasTag: true}, {id:2, path:img-002.jpg, hasTag: true}, {id:3, path:img-003.jpg, hasTag: false}, {id:4, path:img-004.jpg, hasTag: true}

考虑了一段时间后,要求从functionOne返回是没有意义的。我将客户端服务器通信与“获取”请求过程混在一起。对于大多数Get请求,该请求会建议某种类型的响应,因为一般而言,我们正在寻找要显示的某种类型的内容。在这种情况下,由于请求者是一台机器,因此可能不需要。

使用https://script.google.com/macros/s/AKfycbxC5zYevR1IhfFcUMjmIqUaQ1dKNHTm4mhmWBq_Rc9HgemJQ6Q/exec?searchStringName=functionOne仅使我们能够从查询字符串中发送键/值对,我们可以对其进行恢复以重定向服务器操作。

答案 1 :(得分:0)

我相信您应该从脚本中删除第二个doGet()。继续我的最后一条评论,我尝试访问您的URL,并很好奇为什么发生重定向而不是仅提供Content。如果echo?重定向结果返回了undefined,则您应该有冲突的doGet()函数。

更新:请忽略答案-绝对不是问题!