代码之家  ›  专栏  ›  技术社区  ›  davegson

自动更新ImportJSON

  •  4
  • davegson  · 技术社区  · 9 年前

    我设置将JSON导入到Google电子表格 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}
    ]
    

    并将其转化为:

    enter image description here

    然而,正如您所看到的,这个API每天都在更新。所以我希望这个API调用在我打开工作表时刷新,而不仅仅是在编辑单元格时。

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

    我还将添加&奖励赏金(50)泰伦,因为这对我来说非常重要。

    2 回复  |  直到 4 年前
        1
  •  3
  •   Community CDub    7 年前

    正如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分钟执行一次-我假设执行了一个时间限制-但在我的情况下,这完全没有问题。

        2
  •  1
  •   EugZol Sandeep Jain    9 年前

    常规的缓存破坏URL参数技术将在这里工作:

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

    这将增加 ?20150817 (今天是8月17日)的URL参数,从而阻止Google缓存它(它将每天更新)。

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