LoginSignup
3
3

More than 1 year has passed since last update.

Googleフォームの「事前入力したURL」を動的に生成する

Posted at

tl;dr

  1. GoogleフォームAPIの GET https://forms.googleapis.com/v1/forms/{formId}
    を使う
  2. 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": {}
        }
      }
    },
    {
        ...
    }
  ]
}
  1. レスポンスからベースとなるURL responderUri を探す。今回は https://docs.google.com/forms/d/e/1FAIAQNCdz3HwapvTAuZY3qHHjgwMT2vUdaEugk991xPvxxb6sijnBLQ/viewform である
  2. URLの末尾に固定値 ?usp=pp_url を足す
  3. レスポンスから "申し込みチケットID" の回答欄の質問ID questionId を探す。今回は 7c6cb33e である。なお、 itemId はまた違う値なので取り違えないように注意する。
  4. questionId の値を16進数とみなし、16進数 -> 10進数変換を行う。今回は 7c6cb33e -> 2087498558 となる。
    なお、 questionId は「16進数8桁」の書式のようなので、値の頭が0から始まることもある。進数変換ロジックによっては注意が必要。
  5. URLの末尾に、 &entry.<questionIdを10進数に変換した値>= を足す。 今回は&entry.2087498558= を足す
  6. 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進数に変換しないといけないものの、おおむね簡単に作成することができた。

3
3
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
3
3