1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

グーグルスプレッドシートにポストする

Last updated at Posted at 2015-10-19

経緯

>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単独だとクロスドメインで簡単にとって来れない
・安定したプロキシ的なサービスをしらない

某ライブラリを利用して、 下記のようにした。

test.php
<?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呼び出しでサーバーサイド送信処理など

(なんちゃってプロキシ処理)

サーバーサイド使わずにやりたい。。

1
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
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?