はじめに
コロナウイルス関係で研究室の退室時に、その日の入退室時間をGoogle formで入力する必要があります。
毎日行うのが面倒なのと、入力忘れも多いので全自動にしてしまおうというプロジェクトです。
入退室時にカメラによる顔認証で人物を特定し、その人の情報をGoogle formで自動入力/送信します。
今回はその自動入力/送信の部分をまとめました。
自動入力の方法
Google フォームのURL(例)
(https://docs.google.com/viewform?)
viewformの後に「usp=pp_url」を加えることで、事前入力があることを知らせてあげる。
次に、フォームの各質問を識別する番号があるので、Chromeの検証画面で質問のdivを探し、2階層目で以下のような番号を探す。
番号を見つけたらentry.番号=回答内容
の形でパラメータを加える。
以下のような形でつなげればok
https://~/viewform?usp=pp_url&entry.1534939278=テスト太郎&entry.511939456='+student_id
研究室の入退室報告の場合(メモ)
研究室の場合は氏名と学籍番号、入退室日時の入力が必要です。
識別番号は以下の通りとなっていました。
各入力の識別番号
氏名:208832475
学籍番号:913668226
入退室日時:1243542068
備考:1484015294
プログラムの作成
識別番号がわかったので、実際にプログラムを書いていきま
す。
汎用性を高めるために、Google formごとに依存するurl、識別番号はcfg.json
にまとめます。
form_url
はviewform?
の手前です。
{
"form_url": "https://docs.google.com/forms/6_m-WWhmzw/",
"entry": {
"name": 2005620554,
"id": 1045781291,
"time": 1065046570
},
"output":{
"name": "テスト太郎",
"id": "00110220404",
"time": "2020/11/7 13-19"
}
}
fname = "cfg.json"
with open(fname, "r") as f:
cfg = json.load(f)
# 回答フォームの作成
params = {"entry.{}".format(cfg["entry"][k]): cfg["output"][k] for k in cfg["entry"].keys()}
res = requests.get(cfg["form_url"] + "formResponse", params=params)
# 回答ができてるかの確認
if res.status_code == 200:
print("Done!")
else:
res.raise_for_status()
print("Error")
これで自動送信が可能です。
(googleアカウントのログインが必要ない場合に限る)
参考
毎朝5時にGoogle Formに自動回答したい - Qiita
Google Form自動回答Botでクソアンケートに勝つ(Python3) - free(malloc(sizeof(MRM)));