はじめに
これは、Lumos Advent CalendarのDay19の記事です。
内容
プログラミングを知ってから一年経っていない者が大学の課題通知BOTサービスを作ろうとして諦めるまでの流れをまとめました。
手法
方法としては、
- 大学のLMSという教材提供サイトにアクセスし、
- 課題とその期限が載っている文字列を取得し、
- discordで通知する
という方法を使いました。
プログラムはPythonで書き、SeleniumというWebスクレイピングのライブラリを使いました。
※Webスクレイピングとは、Webサイトのhtmlテキストから、指定した部分の文字列を取得したりする方法のこと。
改良
上記の手法は上手くいったので、サービス化に向けて以下の問題点を改良します。
- discordは普通の人にはハードルが高いので、LINEでの通知に変更する
- パスワードの扱いが
os.getenv
で環境変数から取得していたので、データベースを用いる - パスワードのハッシュ化など安全に配慮する
パスワードハッシュ化の問題点
最初作ったものは、ログインIDとパスワードを入力させて大学サイトにログインしていたのですが、ユーザーから預かったハッシュ値を用いても大学サイトにログインできません。
以下に該当のプログラムを載せておきます。
username_input = driver.find_element(By.XPATH, '// *[@id="loginForm"]/div[1]/div[1]/div[1]/div[2]/input')
password_input = driver.find_element(By.XPATH, '// *[@id="loginForm"]/div[1]/div[1]/div[2]/div[2]/input')
username_input.send_keys(username) #username変数にgetenvで得たユーザーIDを格納していた
password_input.send_keys(password) #password変数にgetenvで得たパスワードを格納していた
next_btn = driver.find_element(By.XPATH, '//*[@id="loginForm"]/div[2]/button')
next_btn.click()
結論
パスワードの文字列そのものがないとログインできないので、ユーザーが大学サイトにそのパスワードでログインしたときにハッシュ値を得てトリガーにする、パスワードの保存の了承を得る、など別の方法を取るかリスクを取るかする必要がありそうです。