pythonを使って slackbotで株価をチェックする

slackで株価を確認。めっちゃ便利です。（[こちら](http://qiita.com/sukesuke/items/1ac92251def87357fdf6)を大変参考にさせていただきました）

<img width="220" alt="スクリーンショット 2017-08-16 15.19.35.png" src="https://qiita-image-store.s3.amazonaws.com/0/158680/d6b4c2a6-41cb-384c-5436-87f2e8404b52.png">
## 1. slackbotをつくる

https://my.slack.com/services/new/bot

## 2. pythonライブラリのインストール

```
$ pip install slackbot
$ pip install jsm
```

## 3. slackbot用のディレクトリを作成

```
slackbot         # プログラムをまとめるディレクトリ。名前はなんでも良い
├─ run.py        # このプログラムを実行することで、ボットを起動する
├─ slackbot_settings.py   # botに関する設定を書くファイル
└─ plugins                # botの機能はこのディレクトリに追加する
   ├─ __init__.py         # モジュールを示すためのファイル。空で良い
   └─ my_mention.py       # 機能を各ファイル。任意の名前で良い
```

```
$ touch run.py slackbot_settings.py
$ mkdir plugins
$ cd plugins
$ touch __init__.py my_mention.py
```

## 4. スクリプトを作成

```python:run.py
# coding: utf-8

from slackbot.bot import Bot

def main():
    bot = Bot()
    bot.run()

if __name__ == "__main__":
    print('start slackbot')
    main()
```

```python:slackbot_settings.py
# coding: utf-8

# botアカウントのトークンを指定
API_TOKEN = "xxxx-xxxxxxxxxxx-xxxxxxxxxxxxxxxxxxxxxxxx"

# このbot宛のメッセージで、どの応答にも当てはまらない場合の応答文字列
DEFAULT_REPLY = "あっ、あっ、、。"

# プラグインスクリプトを置いてあるサブディレクトリ名のリスト
PLUGINS = ['plugins']
```

```python:my_mention.py
# coding: utf-8

from slackbot.bot import respond_to     # @botname: で反応するデコーダ
from slackbot.bot import listen_to      # チャネル内発言で反応するデコーダ
from slackbot.bot import default_reply  # 該当する応答がない場合に反応するデコーダ

# @respond_to('string')     bot宛のメッセージ
#                           stringは正規表現が可能 「r'string'」
# @listen_to('string')      チャンネル内のbot宛以外の投稿
#                           @botname: では反応しないことに注意
#                           他の人へのメンションでは反応する
#                           正規表現可能
# @default_reply()          DEFAULT_REPLY と同じ働き
#                           正規表現を指定すると、他のデコーダにヒットせず、
#                           正規表現にマッチするときに反応
#                           ・・・なのだが、正規表現を指定するとエラーになる？

# message.reply('string')   @発言者名: string でメッセージを送信
# message.send('string')    string を送信
# message.react('icon_emoji')  発言者のメッセージにリアクション(スタンプ)する
#                               文字列中に':'はいらない
@respond_to('おつかれ')
def mention_func(message):
    message.reply('おつだよ') # メンション
    message.react('+1')

@listen_to('python')
def listen_func(message):
    message.send('pythonしゅき')      # ただの投稿

@listen_to('mac')
def listen_func(message):
    message.send('macはいいぞ〜')      # ただの投稿

@listen_to('win')
def listen_func(message):
    message.send('windowsきらい')      # ただの投稿

@respond_to('古河')
def listen_func(message):
    import jsm
    q = jsm.Quotes()
    price = q.get_price(5801).close # furukawa
    message.send("株価は "+str(price)+"円だよ")

@respond_to('株価')
def listen_func(message):
    import jsm
    q = jsm.Quotes()
    price = q.get_price(5801).close
    message.send("古河電工 {0} ({1})".format(price, price-2990))
    price = q.get_price(3382).close
    message.send("7&iHD {0} ({1})".format(price, price-4450))
    price = q.get_price(5401).close
    message.send("新日鉄住金 {0} ({1})".format(price, price-2633))
    price = q.get_price(6643).close
    message.send("戸上電機 {0} ({1})".format(price, price-459))
    price = q.get_price(7203).close
    message.send("トヨタ自 {0} ({1})".format(price, price-6239))
    price = q.get_price(8306).close
    message.send("三菱UFJ {0} ({1:.1f})".format(price, price-702.4))
    price = q.get_price(9022).close
    message.send("JR東海 {0} ({1})".format(price, price-17781))
    price = q.get_price(9437).close
    message.send("NTTドコモ {0} ({1:.1f})".format(price, price-2600))
    price = q.get_price(9613).close
    message.send("NTTデータ {0} ({1})".format(price, price-1215))
    price = q.get_price(9501).close
    message.send("東京電力 {0} ({1})".format(price, price-472))
```

現在の株価と、取得単価と比較した値を表示させるようにしました。

## 5. 実行

```
$ python run.py
```

<img width="220" alt="スクリーンショット 2017-08-16 15.26.21.png" src="https://qiita-image-store.s3.amazonaws.com/0/158680/997e66eb-eb51-0c4d-bb5c-93d79286edb6.png">

<img width="220" alt="スクリーンショット 2017-08-16 15.26.33.png" src="https://qiita-image-store.s3.amazonaws.com/0/158680/af08cf8e-51a0-b571-d7d6-1a0516135268.png">

## (追記) ラズパイ上でslackbotをデーモンとして動かす

```bash
(mac)$ ssh pi@raspberrypi.local

$ sudo apt-get install python3-pip
$ pip3 install slackbot
$ pip3 install jsm
$ git clone https://github.com/msrks/slackbot.git
$ cd slackbot/
$ ls
README.md  plugins  run.py  slackbot_settings.py
$ nano slackbot_settings.py #APIキーを書き換え
$ nohup python3 run.py &
$ exit
```

nohupについては[以前の記事](http://qiita.com/msrks/items/4816784e2d19fc90c872)を参照してください