Google 脚本定时计划扫描列的值然后发送 webhook

Google Script timed schedule to scan column for value then send webhook

我有一个 Google Sheet 来保存我有兴趣购买的股票清单。如果不符合我的目标价格,则 M 列中的值为“0”,如果符合,则为大于“0”的值。 N 列是我今天已经投资的金额。

我希望 Google 脚本每 15 分钟左右扫描一次 M 列,并检查 M 列中的值是否大于 N 列中的值,如果是大于 0.

如果它找到符合这两个条件的行,那么它会发送一个 webhook 到 URL,其参数基于其他一些列,附加到 webhook URL,如下所示:

?ticker=(C 列)&Company=(A 列)

再加几列。

这可能吗?

提前致谢。

编辑:抱歉,我应该澄清一下,我知道不同类型的 Google 项目触发器(定时等),它是搜索列和发送我遇到问题的 webhook。基于下面@fullfine 的精彩回答,这是我当前的代码(我将在下面写下我现在无法弄清楚的问题):

function main() {
  var ss = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Watchlist"); 
  var m = ss.getRange("M1:M50").getValues()
  var n = ss.getRange("N1:N50").getValues()

  for (var i = 0; i < m.length; i++) {

    if (m[i] > n[i] && m[i] > 0) {
      sendWebHook(i)
    }
  }
}

function sendWebHook(i) {
  var ss = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Watchlist"); 
  var a = ss.getRange("A"+i)
  UrlFetchApp.fetch('https://webhookexample.com?Row=a3')
}

所以我需要弄清楚如何用实际行号替换我的 webhook 中的“a3”。这将是我可以用来解决最初问题的解决方法。

或者,如果有人可以更正脚本以包含行其余部分的值以在 webhook 中传递,那将是非常棒的。我不擅长编码,但我想也许我会从该行的每个必需列中获取值,创建新变量,然后将它们传递到 webhook?

另一个问题是,当 webhook 当前运行时,服务 (integromat) 可以正常接收它,但在 Google 应用程序中 returns 一个 400 代码。

回答

如果您想获得准确的帮助,请使用所有必要的详细信息编辑问题。但是,我可以根据您的解释给您一些指导。

要按一定的时间间隔执行函数,有Time-driven triggers。它们会根据您想要的标准调用您选择的函数,例如每 15 分钟一次。要创建一个,您必须转到左侧栏,单击 Triggers -> Add Trigger,然后在 Select event source 中选择 Time driven。在此菜单中还可以选择要调用的函数。

在这种情况下,我为您的任务附加了几个函数。第一个是触发器调用的那个。它采用列 M 和列 N 的前五个值,并对它们中的每一个执行所需的比较:M 的值大于 N 和更大比零。如果是这种情况,它会调用第二个函数,该函数负责发送 webhook。它接收列 MN 的索引,以便能够在具有相同索引的其他列中查找其他值。例如,如果 M3 大于 N3 且大于零,则此函数接收 3 以获取 A3.

的值

代码

function main() {
  var ss = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet()
  var m = ss.getRange("M1:M5").getValues()
  var n = ss.getRange("N1:N5").getValues()

  for (var i = 0; i < m.length; i++) {

    if (m[i] > n[i] && m[i] > 0) {
      sendWebHook(i)
    }
  }
}

function sendWebHook(i) {
  var ss = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet()
  var a = ss.getRange("A"+i)
}

参考文献:

好吧,多亏了@fullfine 和对这个网站的一些搜索,我设法破解了它。

为了从正确的行中获取正确的值,我必须取 [i] 值并加 1。

下面是对电子表格中每个选定列的作用的描述,因此您可以在我的代码中看到它的作用:

AB 列 - 通过查看当前时间检查股市是否开市。是或否

F 列 - 我选择的股票类别。在这种情况下,我只想 运行 脚本来查找股息股票。

R 列 - 我今天应该投资多少。这是基于我的一套规则,并且是基于公式的。

由于 webhook 的变量名称,所有其他列都应该是不言自明的。

function main() {
  var ss = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Watchlist"); 
  var ab = ss.getRange("ab1:ab100").getValues()
  var m = ss.getRange("M1:M100").getValues()
  var f = ss.getRange("F1:F100").getValues()
  var r = ss.getRange("R1:R100").getValues()

  for (var i = 0; i < m.length; i++) {

    if (r[i] > 0 && f[i] == 'Current Dividends' && ab[i] == 'Yes') {
      sendWebHook(i)
    }
  }
}

function sendWebHook(i) {
  var ss = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Watchlist"); 
  var row = (i+1)
  var company = ss.getRange("A"+row).getValues()
  var ticker = ss.getRange("C"+row).getValues()
  var currentPrice = ss.getRange("D"+row).getValues()
  var currency = ss.getRange("G"+row).getValues()
  var percent = ss.getRange("AA"+row).getValues()
  var invest = ss.getRange("M"+row).getValues()
  var invested = ss.getRange("N"+row).getValues()
  var purchasePrice = ss.getRange("P"+row).getValues()
  var status = ss.getRange("U"+row).getValues()
  var purchasePricePercent = ss.getRange("Q"+row).getValues()
  UrlFetchApp.fetch('https://hook.integromat.com/EXAMPLEWEBHOOK?ticker=' + ticker + '&invest=' + invest + '&invested=' + invested + '&company=' + company + '&currentPrice=' + currentPrice + '&currency=' + currency + '&percent=' + percent + '&purchasePrice=' + purchasePrice + '&purchasePricePercent=' + purchasePricePercent + '&status=' + status)
}

现在,当股票价格在我的买入区间内时,我会收到一条 Facebook 消息。