自动更新 ImportJSON

Update ImportJSON automatically

我设置了导入 JSON 到 Google Spreadsheets following this sweet Medium tutorial

它做得很好 - 接听这个 API 电话

[
  {"day":"2015-08-05","new_users":103},
  {"day":"2015-08-06","new_users":255},
  {"day":"2015-08-07","new_users":203},
  {"day":"2015-08-08","new_users":198},
  {"day":"2015-08-09","new_users":273},
  {"day":"2015-08-10","new_users":373},
  {"day":"2015-08-11","new_users":189},
  {"day":"2015-08-12","new_users":228},
  {"day":"2015-08-13","new_users":167}
]

并将其转换为:

但是,如您所见,此 API 每天都会更新。所以我希望 API 在我打开 sheet 时调用刷新 - 不仅是在编辑单元格时。

我已经 researched a ton,也尝试过添加触发器,但到目前为止我的尝试都失败了。 这不应该这么难......有什么想法吗?我错过了什么吗?

稍后我还会添加并奖励赏金 (50),因为这对我来说非常重要。

常规缓存清除 URL 参数技术将在这里起作用:

=ImportJSON(CONCATENATE("http://dwh-platogo.herokuapp.com/q/zn4m?", YEAR(NOW()),MONTH(NOW()),DAY(NOW())))

这会将 ?20150817(因为今天是 8 月 17 日)参数添加到 URL,从而防止 Google 缓存它(它将每天更新)。

您还可以添加当前小时以强制其每小时更新一次。

正如 EugZol 指出的那样,解决方案正在向 URL 添加一个参数。然而,它没有通过Google电子表格的CONCATENATE工作——这导致了加载错误——至少对我来说是这样。

最后不得不调整JavaScript函数ImportJSONAdvanced

function ImportJSONAdvanced(url, query, options, includeFunc, transformFunc) {
  var url = url + "?" + (Math.ceil(new Date().getTime() / 1000));
  var jsondata = UrlFetchApp.fetch(url);
  var object   = JSON.parse(jsondata.getContentText());

  return parseJSONObject_(object, query, options, includeFunc, transformFunc);
}

我添加了这一行:

var url = url + "?" + (Math.ceil(new Date().getTime() / 1000));

它是 current time via JavaScript 并将其附加到 url - 我将它除以 1000 并使用 .ceil 来获取秒而不是毫秒。

这样,电子表格最终会自动更新 API 调用。

旁注:它每 15 分钟执行一次 - 我假设实施了时间限制 - 但就我而言,这完全没问题。