LoginSignup
27

More than 5 years have passed since last update.

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

Last updated at Posted at 2017-08-16

slackで株価を確認。めっちゃ便利です。(こちらを大変参考にさせていただきました)

スクリーンショット 2017-08-16 15.19.35.png

1. slackbotをつくる

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. スクリプトを作成

run.py
# coding: utf-8

from slackbot.bot import Bot

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

if __name__ == "__main__":
    print('start slackbot')
    main()
slackbot_settings.py
# coding: utf-8

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

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

# プラグインスクリプトを置いてあるサブディレクトリ名のリスト
PLUGINS = ['plugins']
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

スクリーンショット 2017-08-16 15.26.21.png

スクリーンショット 2017-08-16 15.26.33.png

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

(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については以前の記事を参照してください

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
27