ターミナルで出席登録がしたい!
はじめに
この記事は、"Tokyo City University Advent Calendar 2021"の18日目の記事になります!
https://adventar.org/calendars/6738
自己紹介
12/18を担当します、あめふりです。(@Amefuri_Tell) 見かけたら話しかけてくださいね。 最近メインOSをUbuntuにしました。 大まかな操作がコマンドでできる便利さを知ってしまい、Windowsに戻れなくなりそうです。(まだ勉強中) あと原神がたのしいですね。
ターミナルで出席登録したい!!
Ubuntuのコマンド操作が便利だということに気が付き数週間、ある授業中ふと思いました。
ターミナルで出席登録したい!
だって思いませんか? スマホを出して、chrome開いて、ブックマークから出席システムページに飛んで… こんなことをしていたら、鶏頭の私は番号を忘れてしまいます!!! じゃあ、パソコンでやればいいという話なんですが、Chromeを開いてブックマークから…とかやってたらやはり忘れてしまいます…
じゃあ、コマンドだったらどうだろうという話なんですが、
Alt + F2 -> attend 番号 -> enter
めっちゃ楽やん!!
ということで作りはじめました。
開発者ツールで通信を覗いてみる
まず真っ先にやったことは、「一体どんな通信をしてるか」を調べました。 Chromeの開発者モードのNetwork欄を見ると、通信が覗けます。
すると、めっちゃ簡単な通信しかしていないことがわかりました。
1, 2がlogin処理、3, 4が出席登録のようなので、単純にcurlを2回やれば良さそうです!
ログイン処理
まずは、Loginの処理を送ります。 開発者ツールによるとこのURLにRequestしていることがわかります。
そして、引数として、uid, pass, menunameを送信しています。
uidにはg学籍番号 passにはパスワード menunameには出席が入っています。
しかし、view sorceでみると、出席が%E5%87%BA%E5%B8%ADになっています…文字コードやめろ。
材料が揃ったので、Loginしてみます。
$curl https://call.off.tcu.ac.jp/Default/Login -d "uid=学籍番号" -d "pass=パスワード" -d "menuname=%E5%87%BA%E5%B8%AD"
すると、きちんとログインできてることがわかります!白く隠しているところに、執筆中に受けてる授業の名前とID、担当教員が入っています。
[:id:AmefuriTell:20211217160103p:plain]
後々、cookieと科目IDは使うので、今返ってきたhtmlとcookieを保存しておきます。
cookieの保存は、 -c ファイル名
のオプションで取得できます。
出席番号の送信
開発者ツールによると、にRequestしていることがわかります https://call.off.tcu.ac.jp/Sk/ProcedureAcc そして引数として、SelKamoku, InpNo, submitButtonNameを送信しています
SelKamokuには、先程HTMLで返ってきていた科目ID
InpNoには、出席番号
submitButtonNameには、%E5%87%BA%E5%B8%AD%E7%99%BB%E9%8C%B2
が入っています。いつもの文字コード
そして、Payloadには書かれていませんが、cookieが送信されています。
cookieは、session, XSRF-TOKEN, laravel_sessionというのが必要っぽいです。cookieからawkとsedで取り出して、変数においておきます。
ここでわかるのが、出席登録システムはLaravelで作られてるっぽいですね。
さて、材料は揃いました。実際に登録してみます。
$curl https://call.off.tcu.ac.jp/Sk/ProcedureAcc --cookie "PHPSESSID=${PHPSESSID}" --cookie "XSRF-TOKEN=${XSRFTOKEN}" --cookie "laravel_session=${session}" -d "SelKamoku=${SelKamoku}" -d "InpNo=${AttNum}" -d "%E5%87%BA%E5%B8%AD%E7%99%BB%E9%8C%B2"
無事受付されました!!
これの処理をbashに書いて、コマンド化して今回のプロジェクトは完了です!! ↓実際に使っている様子
おわりに
結構、楽しかったです。が、仕様変更に耐えられなさそうなので、ちゃんとChromeなどのブラウザからやるのが安心ですよ。
それと、良ければ星マークつけてくれると嬉しいです。 ではでは、お相手はあめふりてるでした!