lisz-works

プログラミングと興味を貴方に

GASでPOSTで値をセット!Google Apps ScriptにPOSTしたリクエスト

【スポンサーリンク】

Google Apps Script

GAS(Google Apps Script)にPOSTリクエストして、「値をセットする」を試してみました!

これを使えば、

「外部からなにかの値を受け取る→GASで処理」という流れが作れます。

  1. 渡した値をスプレッドシートに書いたり
  2. 値を編集して、Slackなど別のアプリに飛ばしたり

色々できちゃいまうす!

POSTのためにすること

やることの流れは

  1. ソースを書く(主にdoPost)
  2. ウェブアプリケーション公開設定
  3. POSTリクエストする!

といった流れです!

GETとほぼ同じですね。

ソース

こんな感じです!

function doPost(e) {
  // 取得したパラメータ(JSON)をパース
  var params = JSON.parse(e.postData.getDataAsString());
  // パラメータから対象の値を抽出
  var value = params.value;
  // 何らかの処理...(例: ログ出力)
  Logger.log("value: " + value);
  
  // 結果を返す  
  var output = ContentService.createTextOutput();
  output.setMimeType(ContentService.MimeType.JSON);
  output.setContent(JSON.stringify({ message: "success!" }));
  return output;
}

結果を返すのトコロはあまりよく分かっていないが、きっと成功メッセージ返してるからこれでいいのであろう。

公開範囲の設定について

POSTリクエストを受けるものを作る場合、最も簡単にやる場合、「アプリケーションにアクセスできるユーザー」の設定に注意が必要です。

GETのときは「自分だけ」でもいけたのですが……

POSTの場合は、「全員(匿名ユーザーを含む)」にする必要があります。

「この設定にしないで、POSTやりたいんだけど!」

という場合は、別途設定が必要そうです。

ぼくは今のところ困らないので、この設定にして使っています……

POSTするには

ロジックを作っても、外部からPOSTリクエストしないと確認ができません。

こんなときに、Linuxが役に立ちます。

curlコマンドを使用します。

curl -v -H "Accept: application/json" -H "Content-type: application/json" -X POST -d <転送するパラメータ(JSON))> <URL>

今回の場合は、こんな感じになります。

curl -v -H "Accept: application/json" -H "Content-type: application/json" -X POST -d '{"value":"lisz-works"}' https://script.google.com/macros/s/XXXXX/exec

実行結果

今回のような単にdoPostを作っただけの状態で、「アプリケーションにアクセスできるユーザー」別に試してみました。

アクセス自分だけ(失敗)

失敗の場合、こんな感じでわちゃわちゃ出力されます……

出力を表示する

$ curl -v -H "Accept: application/json" -H "Content-type: application/json" -X POST -d '{"value":"lisz-works"}' https://script.google.com/macros/s/XXXXX/exec
<!DOCTYPE html><html lang="ja"><head><meta name="description" content="ウェブ ワープロ、プレゼンテーション、スプレッドシート"><meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=0"><link rel="shortcut icon" href="//ssl.gstatic.com/docs/common/drive_favicon1.ico"><title>Google ドライブ --  ページが見つかりません</title><link href="//fonts.googleapis.com/css?family=Product+Sans" rel="stylesheet" type="text/css"><style>/* Copyright 2018 Google Inc. All Rights Reserved. */
* Connection #0 to host script.google.com left intact
.goog-inline-block{position:relative;display:-moz-inline-box;display:inline-block}* html .goog-inline-block{display:inline}*:first-child+html .goog-inline-block{display:inline}#drive-logo{margin:18px 0;position:absolute;white-space:nowrap}.docs-drivelogo-img{background-image:url('//ssl.gstatic.com/images/branding/googlelogo/1x/googlelogo_color_116x41dp.png');background-size:116px 41px;display:inline-block;height:41px;vertical-align:bottom;width:116px}.docs-drivelogo-text{color:#000;display:inline-block;opacity:0.54;text-decoration:none;font-family:'Product Sans',Arial,Helvetica,sans-serif;font-size:32px;text-rendering:optimizeLegibility;position:relative;top:-6px;left:-7px;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}@media (-webkit-min-device-pixel-ratio:1.5),(min-resolution:144dpi){.docs-drivelogo-img{background-image:url('//ssl.gstatic.com/images/branding/googlelogo/2x/googlelogo_color_116x41dp.png')}}</style><style type="text/css">body {background-color: #fff; font-family: Arial,sans-serif; font-size: 13px; margin: 0; padding: 0;}a, a:link, a:visited {color: #112ABB;}</style><style type="text/css">.errorMessage {font-size: 12pt; font-weight: bold; line-height: 150%;}</style></head><body><div id="outerContainer"><div id="innerContainer"><div style="position: absolute; top: -80px;"><div id="drive-logo"><a href="/"><span class="docs-drivelogo-img" title="Google ロゴ"></span><span class="docs-drivelogo-text">&nbsp;ドライブ</span></a></div></div><div align="center"><p class="errorMessage" style="padding-top: 50px">現在、ファイルを開くことができません。</p><p>アドレスを確認して、もう一度試してください。</p><div style="background: #F0F6FF; border: 1px solid black; margin-top: 35px; padding: 10px 125px; width: 300px;"><p><strong>あれもこれも Google  ドライブで</strong></p><p> Google ドライブにはドキュメントやスプレッドシート、プレゼンテーションなどを簡単に作成、保存してオンラインで共有できるアプリが揃っています。</p><p>詳細は<a href="https://drive.google.com/start/apps">drive.google.com/start/apps</a>をご覧ください。</p></div></div></div></div></body><style>#outerContainer {margin: auto; max-width: 750px;}#innerContainer {margin-bottom: 20px; margin-left: 40px; margin-right: 40px; margin-top: 80px; position: relative;}</style></html>

実際にコンソール上だと、折り返されるのでバーッと文字が表示されます……

全ユーザー匿名OK(成功)

成功すると、こんな感じにシンプルなHTMLが表示されます。

$ curl -v -H "Accept: application/json" -H "Content-type: application/json" -X POST -d '{"value":"lisz-works"}' https://script.google.com/macros/s/XXXXX/exec
20180904091919
https://script.google.com/macros/s/AKfycbxdL8tteIEctTuhtQaWXsoKwfkLZwKc9WGILc5KDagI-1U9CJU/exec
<HTML>
<HEAD>
<TITLE>Moved Temporarily</TITLE>
</HEAD>
<BODY BGCOLOR="#FFFFFF" TEXT="#000000">
<H1>Moved Temporarily</H1>
The document has moved <A HREF="https://script.googleusercontent.com/macros/echo?user_content_key=W_cIqVaD5gDTmioXuX19BUFzGQOxkWOMZcp2RZV9nZEmj7OSrmK3m_8nQ0c826AT2Cji5CTib2vmARk3KOYPErg1_1l3rLxm5_BxDlH2jW0nuo2oDemN9CCS2h10ox_1xSncGQajx_ryfhECjZnEtXwb0xDUB4RMWF9rjrK5rZzeE5lXR_DT1ps9729Odsc8-1pU4G4zsi29rEjeT7KkWY2nZ7HPw5&amp;lib=MypbpLMBT8_QJYpP0ZyUnstiHJHGnRMgN">here</A>.
</BODY>
</HTML>

参考

こちらを参考にしました。ありがとうございました!

qiita.com

yamap55.hatenablog.com

あとがき

POSTができると、色々と作れるものの幅が広がるような気がします……!

みなさんもPOSTを受ける処理を作って、なにかしてみてください!

GETリクエストを使いたい場合はコチラ。

www.lisz-works.com