電気科の研究室の重み表に従った成績計算するよ!

電気情報物理工学科では、研究室によって違った重みに従って計算した成績の重み付きの平均に従って、研究室に応募した学生を並べ、上から順に定員分を採用するらしいです。その重み表が公開されているので、計算を自動化してみました。学生は研究室の特徴を見て選ぶのに、研究室は学生の成績しか見ることができないのね。かわいそうな奴らだ。

重み表は電気・情報系のローカルネットからダウンロードできるHTMLを使用します。成績は、学務情報システムからjavascriptでJSONとして抽出して利用します。点数の計算方法は詳しくはわからないので、結構想像で補完してます。重み表は公開するのに、計算方法は明確に示さないとは、やはり無能ですね。
スクリプトのダウンロードはここから→weight_score.pl

さて、使い方を説明しましょうか。
1.重み表をDLします。HTMLをそのまま保存すればOKです。(wget -O table.html http://localweb.ecei.略)
2.重み表HTMLファイルを引数として与え、スクリプトを実行します。標準出力は適当なファイルにリダイレクトしておくと良いです。(perl weight_score.pl table.html > table_plus.html)
3.javascript:から始まる文字列が標準エラー出力に出るので、学務情報システムの成績照会ページでこれを実行します。アドレスバーにコピペするだけで実行できますが、最近のブラウザはjavascript:から始まる文字列をコピペしようとすると、これを勝手に消す不届き者が多いので、jは自分で打ち込み、avascript:…をコピペするのをおすすめします。
4.新しいタブなり窓なりが開いてJSONが表示されるので、これをスクリプトの標準入力に与えます。コピペすればOK。
5.標準出力から色々書き足されたHTMLが出てきます。
6.ね、簡単でしょ。
なお、perlのライブラリ、HTML-Tree及びJSONが必要です。ない人はCPANあたりからDLしようね。ActivePerlとかなら最初から入ってると思います。

最後に、教務課?教務係?の悪口を書こうかと思います。
まず、重み表のHTML、これ、すごくひどい。DOCTYPE宣言が2つ(4.0と4.01の)ついてるし、改行コードがLFとCRLF混合とかいう意味不明仕様だし、そもそも改行の位置が謎だったりします。人間が書いたものでないのは確か。とにかく汚くてひどいので、反面教師としてひと目見ておくといいと思います。こんなHTML書いてるから、ブラウザによって動かなかったりなんだりすることが多いんだよ。この無能どもめ。
つぎに学務情報システムについて、これも結構ひどい。javascriptで成績を抜き取るのを書いてて気づいたんだけど、JSON.stringifyが意味不明な挙動をします。配列オブジェクトに対して。面白いのでこちらも、デバッグ用のコンソールを使うなどして遊ぶといいと思います。JSON.stringify([])とか、JSON.stringify({})とか、JSON.stringify([[]])とか、JSON.stringify({a:[]})とかして、違いを見ると面白いですよ。という。jQueryのminじゃないやつ使ったりしてるし。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です