体温入力を自動化しよう（倫理観有り）　の基礎

[う　え　き　ぷ　に　き　あ　く　ん　笑 Advent Calendar 2021](https://adventar.org/calendars/6939 "う　え　き　ぷ　に　き　あ　く　ん　笑 Advent Calendar 2021")　9日目です

##環境
Python 3.9.7（Python3以外の言語でも可能です。）

##みなさん
体温入力、やっていますか？ところで、このように思ったことがある方は多いのではないでしょうか。
「体温、いちいち入力して送信するのめんどくさい！」
と。
今回は、このストレスを少しでも減らすことを目標にします。

##この記事について
基本的には前述の通りですが、少し細かい注意点を説明いたします。
まず、本記事では~~執筆がめんどくさい~~移植のしやすやを考慮しコマンドラインからの実行を想定したプログラムについて解説いたします。
また、体温の入力は実際は手動になります（あくまでも、ストレスを少しでも減らすことを目標にしているため）（保険かけておいてよかった）。ご了承ください。
最後に、本記事内では体温入力・送信はGoogleフォームの利用を想定しています。

##どうやって？
では、どのようにストレスを減らすのが嬉しいのでしょうか。考えてみたところ、「いちいちGUIを操作して入力するのがめんどくさい」ということでした。少なくともぼくはそう思うので、みなさんもこの記事を読んでいる間はそう思っておいてください。
つまり、「CUIからの入力ならめんどくさくない」ということです（正しくない裏）。

##自動入力
では、Googleフォームへの自動入力はどのようにするといいのでしょうか。実は簡単に実現できます。
URLにパラメーターを追記すれば良いです。

##下調べ
では、どのようにパラメーターを追記すればいいのでしょうか？今回、ぼくが実際にGoogleフォームを作って確認してみました！すごい！[これです](https://docs.google.com/forms/d/e/1FAIpQLSc_jkn5Hx1P81_W_roSExv26axi-oHvTzSWkFZrIPv9ARhV4w/viewform?usp=sf_link "Googleフォーム")！
<img width="400" alt="Googleフォームスクショ.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/389480/d6e7a42e-f426-15d5-c33d-978c4e3055d3.png">

各入力フォームにはこのように
<img width="400" alt="コードスクショ" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/389480/b983ec7e-b800-e960-350b-c84bc7a7c16d.png">

識別番号が割り振られており、以下のように対応しています。
氏名入力：680942795
学籍番号：81256465
入力
　年：30087066_year
　月：30087066_month
　日：30087066_day
体温：428502447

これらはデベロッパーツールから確認することができます。
また、このように単体で確認することもできます。
<img width="600" alt="氏名入力スクショ" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/389480/0711d313-7ae4-93c9-d61e-03f5932d82fd.png">
この場合、大体が
[数字,フォーム名,null,数字,[[識別番号,null,数字]]]
という順番で並んでいます。

##パラメーターを追記しよう
パラメーターの追記は以下の形式で行います。
GoogleフォームのURL&entry.識別番号=入力値&entry.識別番号=入力値...（以下、追記したい分だけ追記する）
今回のURLはこれ
https://docs.google.com/forms/d/e/1FAIpQLSc_jkn5Hx1P81_W_roSExv26axi-oHvTzSWkFZrIPv9ARhV4w/viewform?usp=sf_link
で、識別番号は先ほどの通りなので、
例えば
氏名：なすび うえき
学籍番号：22222222
入力
　年：2021
　月：12
　日：25
体温：36.0
であるとします。
このときのURLは
https://docs.google.com/forms/d/e/1FAIpQLSc_jkn5Hx1P81_W_roSExv26axi-oHvTzSWkFZrIPv9ARhV4w/viewform?usp=sf_link&entry.680942795=なすび%20うえき&entry.81256465=22222222&entry.30087066_year=2021&entry.30087066_month=12&entry.30087066_day=25&entry.428502447=36.0
となります。実際に確認してみてください。ちゃんと入力されているはずですへへー！（？）
一つ注意点として、半角スペースは「%20」とする必要があります。

##実装
ここまでわかったら後は実装するだけです。今回はPython3で実装を行なっていますが、標準入出力と文字列操作が可能ならどの言語でも可能です。

```python
import datetime
URL = "https://docs.google.com/forms/d/e/1FAIpQLSc_jkn5Hx1P81_W_roSExv26axi-oHvTzSWkFZrIPv9ARhV4w/viewform?usp=sf_link"
name = "&entry.680942795=なすび うえき"
student_number = "&entry.81256465=22222222"
temperature = "&entry.428502447="
year = "&entry.30087066_year="
month = "&entry.30087066_month="
day = "&entry.30087066_day="
date = datetime.datetime.now()
created_URL = URL
created_URL += name.replace(" ", "%20")
created_URL += student_number
created_URL += temperature + input("体温を入力してください\n")
date = year + str(date.year) + month + str(date.month) + day + str(date.day) 
print(created_URL + date)
```
はい。入力年月日はdatetimeモジュールを使用して自動で取得しています。
実装が理解できない場合、標準入出力・文字列操作・年月日取得などのやり方を使っているプログラミング言語について調べてみてください。

今回は最低限の機能だけ実装していますが、例えば
・体温が10度や360度、🐈など、ありえない値になっている場合に通知する
・Selenium等を用いて送信も自動で行う
などの機能を追加するとさらに便利になります。また、LINEやDiscordのbotとする なども良いですね。
アドベントカレンダーのネタが足りない場合はこの辺りの実装についての記事も出したいと思います。

##最後に
これだけの実装と下調べで、やりたいことが実現できてしまうなんて、自分が天才だと錯覚してしまいますね。
そういえば、（倫理観有り） の説明をしていませんでしたね。これは、体温入力を乱数で行い、送信や実行も自動化すると倫理観が減ると思い、それを~~怠惰で~~よくないと思って実装をしていないからです。倫理観、最高！w

明日のカレンダーはLl_e_kiさんが書くようです。ぜひ明日の記事も！