问题描述
在使用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();
}