元となっているアイデアは下記の記事です。
この記事を読んで、AWS SNSから通知をうけとりGoogle Spreadsheetを更新した際に気が付いたことをまとめます。
Google Spreadsheet を簡易 Webサーバーとして動かして、手軽にWebHookを受け取る方法 by @kunichiko
AWS SNSに接続する
SNSにWeb Hookを追加する場合、確認イベントに応答する必要があります。
requestObjが取れている状態であれば、下記のように簡単に対応できます。
if(requestObj.Type === "SubscriptionConfirmation"){
subscribeSNS(requestObj.SubscribeURL);
}
function subscribeSNS(confirmURL){
var options = {
"method" : "get"
};
var result = UrlFetchApp.fetch(confirmURL, options);
return JSON.stringify(result);
}
ドキュメントの更新
sheet.getLastRow();
sheet.getLastColumn();
sheet.getRange(row,col).getValue();
sheet.getRange(row,col).setValue(value);
これ以上必要な情報はありますか:-p
追記
あった。。。
getRange遅いので、できる限り大きい単位で読み書きした方が良いです。
sheet.getRange(row,col,rowCount,colCount).getValues();
sheet.getRange(row,col,rowCount,colCount).setValues(value);
その他注意点
型について
シートに文字列で数字を設定しても、取得すると数値型になっていたりします。
===を用いた比較が失敗したりするのでご注意ください。
ロックの取得
追記以外の編集を行う場合には、排他処理のためにロックを取得する必要があります。waitLockを使えばロック取得に失敗するとエラーとなるので、SNSのようにリトライしてくれるWebhookであれば簡単に対応できます。
function doPost(e) {
var lock = LockService.getDocumentLock();
lock.waitLock(5000);
try{
doPostImpl(e);
}
finally{
lock.releaseLock();
}
}
function doPostImpl(e) {
}