urachanの雑記録

いろいろ書きます

弊学科の掲示板botはどのようにして動いているか

はじめに

私が学部時代に所属していた名大工学部の電気系電子掲示板の更新情報通知bot@NUEE_Notify)を公開してから1年以上が経過しましたが,botのロジックがどうなっているかみたいな話をしたことが無かった気がするので,何となく書き残しておきます.適当ですが.

botが生まれた経緯

「毎日掲示板をチェックすること」を大学側から要求されているものの,毎日忘れずに手動でチェックするのは現実的に不可能なので,なんとかしたいなと思って作りました.

大まかな流れ

更新の流れですが,

  • 1時間に1回掲示板ページを巡回して,更新有無の検出
  • 更新があった場合TwitterにPOST

の2ステップです.

webスクレイピングした結果をゴニョゴニョして,その結果をTwitterAPIで投げるだけという極めてシンプルなもので,難しいことはほとんどしていません.

掲示板ページの巡回

1時間に1回の頻度で差分検出スクリプトが実行され,更新があるかを確認します.スクリプトは自宅のラズパイ上で動いています.

詳細な流れとしては,

  • CAS認証突破(掲示板へのアクセスに必要)
  • 掲示板のhtml取得
  • 更新検出

という感じです.

CAS認証には自分の名大IDとPasswordを使っています. 最近CASが2段階認証に対応しやがったなさった&短時間に連続でサーバにアクセスすると一定時間アクセス拒否されるようになったので, 前よりちょっと面倒になりました.

また私の個人IDを使って認証を行っているという特性上,私の名大IDが失効した時点でこのbotはサ終となります.(名大IDって卒業後はどういう扱いになるんでしょうか・・・)

htmlの取得はPythonのBeautifulSoupくんでやっています.Pythonって何でも出来ますよねぇ. 掲示内容の抽出はこのフェーズで行います.

最後に更新検出ですが, 各掲示内容には下の画像のように,最初に掲示内容が公開された日時を示す「登録日」と,最後に加筆修正された日時を示す「最終更新日時」という要素が登録されています. この「最終更新日時」が前回のラズパイによるページ巡回時刻より後だった場合,記事に更新があった or 新着の内容がUPされた という認識をしています.

TwitterへのPOST

これについてはTwitter APIを叩くだけで,特に何も言うことはありません.

APIってなんやねん」という疑問についてはネットの海に分かりやすい説明がたくさんあるのでここで詳しく説明はしませんが, 簡単に言うならば,「アプリケーション(Twitter, LINE etc.)内の情報を外部から取得したり,アプリケーション側に情報を送ったりできる仕組み」みたいなものです.

(あまり説明すると不備が生じて,つよいエンジニアに突っ込まれそうなのでやめておきます.)

おわりに

botのロジックの話とはいいましたが,ロジックというほどの内容じゃなくてすみません. 実はこのbotPythonの練習を兼ねて作ったので,今から見るとコードの書き方が変だったりします. リファクタしたいのですが時間が無い・・・.

トラブったときに世話になりがちな個人運営の有能技術系ブログを目指したいんですけど,技術がないのできびしい.