使用 Apps 脚本通过 HTTP API 执行 Mixpanel 的 JQL 脚本时出现输入错误结束

End of input error when executing Mixpanel's JQL script with HTTP API using Apps Script

我尝试使用 Apps Script 的 UrlFetchApp 从我的 Mixpanel 项目中获取数据。它涉及在 HTTP POST 请求的正文中发送 JQL 脚本。这是 JQL 脚本:

var jqlScript = 'function main() {  return Events(params).filter(function(event){return event.name == \"purchase\";}).reduce(mixpanel.reducer.count());}';
var params = '{\"from_date\":\"' + getDateString(aWeekAgo) + '\",\"to_date\":\"' + getDateString(yesterday) + '\"}';
var payload = {
   script: jqlScript,
   params: params
};

var options = {
   'method': 'post',
   'headers': {
   'Authorization' : 'Basic #############' // my API secret
   },
   'payload': payload
};

var data = UrlFetchApp.fetch('https://mixpanel.com/api/2.0/jql/', options);

但我在执行记录中不断收到此错误:

"Request failed for https://mixpanel.com/api/2.0/jql/ returned code 400. Truncated server response: {"请求": "/api/2.0/jql/", "error": "Error validating script: Uncaught exception SyntaxError: Unexpected end of input\nfunction main() { return E... (use muteHttpExceptions option to examine full response) (line 22, file "代码")"

我仔细检查了脚本并确保没有遗漏“}”或类似内容,正如本网站上其他问题所建议的那样。我被困在这里了!

我假设 App Script 的转义有问题,因为我不知道为什么会这样,但我找到了一个实用的解决方案:

如果您从 jql/javascript 字符串中删除 所有 分号,它将起作用。

var jqlScript = 'function main() {  return Events(params).filter(function(event){return event.name == "purchase\"}).reduce(mixpanel.reducer.count())}';