Google Forms APIでフォームの回答を取得する

2022.03.24

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

先日Google Forms APIでフォームを作成しました。

今回はこのフォームの回答をAPIで取得するということをやっていきたいと思います。

回答を取得してみる

フォームの回答概要

APIでは

  • list
    • フォームの回答の一覧を取得する
  • get
    • フォームから1つの回答を取得する

の2つのメソッドが用意されていました。

回答リスト(listメソッド)

GET https://forms.googleapis.com/v1/forms/{formId}/responses で取得できます。

リクエスト

リクエストパラメータとして、

formIdが必須となっています。 そのほか、

  • filter
    • 現在は,timestamp > Ntimestamp >= N がサポートされています。
    • timestampは2014-10-02T15:01:23Z / 2014-10-02T15:01:23.045123456Z のRFC3339UTC「Zulu」形式
  • pageSize
    • 取得する回答の数
    • 指定されていないかゼロの場合、最大5000の応答が返されます
  • pageToken
    • APIの結果にpageTokenが含まれていた場合、このトークンをリクエストパラメーターに含むと次のページ(回答リスト)にアクセスできます。

のパラメータが使用可能です。

レスポンス

formIdを指定してAPIにアクセスしてみました。

正常な結果は以下のように返されます。

{
  "responses": [
    {
      "responseId": "ACYDBNjs6U09epUfNYZFGSYdkbJEBohbA0jNAEC8b1xxYPLPkD4sLK_YnJt1eMoVuRyEhD0",
      "createTime": "2022-03-24T01:58:09.055Z",
      "lastSubmittedTime": "2022-03-24T01:58:09.055199Z",
      "answers": {
        "6a401f94": {
          "questionId": "6a401f94",
          "textAnswers": {
            "answers": [
              {
                "value": "初"
              }
            ]
          }
        },
        "2063e2c0": {
          "questionId": "2063e2c0",
          "textAnswers": {
            "answers": [
              {
                "value": "カーキ"
              }
            ]
          }
        },
        "09f771e6": {
          "questionId": "09f771e6",
          "textAnswers": {
            "answers": [
              {
                "value": "時計"
              }
            ]
          }
        }
      }
    },
    {
      〜〜〜〜〜〜 略 〜〜〜〜〜〜〜
    }
  ]
}

responsesに回答の中身が入っています。

{
  "responses": [
    {
      object (FormResponse)
    }
  ],
  "nextPageToken": string
}

中身は、FormResponse です。

answersというキーに質問に対する実際の回答が格納されています。

{
  "questionId": string,
  "grade": {
    object (Grade)
  },

  // Union field value can be only one of the following:
  "textAnswers": {
    object (TextAnswers)
  },
  "fileUploadAnswers": {
    object (FileUploadAnswers)
  }

回答単体(getメソッド)

GET https://forms.googleapis.com/v1/forms/{formId}/responses/{responseId} で取得できます。

リクエスト

リクエストパラメータとして、

formIdresponseIdが必須となっています。

レスポンス

listの時と同じようにFormResponseが含まれます。

{
  "formId": "1FuZoos_lZR1PJCRt-ptpexgv3Gt5bGEZgkVBkBLsQoQ",
  "responseId": "ACYDBNi2pBOf2YkOTryQo6uKZkPASoC6OM1KzwSTsoj6FRR2YRCqG7PnVg-LB0Gtvfz_0WA",
  "createTime": "2022-03-24T01:59:24.422Z",
  "lastSubmittedTime": "2022-03-24T01:59:24.422367Z",
  "answers": {
    "6a401f94": {
      "questionId": "6a401f94",
      "textAnswers": {
        "answers": [
          {
            "value": "以前にある"
          }
        ]
      }
    },
    "2063e2c0": {
      "questionId": "2063e2c0",
      "textAnswers": {
        "answers": [
          {
            "value": "白"
          }
        ]
      }
    },
    "09f771e6": {
      "questionId": "09f771e6",
      "textAnswers": {
        "answers": [
          {
            "value": "かまぼこ"
          }
        ]
      }
    }
  }
}

最後に

APIを使ってフォームの回答を取得してみました。

フォームの編集画面の回答タブからもスプレッドシートに出力したり、csvでダウンロードしたりもできますが、APIを使うことでよりシステムに組み込むことが容易になるのではないでしょうか?

APIのレスポンスをGoogle データポータルで可視化してみたのですが、 複数のアンケート結果を自動的に収集してダッシュボードに表示するといったことができそうな感じです。 formsの既存機能でも結果の可視化はできますが、他のデータと連携したいというような複雑な要件があれば是非使っていきたいと思いました。