LANG SELRCT

Google Apps Scriptのコードを書く場所  (新規作成: スプレッドシート | スクリプトエディタ

2022年1月3日月曜日

GASでAPIを作ってPOSTでpayloadを渡したい


MISSION
Google Apps ScriptのWebアプリにpayloadでデータを渡したい


KEY
eventObject.postData.contents


PROCESS 
Google Apps Scriptでpayloadを受け取るWebアプリを作る(api.gs)

そのWebアプリにpayloadを渡すコードを書く(コード.gs)


STEPS

STEP1
Apps Scriptの新規プロジェクトを作成します


STEP2
api.gsをコピーして貼り付けます


STEP3
const FOLDER_ID = "フォルダID" の右辺に、出力先となるGoogleドライブのフォルダIDを入れます


STEP4
Webアプリケーションとして導入します


STEP5
もう一つ新規でApps Scriptのプロジェクトを作成します


STEP6
コード.gsをコピーして貼り付けます


STEP7
const url = 'api.gsのWebアプリURL' の右辺に、STEP4で導入したWebアプリのURLを入れます


STEP8
createData()を実行します


Googleドライブの指定したフォルダにpayloadで渡したデータが保存されます。
ログにsuccessと保存したデータが表示されます。


今回使うコードは2つ
それぞれ別々のプロジェクトに書きます。
  1. api.gs 
  2. コード.gs

api.gs 
/************************************
payloadはeventObject.postData.contentsで取得できる
取得してGoogleドライブに保存する
************************************/
function doPost(eventObject) {
  const contents = eventObject.postData.contents;
  const created = createFile(contents);  
  return ContentService.createTextOutput(created).setMimeType(ContentService.MimeType.JSON);
}

/************************************
Googleドライブの指定フォルダにJSONファイルを保存する場合に使う
************************************/
const FOLDER_ID = "フォルダID";// create_fileで保存するときのGoogleドライブのフォルダID

function createFile(json) {
  const content_type = "application/json";
  const date = Utilities.formatDate(new Date(), 'Asia/Tokyo', 'yyyy/MM/dd/HH:mm:ss:SSS');// ファイル名に追加する実行日時
  const file_name = "GAS API" + date;
  const blob = Utilities.newBlob("", content_type, file_name);
  const file = blob.setDataFromString(json, "UTF-8");
  const folder = DriveApp.getFolderById(FOLDER_ID);
  folder.createFile(file);
  return "success\n" + json;
}




コード.gs 
/************************************
これは別のファイルに書くコードだけど
************************************/
function createData() {
  const url = 'api.gsのWebアプリURL';// V8だとScriptApp.getService().getUrl()は/devになるので/execを決め打ちで指定しておく
  const payload = {
    "project": "PRO",
    "name": "namae"
  }
  const options = {
    "method": "post",
    "payload": JSON.stringify(payload),
    "contentType": "application/json"
  }
  const response = UrlFetchApp.fetch(url, options).getContentText();
  Logger.log(response);
}





最新の投稿

Google SpreadsheetのnotesをDocumentに書き出したい

Google SpreadsheetのnotesをまとめてDocumentに書き出したくて書いたコードです。 実行プロセス getSheetNotes():noteを取得したいシートの範囲を指定して取得します notes.join("\n"):取得したデータ(...