【Hubot】毎朝決まった時間に、使う電車の運行情報をSlackに投稿するBot

  • 65
    いいね
  • 0
    コメント

この記事は、Yahoo!運行情報から、使用する路線の運行情報を取得して、Slackに投稿するスクリプトを紹介します。
Hubotに電車の運行情報をしゃべらせるの記事を参考にしています。

作成したソースコードは、こちらです。

※Slack と Hubot の同期は出来ているところからスタートします。

事前準備

まずは、今回使用するモジュールをインストールします。

# スクレイピングを行う
sudo npm install cheerio-httpcli --save
# 定期タスクを動かす
sudo npm install cron --save

package.json に、インストールしたモジュール情報が登録されていれば準備完了です。

package.json
  "dependencies": {
    "cheerio-httpcli": "^0.6.9",
    "cron": "^1.0.5",
  }

ソースコード解説

Yahoo!運行情報から、使用する路線を選択します。
(関東地方以外の場合は、こちらから使用する路線を選択してください。)

今回の例では、東京メトロ有楽町線と、JR京浜東北線を使用します。

train-info.coffee
cheerio = require 'cheerio-httpcli'
cronJob = require('cron').CronJob

module.exports = (robot) ->
  # 月~金曜日の7時00分に、定期的にタスクが実行される。
  # cronJobの引数は、秒・分・時間・日・月・曜日の順番
  new cronJob('0 0 7 * * 1-5', () ->
    # 有楽町線(Yahoo!運行情報から選択したURLを設定する。)
    metro_yu = 'http://transit.yahoo.co.jp/traininfo/detail/137/0/'
    # 京浜東北線
    jr_kt = 'http://transit.yahoo.co.jp/traininfo/detail/22/0/'
    searchTrainCron(metro_yu)
    searchTrainCron(jr_kt)
  ).start()

続いて、運行情報を取得して、メッセージを返却するメソッドです。

train-info.coffee
  searchTrainCron = (url) ->
    cheerio.fetch url, (err, $, res) ->
      #路線名(Yahoo!運行情報から正式名称を取得)
      title = "#{$('h1').text()}"

      if $('.icnNormalLarge').length
        # 通常運転の場合
        robot.send {room: "#mybot"}, "#{title}は遅れてないよ。"
      else
        # 通常運転以外の場合
        info = $('.trouble p').text()
        robot.send {room: "#mybot"}, "#{title}は遅れているみたい。\n#{info}"

その他の機能

作成したソースコードでは、決まった時間の定期タスクだけでなく、以下の写真みたいに、登録したユーザーの使用する路線全ての運行情報を取得できるBotも用意しています。興味があれば、使ってみてください。

スクリーンショット 2016-10-17 3.30.45.png