Googleスプレッドシート│POST通信で書き込む方法

Google Apps Script(GAS)を使って、外部からスプレッドシートにPOST通信でデータを書き込む方法を紹介します。

GET/POSTの両方に対応できるようにすれば、簡易データベースやWebhook受け取り口として活用することも可能です!

使われたツールのログを作りたかったので検証しました。

目次

スプレッドシートの用意

まず、以下のようなカラムを準備します:

scriptnamedate
text.jsxt_yamada2019/08/11

GASでGET/POST通信を処理するコード

スプレッドシートのスクリプトエディタで以下のコードを記述します。

function doGet(e) {
  var ss        = SpreadsheetApp.getActiveSpreadsheet();
  var sheet     = ss.getSheetByName('シート1');
  var sheetData = sheet.getRange('A2:C' + sheet.getLastRow()).getValues();

  var responseList = [];
  sheetData.map(function(d) {
    responseList.push({ script: d[0], name: d[1], date: d[2] });
  });

  var response = {
    data: responseList,
    meta: { status: 'success' }
  };

  return ContentService.createTextOutput(JSON.stringify(response)).setMimeType(ContentService.MimeType.JSON);
}

function doPost(e) {
  var ss     = SpreadsheetApp.getActiveSpreadsheet();
  var sheet  = ss.getSheetByName('シート1');
  var data   = JSON.parse(e.postData.contents);

  // スプレッドシートに追記
  sheet.appendRow([data.script, data.name, data.date]);

  return ContentService.createTextOutput(JSON.stringify({
    result: 'success',
    data: data
  })).setMimeType(ContentService.MimeType.JSON);
}

Webアプリケーションとして公開

  1. メニュー >「公開」>「ウェブアプリケーションとして導入」
  2. 「アプリケーションにアクセスできるユーザー」→「全員(匿名ユーザーを含む)」を選択
  3. 発行されたURLを控えておきます。

Windowsで curl を使う方法

1. curlのインストール(Windows)

MacやLinuxにはcurlが最初から入っていますが、Windowsでは手動導入が必要です。

  1. 以下のURLからWindows版のcurlをダウンロードします:
    https://curl.haxx.se/windows/
  2. curl-7.65.3-win64-mingw などを選択して展開
  3. 任意の場所(例:C:\curl-7.65.3-win64-mingw\)に置きます

2. 動作確認(コマンドプロンプト)

コマンドプロンプトを開き、以下のように実行:

cd C:\curl-7.65.3-win64-mingw\bin\
curl --help

無事にオプション一覧が表示されればOKです。

GET通信でスプレッドシートからデータを取得

curl -L "https://script.google.com/macros/s/xxxxxxxxxxxxxxxxxxx/exec"

スプレッドシートの内容がJSONで取得できたら成功です。

POST通信でスプレッドシートに書き込む

以下のコマンドをWindowsの cmd で実行します(JSONの囲みはダブルクォーテーションで)

curl -X POST -H "Content-Type: application/json" -d "{\"script\":\"hoge.jsx\", \"name\":\"i_suzuki\", \"date\":\"2019/08/11\"}" -L "https://script.google.com/macros/s/xxxxxxxxxxxxxxxxxxx/exec"

MacやLinuxの場合は、シングルクォーテーションでもOK:

curl -X POST -H "Content-Type: application/json" -d '{"script":"hoge.jsx", "name":"i_suzuki", "date":"2019/08/11"}' -L "URL"

実行結果:スプレッドシートにデータが追加

コマンドを送信すると、スプレッドシートに1行追記されます。

GAS側でJSONを受け取り、表にデータを追加する動作が確認できます。

まとめ

  • GASの doPost() で外部からのJSONデータをスプレッドシートに保存可能
  • curl でのGET/POST通信のテストはとても便利
  • Webアプリケーション化すれば、Slackや外部ツールと連携可能に!

今後はWebhookやフォームの自動受付などにも応用していけます。

一度作っておくと、日々の自動化に大きく貢献するのでおすすめです!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

WAZAの有料記事のサブスクリプションも開始しました。

目次