LoginSignup
2
0

More than 5 years have passed since last update.

Google SpreadsheetでAWS SNSから通知をうけとり、データを更新する方法

Last updated at Posted at 2018-03-14

元となっているアイデアは下記の記事です。
この記事を読んで、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) {

}
2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0