6年目

はじめに

この記事はKogakuin Univ Advent Calendar 2020 - Adventarの1日目です。

adventar.org

初めての方ははじめまして。yudegakiと申します。

今年もAdvent Calendarの時期がやってきました。

2020年は色々なことが起こりましたが無事開催することができ、嬉しく思います。

遅くなりましたが、昨年突然錬成したものにも関わらずアドベントカレンダーに協力してくださった工学院大学関係者の皆様、本当にありがとうございました。今年もよろしくお願いします!!!!!!

またKogakuin Univ Advent Calendar 2020 - Adventarは皆様の投稿をお待ちしております。まだまだ余裕があるのでこの記事を見た方は空いてる日をポチっと押していってください!

 

さて、作業用に動画を流していたらついつい見入ってしまい導入部分で1時間費やしましたが、現在時刻は11/30 3:17。昨年よりは書き出しが早い、成長していますね。アドベントカレンダーもレポートも期限内に間に合えばいいんです。間に合えば。

ということで早速本題に入っていきましょう。

教材ダウンローダ

せっかちな人のために置いておきます。

github.com

教材ダウンローダーを書いたきっかけ

 冒頭にも書きましたが、今年は色々あり新しい生活様式に移行せざるを得なくなってしまいました。その影響で大学も対面を避けたオンライン講義に移行しました。

オンライン講義に移行したことにより「実質通学時間0分」「わからなかった箇所を簡単に振り返れる」など様々なメリットもありましたが、当然デメリットもあります。そのうちの一つ「事前に教材をCoursePower(教材配布所)からダウンロードしなければならない」。これがとても面倒くさかった。講義ごとにフォルダを作り、ダウンロードし、移動させる。この固定化された作業をどうにかできないかと考えたとき、SeleniumHQ Browser Automationを使えばできるのではないかと思い実装を始めました。

日々の面倒くさい作業を自動化するのはなんか""情報学部生""って感じがしますね。

Seleniumについて

ここを見てください。

www.selenium.dev

基本的なブラウザ操作なら何でも(嘘)できます。

ダウンローダーの動作の流れ

以下ガバガバフローチャートです

 

大まかな流れは分かって頂けたでしょうか。

Gsuiteアカウントにログインしている理由は、GoogleDriveで配布される教材にアクセスできるようにするためです。

 

突然ですが皆さんはCoursePowerから毎回ログアウトしていますか?

え、私?ご想像にお任せします。

このプログラムでは皆さんが普段していないであろうCoursePowerからのログアウトを行っています。動作した際にサーバーに負荷をかけないよう細心の注意を払いプログラミングしました。(本当か?)

皆さんもこれを機にCoursePowerから毎回きちんとログアウトするよう心掛けましょう!!!

実装について

Selenium

Seleniumで普段行っている動作を実装すると強引な実装になることが多い(はず)です。

例えばGoogle Driveからファイルをダウンロードするとき

f:id:yudegaki:20201130182453p:plain

 このようにダウンロードボタンを押すために、そのボタンが一意になるようなタグを探す必要があります。この時にChromeでF12を押すと幸せになれます。

CoursePowerの講義検知もこのように力技で実装しています。

 

そのため、私が遭遇していないサイトからダウンロードする講義がある場合や、私が遭遇していないCoursePowerでの講義の表示形式がある場合はそもそも対応する実装をしていないためエラーが発生します。もし使っていてエラーが起こったら報告するかPull Requestを飛ばしていただければ修正しておきます。

 

ダウンロード編

ここが一番悩みました。Chromeからダウンロードしたはいいものの、いつダウンロードが終わるのかわかりませんでした。ダウンロードした際にできたファイルをそのまま移動させるとダウンロードエラーが起こるし、正直詰んだか?と思っていましたが希望の光はありました。

Chromeからファイルをダウンロードすると、実はダウンロード先のフォルダでは以下のように拡張子が「.crdownload」の一時ファイルが生成されています。

f:id:yudegaki:20201130191052p:plain

 ダウンロードが終わると

f:id:yudegaki:20201130191511p:plain

このように一時ファイルは消え、ダウンロードしたLEAGUE of LEGENDSのインストーラが表示されています。

この仕様を使い、一定時間ごとにダウンロードフォルダの最新ファイルを確認して、拡張子が「.crdownlad」の場合は待機、拡張子がそれ以外になった場合に対象フォルダに移動するという実装をすることで問題を解決しました。

 

Seleniumで行ったダウンロードが終わったことを知る方法をネットで探しても日本語の記事は僕は見つけられなかったので、もし同じようなことをしたい方はこの方法で実装してみてください(あとでこれだけをまとめた記事でも書く予定です)

 

使い方

READMEに書いてあるのでそちらを見ていただけると幸いです。

github.com

 

使ってみた動画


DocumentsDownloader 動作確認

動画を見るとわかりますが、プログラムファイルをダウンロードする際には毎回許可を押す必要があります。このほかにも100MBを超えるファイルをダウンロードする際にもマウス操作が必要となります。安全のために自動化を外しましたのでご了承ください。

おわりに

ということで教材ダウンローダーを書いた話でした。

何かわからない点、おかしい点がありましたらコメントにお願いします!

 

今年でKogakuin Univアドベントカレンダーは6年目を迎えました!既に多くの方に登録していただいており感動しています。登録していただいた方々、感謝します*1

他力本願にはなってしまいますが今後もアドベントカレンダーが続いていってほしいなぁ~と思っています。主催(?)するのは来年で最後かな。

 2020年は色々ありもう3学年が終わりそうになっていますが、講義がオンラインになったことにより1年間ニートしていた気分です。キャンパスが新宿になったので周辺を探索したかった... 来年度はある程度通学できるようになっていればいいなぁと。逆にならなかったら新宿にほぼ通わずに大学生活を終えることになりそうなので、収束を祈るばかりです。まぁ未来のことばかり考えてもあれだと思うので今を大事に生きてこうと思います。就活こわい。

 

今年はもう1記事くらい投稿すると思うのでそちらも温かい目で見守っていただけると嬉しいです。

*1:ストリーマーのstylishnoob氏が配信でよく使う言葉