ターミナルで出席登録がしたい!

はじめに

この記事は、"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. ID + Passwordの送信
  2. Cookieと科目IDの受信
  3. 出席番号 + Cookie + 科目IDの送信
  4. 完了メッセージの受信

1, 2がlogin処理、3, 4が出席登録のようなので、単純にcurlを2回やれば良さそうです!

ログイン処理

まずは、Loginの処理を送ります。 開発者ツールによるとこのURLにRequestしていることがわかります。

f:id:AmefuriTell:20211217155846p:plain

そして、引数として、uid, pass, menunameを送信しています。

f:id:AmefuriTell:20211217155936p:plain

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を送信しています

f:id:AmefuriTell:20211217160203p:plain

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からawksedで取り出して、変数においておきます。

ここでわかるのが、出席登録システムは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"

f:id:AmefuriTell:20211217160257p:plain

無事受付されました!!

これの処理をbashに書いて、コマンド化して今回のプロジェクトは完了です!! ↓実際に使っている様子

f:id:AmefuriTell:20211217160308p:plain

おわりに

結構、楽しかったです。が、仕様変更に耐えられなさそうなので、ちゃんとChromeなどのブラウザからやるのが安心ですよ。

それと、良ければ星マークつけてくれると嬉しいです。 ではでは、お相手はあめふりてるでした!

2021年も1ヶ月が過ぎました。

もう1カ月過ぎた

さて、一月も今日入れてあと二日ですが皆様いかがお過ごしでしょうか。 今月はいろんなことがありました…

1月前半は、第4クオーターも最終ラウンドといった感じで、押し寄せてくる最終課題を必死に終わらせたりしました…。

終わらせた後は、やりたいこと爆発が起きました。

やりたいことまとめ

まず、自分のHPがつくりたくなりました。 試しに、GitHub Pagesで簡単なHTMLを書いてみました。HTML/CSS/JSの知識が乏しいので勉強しなきゃなぁと思っている次第です。

amefuritell.github.io

それから、HSP3の講習会に向けてHSP3の勉強をしていました。 DLLの仕様がわからず苦戦しています。

次に、ウェブアプリケーションを作りたくなりました。 手始めにHSP3DishでJSのみのアプリケーションとして、アナログ時計を作りました。

amefuritell.github.io 今作りたいアプリケーションとして、「やりたいことリスト共有アプリ」を作ろうかなと考えています。 やりたいことをポイっと投げてみて、同じくやりたい人をつなげてみるアプリです。

また、去年の夏にやってた「遊び大全PC化計画」も進めたいところです。

春休みの目標

さて、春休みに入った私ですが、春休み中の目標があります。

それは、「Webアプリケーションを一つ完成させること」です。 そこで、フロントエンド・バックエンドのどちらも一通り触ってみようと思います。

手始めに、昔はやった掲示板にようなソフトから始まって、ログイン機能を付けた「やりたいこと共有アプリ(名称仮)」を作り上げていきたいと思います。

では、また会いましょう。 あめふりてる*でした。

2020の振り返りと、2021の目標

はじめに

あめふりてるです。今年はいろいろありましたので、記事にしておこうかと思いました。

上半期

1月

オーストラリアへの留学を直前でやめた。親にめちゃめちゃいろいろ言われた。けれども、結果論から言うととても幸運だった。某流行り病の影響で留学組はわずか2ヶ月で返されてるので、不憫だなと思いつつ「あのとき行くって言わなくてよかった」と思った。そんな年始だった。

2月

春休みが始まった。このころ、自作キーボードにはまった。そして、一カ月に一回秋葉原に行く習慣がついた。

3月

このころは、「競プロあさ活部」が盛んだった(名前は勝手につけた)。私もプロテイン片手に頑張った!あ、このころは筋トレにはまっていました。毎日3km走った結果、急に運動したせいで捻挫して、そこからやらなくなってしまった…やっぱり下限って大事!

4月

コロナで学校が始まらなかったのでいろいろ勉強しよう!!となって始めたのが遺伝的アルゴリズムでオセロ学習プロジェクトでした。

そして、競プロもそろそろ緑!!ってなった時期でした。モチベーション結構高かった。そして、中高時代の同級生に垢ばれした。 それから、店員のバイトを新たに始めました。

5月

外せないのは、入緑したことですかね!!この時に、同じ大学の競プロerに連絡ができて、ICPCにでるお誘いを受けて、踊ってました。

このころから、大学が始まり、課題に追われる日々が来ました。つらかったです。 パソコンのガジェットを集め始めたのがこの時期でしたね。

6月

コドフォに手を出しました。が、生活習慣が大いに乱れましたね。 このころは、適当作問をTwitterに投げ始めましたね。結構解法を考えるのが楽しかったりしました。 課題が辛かったです…

7月

学校が落ち着いてきたので、遺伝的アルゴリズムの勉強がてらに作った「ムダにクリエイティブなHello,World」に思いのほか反響がありました。

qiita.com

このころ、麻雀にはまりました。今も毎日打ち続けています。AI作りたいね。

8月

遊び大全のゲームすべてをPCでできるようにしたい!と思い、始めたが、結局が断念。もうちょっと頑張りたいね。 また、HSPの勉強もかなり頑張りました。 Discord用に仮想カメラで画面をキャプチャするソフトを作ってICPCの時に活躍してもらいました!

9月

バ美肉をしたくて、したくてしょうがなくなった時期です。 それから、サークルに初参加しました!楽しいですね!

10月

遺伝的アルゴリズムでオセロAIをしました。が、勝率が65%で頭打ちになってしまい、断念。来年は、ちゃんと尽くしたいね。 そして、榊さんや店長さん、kichiさんとエンカ!競プロerとのエンカは初めてだったのでテンション上がりました! そして、外せないのがしぐれうい先生の個展「雨天決行」!!めっちゃ興奮してました!今も、デスクトップ画像です。

11月

こるぼーさん、きゃっとさん、ぽうえっとさんとエンカウントしました!!とっても楽しい一日で今年の思い出のベスト3に入っています!今度はラーメン食いに行きたいですね。 あ、そういえばこるぼーさん。メモリいつ受け渡ししますか?

そして、ICPCも出ました。結果は残念ながら予選突破ならずでしたが、来年はポリエステルさんが水色になってもっと大きな戦力なので予選突破したいですね。

12月

12月は、あんまり、思い出がないのですが、マイクを買い、4枚の表情差分でVTuberになれるソフトを開発しました。

来年の目標

さて、つらつらと書いてきましたが、来年の目標ですね。3つあります。

1つ目は、「進化計算アルゴリズムを頑張る」です。オセロAIを来年こそは完成させたいですね。 2つ目は、「ゲームを作る」です。今年は、技術開拓をメインにやりましたが、今年は作品として一つ何か作りたいと思っています。麻雀っぽいゲームを作りたいですね。 3つめは、「遊ぶ!」です。今年は、かなり遊びの年でしたが、来年は今年よりも遊び、つまり「自分の赴くままに!」をモットーにしていきたいと思いました。

おわりに

今年お世話になった人ありがとうございました。 来年もよろしくお願いいたします。