如何在Google表格中自动执行ImportJSON函数

问题描述

在使用Google脚本/任何编码语言方面,我是一个初学者,但实际上可以在自动执行从Environment Agency Real-Time洪水监控API导入数据方面提供一些帮助。 API地址如下:

https://environment.data.gov.uk/flood-monitoring/id/stations/023003/readings?latest https://environment.data.gov.uk/flood-monitoring/id/stations/023004/readings?latest https://environment.data.gov.uk/flood-monitoring/id/stations/023020/readings?latest

我需要安排触发器以每10-15分钟刷新一次我导入的信息。因此,我需要编写API导入脚本。我尝试使用来自https://github.com/bradjasper/ImportJSON/blob/master/ImportJSON.gs

的以下IMPORTJSON代码

但是,据我了解,这是一个通用代码,可让我在Google表格中使用IMPORTJSON函数。我需要一个附加功能,该功能使我可以每10-15分钟安排一次触发器,以刷新Google表格中的信息。 我也尝试使用脚本来解析JSON API,但是items数组引起了麻烦。这是我目前拥有的脚本:

function FloodEWS() {

var res = UrlFetchApp.fetch(“https://environment.data.gov.uk/flood-monitoring/id/stations/023004/readings.json?latest"); 
var content = res.getContentText();
var json = JSON.parse(content);
  var context = json["@context"];
  var Meta = json["Meta"];
  var items = json["items"]
  Logger.log(items);
}


我要解析的API如下-“ value”和“ dateTime”是我需要从items数组中提取内容(并具有自动功能):

{ 
  "@context" : "http://environment.data.gov.uk/flood-monitoring/Meta/context.jsonld","Meta" : { 
    "publisher" : "Environment Agency","licence" : "http://www.nationalarchives.gov.uk/doc/open-government-licence/version/3/","documentation" : "http://environment.data.gov.uk/flood-monitoring/doc/reference","version" : "0.9","comment" : "Status: Beta service","hasFormat" : [ "http://environment.data.gov.uk/flood-monitoring/id/stations/023003/readings.csv?latest","http://environment.data.gov.uk/flood-monitoring/id/stations/023003/readings.rdf?latest","http://environment.data.gov.uk/flood-monitoring/id/stations/023003/readings.ttl?latest","http://environment.data.gov.uk/flood-monitoring/id/stations/023003/readings.html?latest" ]
  },"items" : [ { 
    "@id" : "http://environment.data.gov.uk/flood-monitoring/data/readings/023003-level-stage-i-15_min-m/2020-08-26T09-15-00Z","dateTime" : "2020-08-26T09:15:00Z","measure" : "http://environment.data.gov.uk/flood-monitoring/id/measures/023003-level-stage-i-15_min-m","value" : 1.68
  }
 ]

任何帮助将不胜感激。

解决方法

解决方案:

您仍然可以使用此script提供的ImportJSON功能,并在脚本编辑器中将其保存到单独的Google脚本中。

然后,您可以使用以下函数将所有URL的ImportJSON公式粘贴到Sheet1

function updateData() {
  const ss = SpreadsheetApp.getActive();
  const sh = ss.getSheetByName('Sheet1');
  
  sh.getRange(1,1,sh.getMaxRows(),sh.getMaxColumns()).clearContent();
  
  const urls = ["https://environment.data.gov.uk/flood-monitoring/id/stations/023003/readings?latest","https://environment.data.gov.uk/flood-monitoring/id/stations/023004/readings?latest","https://environment.data.gov.uk/flood-monitoring/id/stations/023020/readings?latest"];
  
  urls.forEach(url=>{
               
               sh.getRange(sh.getLastRow()+1,1).setValue(`=ImportJSON("${url}")`);
               SpreadsheetApp.flush();
             }
)
}

要为updateData()设置10分钟的时间触发功能,您可以一次执行以下代码:

function create_Trigger(){
ScriptApp.newTrigger("updateData")
  .timeBased()
  .everyMinutes(10)
  .create();
}

结果:

example