公開されてない SpreadSheet を編集する際には認証が必要になり、ランタイムで更新するのは結構面倒になります
そのため、Google Apps Script (GAS) を利用して、お手軽にデータ更新を行う方法を記述します
今回はデータの追加・更新を行うため、GET ではなく POST を利用してデータ更新を行います
GAS
GAS で Post リクエストを受け取るためには doPost
が必要になります
送った json を受け取って、json を返すだけの処理が以下になります
function doPost(e) { var params = JSON.parse(e.postData.getDataAsString()); // 送信した json のパラメータを取得して Spread Sheet の編集処理を記述する params.***; // レスポンスをJsonで作成する var output = ContentService.createTextOutput(); output.setMimeType(ContentService.MimeType.JSON); output.setContent(JSON.stringify({ message: "Success" })); return output; }
例えば以下の json を送った際に sheetName
の値を取得するには params.sheetName
にアクセスします
{ sheetName : "Hoge" }
スクリプト
GAS を記述し「デプロイ」したあとに deployId
を取得して以下を呼び出すことで POST することができます
using System; using System.Collections; using System.Text; using UnityEngine; using UnityEngine.Networking; public class AppsScriptPost : MonoBehaviour { public IEnumerator Request(string deployId, string json, Action<string> success, Action fail) { var url = $"https://script.google.com/macros/s/{deployId}/exec"; var request = new UnityWebRequest(url, "POST"); // Json追加 var postData = Encoding.UTF8.GetBytes(json); request.uploadHandler = new UploadHandlerRaw(postData); request.downloadHandler = new DownloadHandlerBuffer(); request.SetRequestHeader("Content-Type", "application/json"); yield return request.SendWebRequest(); if (request.result == UnityWebRequest.Result.Success) { success.Invoke(request.downloadHandler.text); } else { fail.Invoke(); } } }