如何在 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();
}
结果:
我在使用 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();
}