経緯
>GA解析でコンバージョンしたかったり項目を動的に変更したい。
>>インラインフレーム読み込みだと限界がある気がする。
>>>他の方法を模索。
調査
gasのgetPostメソッドで受信する方法
Google Apps ScriptにてPOSTで受け取って書き込む | eye4brain
http://goo.gl/c5BZmX
記載の方法で試してみたところ、iframeをターゲットにしてpostしていたためエラーが出た。
今のところ新しいChromeなど対応ブラウザのみの動作なのかな。
set 'X-Frame-Options' to 'SAMEORIGIN'.
ポイントとしては、スクリプトの公開範囲を「匿名含む全員」にすること。
その場合にもX-Frame-Optionsのエラーは出る。
自分の権限で実行するので(?)下手なことは出来ないかな。
JavaScript - Google Apps ScriptだけでSpreadSheetへのPOST APIを持つWebアプリケーションを公開する - Qiita
http://goo.gl/JvUTdW
上記も基本は同じだがcurlで実行している例がある。
[GAS]Googleフォームを経由せず、外部からデータを更新する - 技術のメモ帳
http://goo.gl/todroq
jsonでやりとりすればエラー無くレスポンスが受け取れた。
APIをつかって実行する方法
Google Apps Scriptを外部から実行できるGoogle Apps Script Execution APIを試してみた - F.Ko-Jiの「一秒後は未来」
http://goo.gl/M0P127
「Google Apps Script Execution API」というAPIがあるらしい。
たぶん、こちらの方が新しい手法なのだろうな。
コチラを使うメリットはなんだろう?
サーバーサイドで複雑にスクリプトを叩く場合とかなのかな。
あとは認証があるからセキュアなのかな。
他にあるとすれば、ウェブアプリの公開設定もしなくていいのかもな。
公式ドキュメント
Apps Script Execution API | Apps Script | Google Developers
https://goo.gl/gdKVmr
Create a Target Project for the Apps Script Execution API | Apps Script | Google Developers
https://goo.gl/XGpL1t
サーバーサイドでフォームを読み込む
(GASを経由せずにそのままフォーム送信)
GoogleFormを動的に取得してきたいと考えた。
動的取得じゃないとすると、変更があるたびに手動更新だったり、それ用の仕組みがほしくなるだろう。
汎用性を考えると、できればjsだけで完結させたかったのだけど、
下記条件を考えてとりあえずサーバーサイドで。
・GASのurlfetchapp()は利用に制限がある
・js単独だとクロスドメインで簡単にとって来れない
・安定したプロキシ的なサービスをしらない
某ライブラリを利用して、 下記のようにした。
<?php
require_once '_include/php/simple_html_dom.php';
$html = file_get_html('https://docs.google.com/forms/d/hogehoge/viewform');
$html->find('base', 0)->href = 'https://docs.google.com';
$html->find('base', 0)->target = '_self';
$html->find('#ss-submit', 0)->onclick = 'alert(1);';
echo $html->outertext;
exit;
GASを経由せずにそのままフォーム送信してしまう。
とりあえず、最初のsubmitをトリガーにしてコンバージョンとしてしまうにはこれでいい。
そうじゃなければ、POST送信もサーバーサイドでするか。何か違う気がする。
今更で、どうせサーバーサイドなら、むしろ、なんちゃってプロキシ処理を用意した方が良い気がしてきた。
その場合にも、jsじゃなくてdom書き換えまでしてしまったほうがいいかな。
js呼び出しでサーバーサイド送信処理など
(なんちゃってプロキシ処理)
略
サーバーサイド使わずにやりたい。。