slack hubotを使って遅延情報を取得する

[slack hubotを使ってみる](https://qiita.com/hf7777hi/items/8ce1522b4e1618f73f10)
の続編な感じです。

[毎朝決まった時間に、使う電車の運行情報をSlackに投稿するBot](https://qiita.com/kaorupochi/items/8aea41cf1a7d94a429df)
これを参考にさせていただいて、通勤に使う電車の遅延情報を取得したいと思います！

完全に引用させてもらいます！
>#事前準備
>まずは、今回使用するモジュールをインストールします。
>
>```
># スクレイピングを行う
>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",
>  }
>```

こんな感じ。

```
$ cat package.json 
{
  "name": "slackhubot",
  "version": "0.0.0",
  "private": true,
  "author": "<author> <mailaddress>",
  "description": "slackhubot",
  "dependencies": {
    "cheerio-httpcli": "^0.7.2",
    "cron": "^1.3.0",
    "hubot": "^2.19.0",
    "hubot-diagnostics": "0.0.2",
    "hubot-google-images": "^0.2.7",
    "hubot-google-translate": "^0.2.1",
    "hubot-help": "^0.2.2",
    "hubot-heroku-keepalive": "^1.0.3",
    "hubot-maps": "0.0.3",
    "hubot-pugme": "^0.1.1",
    "hubot-redis-brain": "0.0.4",
    "hubot-rules": "^0.1.2",
    "hubot-scripts": "^2.17.2",
    "hubot-shipit": "^0.2.1",
    "hubot-slack": "^4.4.0"
  },
  "engines": {
    "node": "0.10.x"
  }
}
```


さらにさらにほぼこのまま使用させてもらいました。
https://github.com/hotatekaoru/myHubotScripts/blob/master/train-info.coffee
ちょっと改造して、、京浜東北線と京急本線を取得するのと、定期実行のあたりを変えました。

```javascript
cheerio = require 'cheerio-httpcli'
cronJob = require('cron').CronJob

module.exports = (robot) ->
  
  searchAllTrain = (msg) ->
    # send HTTP request
    baseUrl = 'https://transit.yahoo.co.jp/traininfo/gc/13/'
    cheerio.fetch baseUrl, (err, $, res) ->
      if $('.elmTblLstLine.trouble').find('a').length == 0
        msg.send "事故や遅延情報はありません"
        return
      $('.elmTblLstLine.trouble a').each ->
        url = $(this).attr('href')
        cheerio.fetch url, (err, $, res) ->
          title = ":warning: #{$('h1').text()} #{$('.subText').text()}"
          result = ""
          $('.trouble').each ->
            trouble = $(this).text().trim()
            result += "- " + trouble + "\r\n"
          msg.send "#{title}\r\n#{result}"

  robot.respond /train (.+)/i, (msg) ->
    target = msg.match[1]
    # 京浜東北線
    jr_kt = 'http://transit.yahoo.co.jp/traininfo/detail/22/0/'
    # 京急本線
    kq = 'https://transit.yahoo.co.jp/traininfo/detail/120/0/'
    if target == "kq"
      searchTrain(kq, msg)
    else if target == "jr_kt"
      searchTrain(jr_kt, msg)
    else if target == "all"
      searchAllTrain(msg)
    else
      msg.send "#{target}は検索できなし( ˘ω˘ ) usage: @world_conquistador [kq | jr_kt | all]"

  searchTrain = (url, msg) ->
    cheerio.fetch url, (err, $, res) ->
      title = "#{$('h1').text()}"
      if $('.icnNormalLarge').length
        msg.send ":ok_woman: #{title}は遅延してないので安心しろ。"
      else
        info = $('.trouble p').text()
        msg.send ":warning: #{title}は遅延しとる。フザケンナ。\n#{info}"
        
  # cronJobの引数は、秒・分・時間・日・月・曜日の順番
  new cronJob('0 20,30,40,50 8 * * 1-5', () ->
    # 京急本線(Yahoo!運行情報から選択したURLを設定する。)
    kq = 'https://transit.yahoo.co.jp/traininfo/detail/120/0/'
    # 京浜東北線
    jr_kt = 'http://transit.yahoo.co.jp/traininfo/detail/22/0/'
    searchTrainCron(kq)
    searchTrainCron(jr_kt)
  ).start()
  
  new cronJob('0 30,59 18 * * 1-5', () ->
    # 京急本線(Yahoo!運行情報から選択したURLを設定する。)
    kq = 'https://transit.yahoo.co.jp/traininfo/detail/120/0/'
    # 京浜東北線
    jr_kt = 'http://transit.yahoo.co.jp/traininfo/detail/22/0/'
    searchTrainCron(kq)
    searchTrainCron(jr_kt)
  ).start()
  
  searchTrainCron = (url) ->
    cheerio.fetch url, (err, $, res) ->
      #路線名(Yahoo!運行情報から正式名称を取得)
      title = "#{$('h1').text()}"
      if $('.icnNormalLarge').length
        # 通常運転の場合
        #robot.send {room: "#random"}, "#{title}は遅延してないので安心しろ。"
      else
        # 通常運転以外の場合
        info = $('.trouble p').text()
        robot.send {room: "#train_info"}, ":warning: #{title}は遅延しとる。フザケンナ。\n#{info}"

```

でこれを動かすと
![スクリーンショット 2018-02-24 23.29.59.png](https://qiita-image-store.s3.amazonaws.com/0/86605/260f7bfb-abf3-9347-be0b-45d897c42ba4.png)

きました。

ありがとうございました。