如何每月使用导入数据自动更新Google电子表格?

时间:2013-12-08 10:48:49

标签: csv google-apps-script google-sheets

我想将英国警方的犯罪数据存储到我所在地区。 英国警方每个月都会向police.uk提供新数据。这有两种方式: 1. CSV。我所在地区的犯罪行为是this,可以CSV格式下载1.& 2. 2.通过API的JSON。信息here - 我没有解决这个问题。

问题:网页和CSV仅显示过去六个月的数据。 我想创建一个Google Drive电子表格,每月更新一次,以便持续添加最新数据,以便随时保留所有数据。

我真的不知道如何解决这个问题,特别是在API方面。 我应该使用像ImportData,Google Spreadsheets的脚本编辑器这样的标准电子表格函数,还是使用像Python这样的编程语言,我不知道?

感谢。

1 个答案:

答案 0 :(得分:2)

多么有趣!我从来不知道警察有我们可以使用的数据API!我建议使用Google Apps脚本,您可以使用它轻松导入JSON数据。

例如,要首先获取数据,您可以使用URL Fetch Service,如下所示:

var data = UrlFetchApp.fetch("http://data.police.uk/api/crimes-street/all-crime?lat=52.629729&lng=-1.131592&date=2013-01");

这将返回原始JSON数据,供您根据自己的需要进行播放。

然后,您可以迭代对象,将它们添加到数组中以添加到电子表格中。完整的功能可能如下所示。 我知道它非常混乱。现在我知道这个警察API存在我计划(当我有空闲时间)设置类似的东西时,我会在我有更好的解决方案时更新这个答案但是我测试了下面的内容,它确实将URL中的所有数据写入电子表格。

function importPoliceData() {
  var data = UrlFetchApp.fetch("http://data.police.uk/api/crimes-street/all-crime?lat=52.629729&lng=-1.131592&date=2013-01");
  var jsonData = JSON.parse(data.getContentText());
  var dataArray = [];
  for(var i = 0; i < jsonData.length; i++){
    var thisRow = [];
    for(var a in jsonData[i]){
      if(typeof jsonData[i][a] == 'object'){
        for(var o in jsonData[i][a]){
          if(typeof jsonData[i][a][o] == 'object'){
            for( var p in jsonData[i][a][o]){
              thisRow.push(jsonData[i][a][o][p]);
            }
          } else {
            thisRow.push(jsonData[i][a][o]);
          }
        }
      } else {
        thisRow.push(jsonData[i][a]);
      }
    }
    while(thisRow.length != 13){
      thisRow.push("");
    }
    dataArray.push(thisRow);
  }
  var sheet = SpreadsheetApp.getActiveSheet();
  var range = sheet.getRange(1,1,dataArray.length, dataArray[0].length);
  range.setValues(dataArray);
}