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

How to automate ImportJSON function in Google Sheets

我在使用 Google Scripts/any 编码语言方面是初学者,但在从环境署实时洪水监测 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 Sheet 中使用 IMPORTJSON 函数。我需要一个额外的功能,它允许我每 10-15 分钟安排一个触发器来刷新我的 Google Sheet 中的信息。 我还尝试编写脚本来解析 JSON API 但项目数组造成了困难。这是我目前拥有的脚本:

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 如下 - “值”和“日期时间”是我需要从项目数组中提取的(并已自动化):

{ 
  "@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,1,1).setValue(`=ImportJSON("${url}")`);
               SpreadsheetApp.flush();
             }
)
}

为了 updateData() 设置 10 分钟 time-trigger 您可以执行以下代码一次:

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

结果: