苫小牧高専のニュースをFAXで確実に受取る
※この記事は苫小牧高専アドベントカレンダー2017 1日目の記事です。
はじめに
学生は迷走を続ける苫小牧高専(以下、本校とする)の動向を監視し、これ以上間違った方向に進むのをやめさせるべきだという考えから、本校Webサイトで公開されているニュースをTwitterやメールで配信する「苫小牧高専ニュース」というシステムを開発・運用してきた。
このシステムによって、本校が間違った方向に進んでいくのを止められたかどうかはわからないが、4年生が工場見学旅行に行ってきただとか、情報工学科の学生がセキュリティミニキャンプに参加しただとかといった学生たちの様子や、奨学金の書類の締切や保護者懇談会の実施報告など、もっとみんなが知るべき学校のニュースをTwitterやメールを通じて配信することが出来ていると思う。
また昨年12月には、いち早く学校のニュースを受取り無慈悲な鉄槌を下し本校の間違いを正したいという学生諸君のために、電話によるニュースの配信にも対応した。(電話代がかさむので現在は無効にしている。)
しかし、昼間は授業に励み、放課後は部活で汗を流しそして夜はレポートに励む学生諸君にとって、かかってきた電話を取るというのは難しい行為であったと思う。また、電話だと聞き間違いによるトラブルの可能性も考えられる。
そこで、確実にニュースを受け取りたいというニーズに答えるために用意したのが、「FAXによるニュース配信」だ。
FAXとは
そもそも若い学生諸君は、FAXなど知らないかもしれない。
FAXとは、昭和が終わって30年くらい経つのにもかかわらず、心の中の昭和がまだ終わっていない人たちのためのシステムである。
通常、文書を他人に送りたいとなった場合、メールやLINEなどのアプリケーションを利用するであろう。しかし、インターネットを知らない、もしくはなにか恐ろしいものだと勘違いしている旧人類たちは、未だに電話回線を利用して文書をやり取りしているのである。
TwilioプログラマブルFAXを利用したFAXの送信
2017年4月、電話やSMSの送受信ができるWeb APIを開発・提供しているTwilioが、新たにFAXを送受信できるAPI「TwilioプログラマブルFAX」を発表した。1997年でも2007年でもなく、2017年のことだ。
これを利用すれば、Web APIを叩くだけでFAXを送信することができる。
とりあえずFAXを送ってみる
Twilio公式でクイックスタートガイドが用意されていたので、そこに従って会員登録や電話番号の取得を済ませる。
このクイックスタートガイドは、Rubyのnet/httpを利用してAPIを叩いているのだが、Twilioが公式でtwilio-rubyというGem(Rubyのライブラリ)を提供しているので、今回はそれを使うことにする。
前述の通りプログラマブルFAX APIは新しいAPIでドキュメントの整備が進んでいないらしく、READMEやexamplesにfaxを送信するコードは見当たらなかったので、テストコードから使い方を把握することにした。
(テストコードは spec/integration/fax/v1/fax_spec.rb にある。
プログラマブルFAX APIを利用してFAXを送信する基本的なRubyコードは以下のとおりだ。このプログラムを自分のコンピュータ上で実行する場合は、ENV[‘ENV_NAME’]の部分に各自が取得したアカウント情報を設定してほしい。
FAXで送信したいドキュメントは、インターネット上のどこかにPDFファイルとして置かなければならないらしい。とりあえず、適当なPDFファイルを個人的に所有しているサーバに配置しておいた。
上記のコードを実行してみると、以下のようにFAXを送信することが出来た。
ニュースのPDFを動的に生成する
FAXの送信が確認できたところで、TwilioにダウンロードさせるPDFファイルを生成する作業に取り掛かろう。
今回は、PDFKitとwkhtmltopdfを利用して、ニュースの情報を取得しHTML文字列として生成したあと、PDFファイルに変換し、サーバから配信するという方法を取った。この機構は、既に運用している苫小牧高専News Web版に組み込むこととした。
以下は、Sinatra製Webアプリであるmktakuya/tmnct-news-webのFAX関連のコードのみを取り出したものである。
さて、本校WebサイトのニュースのURLは、以下のような構造になっている。
http://www.tomakomai-ct.ac.jp/${category}/${post_id}.html
そこで、PDF生成機能に以下のURLでアクセスすることで、対応するニュースのPDFを生成することにした。
https://tmnct-news.mktakuya.net/fax?category=${category}&post_id=${post_id}
例として、categoryがnewsで、post_idが10101な「COC+連携事業「就業チャレンジ支援事業~企業見学バスツアー」に参加しました!」というニュースのPDFは、以下のURLにアクセスすることで取得できる。
https://tmnct-news.mktakuya.net/fax?category=news&post_id=10101
苫小牧高専のニュースをFAXで送信する
ここまでで、以下の2つの機能が完成した。
- TwilioプログラマブルFAX APIを利用したFAXの送信
- PDFKitを利用したニュースPDFの生成
では、これらを組み合わせて実際に苫小牧高専のニュースをFAXで送信してみることにする。
苫小牧高専News(mktakuya/tmnct-news)は、基本的にはTwitterとメールのみの通知に対応しているが、あとで通知方法を追加したくなった時のために通知部分のみをプラグインとして追加できるような設計となっている。
tmnct-newsのlib/notifiers以下にfax_notifier.rbを追加し、configファイルにfaxに関する設定を書き加えるだけでこの作業は完了する。
実際にニュースをFAXで受け取った様子がこちらだ。
おわりに
これで、苫小牧高専の最新ニュースをFAX で確実に受け取ることができるようになった。一体何が便利になるのかはよくわからない。
基本的なプログラミングの方法を学べば、あとは既存のライブラリやサービスを組み合わせていろいろなシステムを作ることができる。個人の趣味レベルのくだらないものでも、適当にいじってみると案外楽しい。
以上、苫小牧高専アドベントカレンダー2017の1日目「苫小牧高専のニュースをFAXで確実に受取る」でした。2日目は、さくーん先輩(@nemui09)の「たぶん人狼げーむについて」です。よろしくお願いします!!!