Google Apps Scriptによるデータ受信(ファイル分割)

Google SpreadsheetをGoogle Apps Scriptを用いて簡易的なデータ受信・記録サーバーにすると開発・テストにとても便利です。ただしSpreadsheetにもデータ上限があるので、永続的に1つのファイルにデータを書き続けていると溢れてしまい、新規データを保存できなくなります。

そこで保存先を分割することを考えてみました。ここでは日付ごとに違うSpreadsheetにすることとしました。

下のコード例では指定したフォルダーに「yyyyMMdd」(例:20210123)というファイル名のSpreadsheetにデータを保存(追記)していきます。ここでファイルがなければ生成とヘッダーとなる1行目を記入してから追記します。

DATA_FOLDER_ID = "!!!!! input FOLDER ID !!!!!";

function openDataFile() {
  var dataFolder = DriveApp.getFolderById(DATA_FOLDER_ID);
  var strDate = Utilities.formatDate(new Date(), 'Asia/Tokyo', 'yyyyMMdd');

  var fi = dataFolder.getFilesByName(strDate);
  var dataFile;

  if (fi.hasNext()) {
    Logger.log("found");
    dataFile = fi.next();
  } else {
    Logger.log("not found");
    var sf = SpreadsheetApp.create(strDate);
    var sheet = sf.getSheets()[0];
    sheet.appendRow(["date", !!!!! input header info !!!!! ]);
    dataFile = DriveApp.getFileById(sf.getId());
    dataFile.moveTo(dataFolder);
  }

  Logger.log(strDate);

  return dataFile;
}

function doPost(ee) {
  var strDate = new Date();
  var dataFile = openDataFile();
  var sheet = SpreadsheetApp.openById(dataFile.getId()).getSheets()[0];
  try {
    var line = ee.postData.getDataAsString();
    var values = JSON.parse(line);

    var value1 = values.value1;
    !!!!! change and add your json parse code !!!!!

    sheet.appendRow([strDate, value1 !!!!! input your value names !!!!! ]);
  } catch (e) {
    sheet.appendRow([strDate, "error", line, e ]);
  }
}

コード例では毎日となっていますが、ファイル名(openDataFile内のstrDate変数)の生成定義を変更すれば毎月、毎週などと展開可能です。

またJSONデータを受信していますが、実際には何でも構いません。実際に私が試行したのはJSONに近いけれどもJSONではない形式のデータをJSON形式にreplaceで変換してからパースしていました。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です