Google spreadsheet にREST APIを追加(その1)

HTTP GETリクエストでGoogle spreadsheetに追記する

概要

Node.jsでGoogle spreadsheet にデータを書き込む で Google Drive APIでGoogle spreadsheet にデータを書き込む方法を紹介しましたが、 クライアント側の処理をもっと簡単にするためにREST APIを追加してHTTP GETリクエストでデータを書き込めるようにしてみました。

手順

まずは操作されるspreadsheetを作成します。

次に、作成したspreadsheetにGoogle Apps Script(GAS)を追加します。

新しいウィンドウでスクリプトエディタが開きます。

/**
 * GETリクエストで渡されたデータをスプレッドシートの最終行に追加する
 *
 * @param {event object} e - 要求パラメータ
 * @return {object} HTML出力
 */
function AddDataToSeet(e) {
  Logger.log("AddDataToSeet start");

  // 記録するシート(現在のスプレッドシートのアクティブなシート)
  var sheet = SpreadsheetApp.getActiveSheet();

  var dt = new Date();    // 日付
  var v0 = "";            // デフォルト値
  var v1 = "";
  var v2 = "";

  if(e.parameter.v0 !== undefined){
    v0 = e.parameter.v0;    // GETパラメータでv0が設定されていたら変数設定
  }
  if(e.parameter.v1 !== undefined){
    v1 = e.parameter.v1;    // GETパラメータでv1が設定されていたら変数設定
  }
  if(e.parameter.v2 !== undefined){
    v2 = e.parameter.v2;    // GETパラメータでv2が設定されていたら変数設定
  }

  // スプレッドシートの最終行に追加
  sheet.appendRow([dt, v0, v1, v2]);

  // HTML表示データを生成
  var output = ContentService.createTextOutput();
  output.setMimeType(ContentService.MimeType.TEXT);
  // メッセージボディ
  output.setContent("set data:" + "date=" + dt + ",v0=" + v0 + ",v1=" + v1 + ",v2=" + v2);
  return output;
}

/**
 * GETリクエストの処理
 *
 * @param {event object} e - 要求パラメータ
 * @return {object} HTML出力
 */
function doGet(e) {
  // 処理本体
  output = AddDataToSeet(e);
  return output;
}

[!NOTE] doGet関数のパラメータeについては、このへんを参照してください。

例えば以下のコマンドでアクセスする

curl -L "«上でコピーしたURL»?v0=1&v1=2&v2=3"

実行すると、対象のスプレッドシートの最終行に以下のデータが追加されます。

スクリプトを修正した場合、再度「新しいデプロイ」を実行する必要がある。

または、「デプロイ」→「デプロイをテスト」で表示されるURLを使用すると、デプロイせずに現在の最新ソースで実行できる。
ただし、この場合、ユーザ認証が必須になってしまうので、ブラウザ等でアクセスする必要がある。
どうしてもcurlでアクセスしたい場合は、ヘッダにAuthorization: Bearer «アクセストークン»を追加してやれば良い。(あまりおススメはしないけど)
やり方はここらへんを参考にしてください。

おまけ

時刻の文字列を取得した場合、知らないタイムゾーンになっていて困ったときはタイムゾーンを変更すれば良い。

タイムゾーンを変更するにはこちら。