隗より始めよ

今後はいろいろ考え始めます。

Pythonを使ってSlackにVPSから投稿する

f:id:mazarimono:20180928223444j:plain

今週はVPSでぐるぐると相場に関して計算するようなものを作っていました。

VPSをつかうと自然とvimを使うようになり、1週間経つと、他のがやりにくく感じるように…。

こうしてvimmerになっていくのですね。こわい。

そんな話は置いといて、今回作ってみた、VPSからslackにデータを投げる方法を記録しておきます。参考にしたのは下の記事です。分かりやすいことこの上なしで、これ以上書くことはありません。

qiita.com

だったら書くなということになりますが、ちょっと迷って、手を入れた部分があったので書き記しておきます。

相場に関してのデータを投げるということで(投げるデータは3つ)、時系列に並んでいると見やすいなーと思い、最初、pandasのDataFrameを投げようとしました。すると以下のようなエラーが・・・

TypeError: Object of type 'DataFrame' is not JSON serializable

JSONシリアライズできないからデータフレームは駄目ですということのようです。

先ほどのリンク先を参照すると、たしかに文字列で送っている。最初はDataFrameをバラバラにして、一つのデータに関していくつかの時系列を投げるということで解決しようと思いましたが、それで一つのチャンネルに3つのデータを投げると、とにかく見難い!!!ということでチャンネルを分け、データは最新のものを一つ投げることにより、時系列っぽく見えるようにしました。コードは以下のような感じです。

import requests
import json
import csv
import time

def send_slack(dataFrame, name, address):
    content = '{} : {} / {}'.format(name, dataFrame[0], dataFrame[1])
    payload = {
            'text': content,
            'icon_emoji': ':snake:',
            }

    data = json.dumps(payload)

    requests.post(address, data)

def get_data():
      df = read_csv('hoge.csv')
      df = df[-1]
      return df

if __name__ == '__main__':
      nameAndaddress = {'test':'XXX', 'test1': 'YYY', 'test2':'ZZZ'}
      for name, address in nameAndaddress.items():
             df = get_data()
             send_slack(df, name, address)
             time.sleep(1)

という感じでデータごとにwebhookアドレスを変更して、csvの最後のデータをslackに送るという感じにしました。データが0,1と2つありますが、0は日時データ、1が計算したデータとなっています。

メールを送信するかぁとか、APIを作るかなぁとか思いましたが、slackが思いのほか簡単で良かったです。

これをCRONで回して快適に外出先でもデータが取れ、売買ができるようになりました。いやー良いです。