Skip to content

mitsuiJao/webclass-notify

Repository files navigation

overview

WebClassから取得した課題を任意のTeamsチャネルで通知します。 主に高専の人向け

  1. WebClassスクレイピングで課題を取得 & Microsoftアカウントログイン
  2. 整形してTeams Webhookへ送信
  3. teamsに通知が行く

簡単にこんな流れです。

env

  • Ubuntu 22.04.5 LTS
  • Node v22.15.0
    • pupperteer 24.34.0
libasound2=1.2.6.1-1ubuntu1.1
libasound2-data=1.2.6.1-1ubuntu1.1
libatk-bridge2.0-0=2.38.0-3
libatk1.0-0=2.36.0-3build1
libatk1.0-data=2.36.0-3build1
libcups2=2.4.1op1-1ubuntu4.20
libgbm1=23.2.1-1ubuntu3.1~22.04.3
libgtk-3-0=3.24.33-1ubuntu2.2
libgtk-3-bin=3.24.33-1ubuntu2.2
libgtk-3-common=3.24.33-1ubuntu2.2
libnss-systemd=249.11-0ubuntu3.21
libnss3=2:3.98-0ubuntu0.22.04.3
libpango-1.0-0=1.50.6+ds-2ubuntu1
libpangocairo-1.0-0=1.50.6+ds-2ubuntu1
libpangoft2-1.0-0=1.50.6+ds-2ubuntu1
libxcomposite1=1:0.4.5-1build2
libxdamage1=1:1.1.5-2build2
libxfixes3=1:6.0.0-1
libxkbcommon0=1.4.0-1
libxrandr2=2:1.5.2-1build1
libxss1=1:1.2.3-1build2

npmのライブラリ詳しくは package.json を参照してね

setup

  1. Webhook URLの取得
  2. 環境構築
  3. OTP認証
  4. 確認

学校の権限によっては1のWebhookが作成できない可能性はあります

1.Webhook URLの取得

TeamsのチャネルにはWebhookを提供するワークフローがあります。それを追加しましょう。

チャネルの点々をクリック > ワークフロー

alt text

チームとチャネルを設定

alt text

保存をクリック

alt text

しばらくするとワークフローの設定に遷移します。Webhook リンクをコピー をクリックし、控えておきます。

2.環境構築

パッケージをインストールします。aptを使ってます。

sudo apt-get install -y \
    libatk1.0-0 libatk-bridge2.0-0 libcups2 libxss1 \
    libgtk-3-0 libnss3 libasound2 libgbm1 \
    libxkbcommon0 libxcomposite1 libxdamage1 \
    libxfixes3 libxrandr2 libpango-1.0-0

インストールができたら、このリポジトリをクローンします

node環境を整えます

$ npm install

.envの作成

cat << EOF > .env
USER_ID='{your_ID}'
PASSWORD='{your_password}'
TEAMS_WEBHOOK_URL='{teams_webhook_url}'
MFA_SECRET='{MFA_SECRET}'
EOF

.envに以下を設定します

USER_ID='{your_ID}'
PASSWORD='{your_password}'
TEAMS_WEBHOOK_URL='{teams_webhook_url}'
MFA_SECRET='{MFA_SECRET}'
.env 用途
USER_ID Microsoftアカウントのメールアドレス
PASSWORD Microsoftアカウントのパスワード
TEAMS_WEBHOOK_URL Teamsで発行したWebhook URL
MFA_SECRET 後述するシークレット

3. OTP認証

Microsoft のOTP認証を通します

このリンクにアクセスします:

https://mysignins.microsoft.com/security-info

サインイン方法の追加 > Microsoft Authenticator > 別の認証アプリを設定する > 次へ

そうするとQRコードが表示されます。

alt text

Google Authenticator などの認証アプリを使用してこのQRコードを読み取ると同時に、下にあるCan't scan the QR code? をクリックし、秘密鍵をコピー、 .envのMFA_SECRETに貼り付けます。

次へボタンを押すとOTPの入力を促されるので認証アプリに表示されている認証コードを入力、承認されたら認証アプリの認証情報は消して構いません。

ここで注意するのが、Microsoft Authenticator はこのプログラム内での認証とは違います。必ず別の認証アプリを設定するをクリックしてください!

イメージとしては初回だけアプリで認証、次回以降は src/otp.js で代理認証、みたいな感じです。グレーっちゃグレーです

4. 確認

$ node --env-file=.env index.js

cookieが切れる or cookies.jsonが存在しない(初回実行) の場合のみOTP認証されます。

変なことしない限りおそらくOTP認証は通るはずなので、一応ほったらかしでも認証は切れないようになってます。

補足

Teams Webhook経由で通知するため、メール転送の設定は不要です。

追記

  • 結局ローカルサーバでcrontabする方法で落ち着きました。半月ほど動かしましたが、正常に機能しています。

    • どうやらHDDが故障し、IOエラーが出るようになりました。そのためgithub actionsでのcronで回す方法を検討しました。
  • github actionsで動かせるように.github/workflows/cron.ymlに置いときました。使うときはdisableを外してください

  • 2026/5/18 github actionsはどうやらcronがとても不安定なようで、10分間隔で設定したものが最低1時間間隔、夜間になると4時間くらい平気で動かないことがあります。(夜間に課題が配信されることはないけど!)

    • oracle cloudの always free プランに移行しました。当分無料である程度のコンピューティングが使える様です。そのため、ライブラリ関係も軽いものに変更しました。
  • 2026/05/xx Webhookでの通知方法に変更しました。 src/sender.jsなどがありますが、レガシーです。

contact

22126@yonago.kosen-ac.jp

About

webclassの課題をteamsで通知

Topics

Resources

License

Stars

0 stars

Watchers

0 watching

Forks

Contributors