アンケートフォームとかでも使いたいけどギリギリ使えない。
なんとか、「素のPOSTを受け取ったらそれを限られた人しか見れないドキュメントに保存」という動きが作れたのでここで説明。POSTを送る側は、PHPとかで適当に作るイメージ。だからGoogleAppsScriptをAPI的に動かそうってわけ。
ウェブアプリケーションとして導入のくせ者
スクリプトエディタから、「ウェブアプリケーションとして導入」を選ぶと、単独のURLを持つことができる。さぁこのURLがくせ者。このURLはいくつかモードがある。
- 開発中モード
- 最後にDEVがつく。どうもこいつは今編集しているブラウザからのセッションを見て、ログイン中のユーザかどうかを見てるっぽい
- だから外部からのアクセスするテストにはこのURL使えない
- 版という概念
- 何度編集してもかわんねーなーという時がある。そういうときには、
ファイル→版を管理
を選らんで、版を変える。
版を変えたら、もう一回「ウェブアプリケーションとして導入」を選らんで、最新版の番号を選ぶ
サンプルスクリプトはこれ
// Script-as-app template.
function doPost(e) {
insertData(e.parameter);
var output = ContentService.createTextOutput();
output.setMimeType(ContentService.MimeType.JSON);
output.setContent(Utilities.jsonStringify(e)); //送られてきたパラメータを全部返す(デバッグ用)
return output;
}
function insertData(param){
//urlは適当に変えて
var sheet = SpreadsheetApp.openByUrl("https://docs.google.com/spreadsheet/ccc?key=xxxxxc#gid=0");
//postパラメータは適当に変えて
sheet.appendRow([param.name,param.company,param.mail,param.tel,param.division,param.position]);
}
セキュリティモデル
どういうセキュリティで動かすかっていうとね。
一般ユーザがアクセスするPHP(これは認証なし)
↓
GASの「アプリケーションにアクセスできるユーザー:」を「全員(匿名ユーザ含む)」
GASの「次のユーザーとしてアプリケーションを実行:」を「自分」
に設定する
↓
自分に編集権限のあるスプレッドシートにアクセス
こんな感じ。こうやって中と外を明確に分けることができる。
Googleのセキュリティモデルがちょっと変わって、PHPからのアクセスがくっそ面倒になったのね。トークンがどうたらこうたらで。PHPだとZendGDataとか使わなくちゃいけなくて、そいつがまたやったらファイルが多い。クライアントログインしか方法がないAPIもまだあるのに「クライアントログインは非推奨です」とかいいよる。ペラ1のPHPでやりたかったので、認証はGoogleAppsScript側で境界を作ろうと。そしたらほうら便利。

0 件のコメント:
コメントを投稿