Python
AWS

PythonでGoogle Formの自動回答をしてみた

まえがき

おなじGoogle Formに毎日回答する必要があったのですが,非常にめんどくさかったので自動化してみました.

使ったもの

  • Python3
    • requests
  • Google Chrome Developer Tool
    • Formを解析するため
  • AWS Lambda
    • 定刻にスクリプトを走らせるため
  • Line Notify
    • 結果通知

概要

Google FormはURLパラメータを用いて回答情報を送信しています.(参考:URLパラメータとは )
なのでまずはGoogle Chrome Developer Toolなどを用いてFormを解析し,パラメータキーを取得します.

次にpythonのrequestsを用いてurlを生成,HTTPリクエストを送信します.

定期的に実行したかったので,AWS Lambdaを使って毎日定刻に走らせています.
また,結果はLine Notifyを用いてスマホで見れるようにしています.

1. Google FormのURLパラメータの取得

Google FormではURLパラメータを用いてフォームの情報を送信しています.  
なのでまずはパラメータのキーを取得する必要があります.
キーはGoogle Chrome Developer Toolsを用いると簡単に取得することができます.
例えば画像のように,ラジオボタンの要素を解析すると,

<input type="hidden" name="entry.1695359955" jsname="L9xHkb" value="yes">

というように,input要素が見つかります.
このname属性の"entry.1695359955"がURLパラメータのキーとなります.控えておきましょう.

test.png

2. Requestsによるフォーム登録

Google FormのURLは,例えば

https://docs.google.com/forms/d/e/1FAIpQLSfi7niZmRi2pPG-SwQOCoQGbsqD0dVr7fN3A-Fxu9BZFNS7rQ/viewform

というように,URLの末尾が"viewform"となっています.
フォームを登録する際はこの"viewform"を"formResponse"に変え,URLパラメータを追加しましょう.

URLパラメータの追加はpython requestsモジュールを用いて簡単にできます.

また,HTTPリクエストもrequestsモジュールを用いて簡単にできます.
具体例は次のようになります.

cfg_fname = "cfg.json"
with open(cfg_fname, "r") as f:
    cfg = json.load(f)


def main():
    # set request params
    params = {"entry.{}".format(cfg["entry"][k]): cfg["output"][k] for k in cfg["entry"].keys()}

    # submit
    r = requests.get(cfg["form_url"] + "formResponse", params=params)

"cfg.json"ファイルに,先ほど取得したパラメータキーや値を書いています.

3. Line Notifyを用いた結果通知

登録が成功したかどうかをLineに通知します.
これもrequestsを用いることで非常に簡単に行うことができます.
以下の記事を参考にしてみてください.

Qiita : PythonでLineに通知を送る

4. AWS lambdaを用いて自動実行

AWS lambdaというクラウドサービスを用いることで,スクリプトを定刻に自動で実行することができます.
例えば以下の記事などを参考にしてみてください.

Qiita : AWS lambda 超入門

まとめ

非常に簡潔なコードによって,毎日同じGoogle Formに登録するという苦しみから解放されました.
実際のコードは Githubに挙げたので参考にしてみてください.

Github : googleform_auto_submitter

追記

Google Apps Scriptでやったほうが楽かもしれません.