この記事は、TUT Advent Calendarの12日目の記事です。
TUT休講・補講情報botは、豊橋技術科学大学(TUT)の休講情報や補講情報をツイートするbotです。 今日は、なぜこのbotが生まれたのか、どのように開発したのか、どのように運用されているのか、どういう反響があったのかについて書いていきます。
一応、大学には休講・補講情報を掲載しているウェブページがあり、休講botができるまではそのページを参照していました。 しかし、そのページがすごく見づらいのです。
補講情報が読みづらいとしびれを切らした俺は、補講情報botの製作を行うのだった…
— け―さん/5度目の気胸 (@k3_kaimu) 2014, 5月 29
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>
去年度までは補講・休講botがあったようですが、今年は動いておらず、「無いなら作るか」という感じで作り始めました。
大学に入った当初は、意識が高まってしまい、学友会という意識の塊の組織に入ってしまいました。 (ちなみに、水泳部には入ってません)
僕は、水泳とコンピュータと学友会かなあ
— け―さん/5度目の気胸 (@k3_kaimu) 2014, 4月 5
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>
学友会では広報部という部門に入りましたが、ある日ミーティングで出た話が「補講情報をTwitterで知らせて欲しい」という要望(願望)。 広報部の誰も実装しなさそうだったのと、この時すでに大部分が完成していたので、僕が勝手に進めることにしました。 ですが、休講botは学友会所有のものではありませんので(ここ重要)。 あくまで僕個人での制作物です。
休講botが本格的に稼動を始めたのは7月~8月くらいでした。 ツイートを見る限り、最初は休講情報だけだったようです。 熟してきたころには、もうそろそろ夏休みという時期で、ほとんど講義も終わってしまってbotはできたのにツイートする情報がなくて悲しかった記憶があります。
休講情報botうごいてるっぽい
— け―さん/5度目の気胸 (@k3_kaimu) 2014, 7月 12
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>
休講情報botに補講情報を付け加える作業
— け―さん/5度目の気胸 (@k3_kaimu) 2014, 7月 17
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>
最初のころは以下の様な感じでした。
.@k3_kaimu [電気・電子情報] 系 [B4] 集積回路工学 の補講が 2014年7月17日に入りました. http://t.co/YXGXwpSRQo #TUT休講
— け―さん/5度目の気胸 (@k3_kaimu) 2014, 7月 17
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>
本格運用してからは新アカウントを使うことに。
[1/5] .@k3_kaimu 本日{2014年7月28日} の [共通] 系 [M1, M2] 生産管理論 の講義は休講です. http://t.co/MQnnwgjMUo #TUT休講
— TUT休講bot (@k3__d) 2014, 7月 27
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>
今でも元気よく動いています。
[3/6] 本日(2014年12月8日) の [電気・電子情報] 系 [B3] 電気回路論(電気回路論-a) の講義は休講です. http://t.co/hHJooWET1Z #TUT休講
— TUT休講bot (@k3__d) 2014, 12月 7
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>
4件の未ツイート情報があります。今日も休講情報botは元気です(b´∀`)
— TUT休講bot (@k3__d) 2014, 12月 11
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>
時々、大学の休講・補講情報サイトが落ちているなどで情報を取得できない場合は失敗してしまいます。
休講・補講情報の情報更新に失敗しました(´・ω・`)
— TUT休講bot (@k3__d) 2014, 12月 7
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>
また、僕がソースコードのメンテナンスをした後にbotのテストを走らせると、以下のように一見異常な数のツイートをしようとしますが、これで正常です。
219件の未ツイート情報があります。今日も休講情報botは元気です┌(_Д_┌ )┐
— TUT休講bot (@k3__d) 2014, 12月 7
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>
話は変わって、すこし技術的な内容になります。 休講botでは、以下の様なキーワードの技術を使用しています。
- D言語
- Twitter REST API
休講botでは、次のような処理を行っています。
-
セーブデータを読み込む
休講botでは、休講・補講情報からTwitterのアクセストークンまで、様々な情報をハードディスク上に保存しています。 そのため、前回保存した情報をハードディスクからロードします。 保存したい情報のバイナリ化(シリアライズ)には、MessagePackのD言語実装であるmsgpack-dを使用しています。
-
大学の休講・補講サイトからHTMLをgetする
休講・補講情報が更新されていないかどうか確認するためにHTMLを取得します。 D言語では、
std.net.curl.get(url)
でGETした結果の文字列を得ることができます。 -
HTMLを解析して休講・補講情報をピックアップする
D言語には
std.regex
というモジュールがあり、簡単に正規表現を扱うことができます。 また、正規表現エンジンをコンパイル時に生成できるので、高速にHTMLを解析できます。 -
ツイートする文字列を生成する
D言語だと文字列操作もスクリプト言語のように簡単に扱うことができます。
-
ツイートする
graphiteという自作ライブラリに、Twitter APIを叩くためのモジュール
graphite.twitter
があるので、これを使ってツイートします。ちなみに、OAuth認証のコードはこちらの記事を参考にしました。
-
情報をセーブする
MessagePackで保存します。
現在、休講botは僕のWindowsノートPC(VAIO)で動かしています。 そのため、僕がノートPCの電源をつけている間しか動作しません。 なので「休講botを動かしてもいいよ!」みたいなイケメンさんを募集しています。 お願いします。
明日はまだ埋まってませんので、誰か書きましょう!