tl;dr
- GoogleフォームAPIの GET https://forms.googleapis.com/v1/forms/{formId}
を使う - 1のレスポンスデータを元に、以下の要領でURLを組み立てる
<responderUriの値>?usp=pp_url&entry.<questionIdを10進数に変換した値>=<設定したい値をURLエンコードした値>
背景:Googleフォームの「事前入力したURL」を動的に生成したい
Googleフォームには入力欄にあらかじめ値を設定した状態でフォーム画面を表示させる機能がある。
これはGoogleフォームのUIの「事前入力したURLを取得」という機能から作ることができる。
この機能は便利なのだが公式提供はUIでの操作のみで、APIは提供されていない。
そのためプログラムで動的に作成することが面倒くさく、実現するにはページのhtmlを解析して必要なパラメーターを見つけ出さなければならなかった。
さて、最近GoogleフォームのAPIが一般公開となった。
GoogleフォームのパラメーターがAPI経由で取得することができるようになったのだから「事前入力したURL」も従来より楽に作れるだろうなと思いやってみた。
結果少し癖がある箇所はあったが、思ったとおり簡単に作れたのでその記録をしためておく。
やり方
今回は作成したGoogleフォームの 申し込みチケットID
という回答欄にチケットのIDを事前入力する例を考える。事前入力するチケットのIDは イ 49-1番
とする。
すでにGoogleフォームの項目は作成済みで、formIdはわかっているものとする。
はじめに GET https://forms.googleapis.com/v1/forms/{formId}
を叩いてGoogleフォームのパラメーターを取得する。
取得に成功すると以下のようなJSONがレスポンスとして返ってくる(値は少し変えてある。)
{
"formId": "...",
"info": {
...
},
"settings": {
...
},
"revisionId": "...",
"responderUri": "https://docs.google.com/forms/d/e/1FAIAQNCdz3HwapvTAuZY3qHHjgwMT2vUdaEugk991xPvxxb6sijnBLQ/viewform",
"items": [
{
"itemId": "...",
"title": "申し込みチケットID",
"questionItem": {
"question": {
"questionId": "7c6cb33e",
"textQuestion": {}
}
}
},
{
...
}
]
}
- レスポンスからベースとなるURL
responderUri
を探す。今回はhttps://docs.google.com/forms/d/e/1FAIAQNCdz3HwapvTAuZY3qHHjgwMT2vUdaEugk991xPvxxb6sijnBLQ/viewform
である - URLの末尾に固定値
?usp=pp_url
を足す - レスポンスから "申し込みチケットID" の回答欄の質問ID
questionId
を探す。今回は7c6cb33e
である。なお、itemId
はまた違う値なので取り違えないように注意する。 -
questionId
の値を16進数とみなし、16進数 -> 10進数変換を行う。今回は7c6cb33e
->2087498558
となる。
なお、questionId
は「16進数8桁」の書式のようなので、値の頭が0から始まることもある。進数変換ロジックによっては注意が必要。 - URLの末尾に、
&entry.<questionIdを10進数に変換した値>=
を足す。 今回は&entry.2087498558=
を足す - URLの末尾に、「"申し込みチケットID"に設定したい値をURLエンコードした値」 を足す。今回は
イ 49-1番
->%E3%82%A4%2049-1%E7%95%AA
を足す
-> 最終的に以下のURLを得る
https://docs.google.com/forms/d/e/1FAIAQNCdz3HwapvTAuZY3qHHjgwMT2vUdaEugk991xPvxxb6sijnBLQ/viewform?usp=pp_url&entry.2087498558=%E3%82%A4%2049-1%E7%95%AA
おわりに
16進数 -> 10進数に変換しないといけないものの、おおむね簡単に作成することができた。