京大の学習支援システムをハックする

この記事は Kyoto University Advent Calendar 2019 の23日目の記事です。

皆さんこんにちは @kmconner です。 今回は、京大アドベントカレンダーということで、京都大学にまつわる記事です!

この記事では1年ほど前から GitHub で公開している、 Panda を便利にするソフトウェアを紹介します。

Panda とは?

Panda とは、京都大学の学習支援システムです。

Web サービスの形で提供されているサービスで、スマホのブラウザでの表示にも対応しています。 具体的な機能としては、講義資料の配布やレポートのオンラインでの提出といったことができます。

このシステムは京都大学の完全オリジナルではなく、 Sakai と呼ばれるオープンソースソフトウェアをもとに作成されています。 ちなみに、気になる人は GitHub にてソースコードが公開されていますので見てみてください。

Keitai Project

Sakai の内部では Keitai Project と呼ばれるプロジェクトが存在します。

そのプロジェクトの成果として、 Sakai には REST API という、ソフトウェアの開発者がそのサービスと通信して情報取得などを行える仕組みが実装されています! REST API の仕様は ここ にて公開されています。 これらの REST API は Panda でも同じように使用することができます。

Panda の API を使ってみる

先述の通り、 Pand では API によって受講している講義に関する情報を取得できます。

例えば、この記事を読んでいる京大生は、 Panda にログインした状態で https://panda.ecs.kyoto-u.ac.jp/direct/site.json にアクセスしてみてください。 今までに履修してきた科目の Panda のサイトに関する情報が JSON という形式で表示されるはずです。 JSON に馴染みがない場合でも、今までに履修してきた科目の科目名をテキストの中から見つけることができると思います。

このように、ログインした状態では URL を開くだけで情報が取得できますが、そうでない場合には情報が正しく取得できません。 そのため、一般的なソフトウェアで情報を取得するには、ログイン時と同じような通信をするような適切にプログラムを書く必要があります。

作成したプログラム

自分がこのサービスを使っていて特に不便だと感じたことのひとつに、講義資料をダウンロードするのが面倒という問題がありました。 複数のファイルをダウンロードする際にはそれらのすべてを1つずつダウンロードする必要があり、とても面倒です。 そこで、先に紹介した API を使用することで、受講している講義のすべての資料を一括でダウンロードできるようにしました。

作成したプログラムは GitHub にて公開しています。 ちなみに、 Windows に関してはビルドしたバイナリを配布しているので必要な人はそれを使用してください。 Windows でしか動作確認していませんが、他の OS でもおそらく動作すると思います。

まとめ

この記事では、 Panda において使用できる API を紹介しました。 他にもたくさんの応用方法があると思いますので、気になった人は是非作ってみてください!