質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

Q&A

解決済

1回答

7458閲覧

【GAS】FormAppで「事前入力済みURL」の作成方法

recter

総合スコア37

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

0グッド

0クリップ

投稿2018/03/01 14:02

編集2018/03/02 01:21

GoogleAppsScriptを用いてイベントの参加アンケートを動的に作成しようと考えています。
form作成機能の「事前入力したURLを取得」を使用した時のようなURLを作成したいのですが、
作成方法で行き詰っています。

現状のコード

Google

1function createForm() { 2 3 var form = FormApp.create("イベントアンケート"); 4 form.setTitle("xxxイベント") 5 6 var days = ["4/4","5/5","6/6"]; 7 var ans = ["参加","予定が合えば","不参加"]; 8 9 //入力項目作成 10 form 11 .addGridItem() 12 .setTitle("参加可能日") 13 .setHelpText("参加可能日を選択してください") 14 .setRows(day2) 15 .setColumns(gridAns); 16 17 Logger.log(form.getSummaryUrl());//全ての日付で"不参加"選択状態のURL出力を行いたい 18}

実際に作成したいフォームの例:
https://docs.google.com/forms/d/e/1FAIpQLSf3mRuZwJog1cgF243ex6G6bnqRqsXmJiHfnj4PGzwEe6UB-Q/viewform?usp=pp_url&entry.1164379453=%E4%B8%8D%E5%8F%82%E5%8A%A0&entry.506873954=%E4%B8%8D%E5%8F%82%E5%8A%A0&entry.598645542=%E4%B8%8D%E5%8F%82%E5%8A%A0

このURLを確認したところ
パラメータとして以下の4つを指定していることはわかりました。
0. usp=pp_url //よくわからない
0. entry.1164379453=%E4%B8%8D%E5%8F%82%E5%8A%A0 //entry.[選択肢ID?] = [選択内容のURLエンコード]
0. entry.506873954=%E4%B8%8D%E5%8F%82%E5%8A%A0 //同上
0. entry.598645542=%E4%B8%8D%E5%8F%82%E5%8A%A0 //同上


今回の解決策として以下の2点どちらかを想定しています。

  • 事前入力したURLを作成するメソッドがあれば、それを利用する
  • 選択肢ID?を取得し、無理やり文字列結合し作成する。

いずれかの方法を存知の方がいらっしゃいましたら、
よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

事前入力したURLを作成するメソッドがあれば、それを利用する

ないです。

選択肢ID?を取得し、無理やり文字列結合し作成する。

「Googleフォームの各質問項目へ初期値を設定するには」という問いに対し、多くのサイトが「URLのパラメータをいじればいいよ」という回答に終始しています。recterさんのようにGASにて生成と同時にセットするにはどうすればいいか、という情報にはたどり着けませんでした。(もちろんあるかもしれませんが)

しかしながら、面倒くさいですが、以下の手順で初期値をセットした状態のフォームURLを組み立てることは可能です。
なお、WEBスクレイピングを実行しますので、具体的なソースコードは公開せず、ロジックのみとします。

  1. 通常手順でフォームを生成
  2. getPublishedUrl() よりURL取得
  3. UrlFetchApp.fetch({フォームURL}).getContentText()の実行
  4. '.freebirdFormviewerViewItemsGridPinnedHeader > input' の name属性値 を取得(GridItemの場合)
  5. {フォームURL}+'?usp=pp_url&'以降を成形

※GridItemを含む各種項目アイテム(フォームのパーツ)クラスにはそれぞれgetId()なるそれらしきメソッドがありますが、取得される値は目的のものとは異なります。上述の通り必要なのはname属性値です。

以上、参考になれば幸いです。

投稿2018/03/02 08:21

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

recter

2018/03/06 00:46

回答ありがとうございます。 教えていただいたWEBスクレイピングを用いる方法を試したところ、 "通常の"Googleアカウントで作成する場合は問題なく実行することが出来ました。 しかし、現在利用を考えているものがGSuiteのアカウントのためか、 (3)を実行した際に取得した内容がGoogleFormのトップ画面のものとなってしまっております。 GSuiteの認証に関してはもう少し自分で方法が無いか探してみようと思います。 残っている問題は今回の質問とは直接関係ない部分ですので回答をベストアンサーとさせていただきます。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問