【Slack・Python】プログラムからメッセージを送信する方法
tl;dr
WebHookでメッセージを送信するコマンドをPythonで実行する。
環境
- Ubuntu 18.04.5 LTS
WebHookの導入
- https://boatraceai.slack.com/apps/new/A0F7XDUAZ-incoming-webhooksにアクセス
- 通知したいチャンネルを選択
- Add Incoming WebHooks integrationをクリック
- 設定画面に推移するので、Webhook URLをコピー
これでWebHookの導入は完了です!お疲れ様でした。
次はターミナルからメッセージの送信が出来るか確認してみましょう!
ターミナルから送信してみる
ターミナルを開きます。
XXX = 先程コピーしたURL
MMM = メッセージ(ex.おはよう!)
としたときに、以下のコマンドを実行します。
curl -X POST XXX '{"text":"MMM"}'
導入時に指定したチャンネルに、メッセージが送信されれば成功です!
次はこのコマンドをPythonから実行してみましょう!
Pythonのプログラムに落とし込む
いよいよPythonでの実装です。今回はPythonを使用しますが、どの言語でも可能な処理だと思います(未確認)。
Pythonではsubprocess.callを使用することで、プログラム内でunixコマンドを実行することができます。簡単な例を示します。
import subprocess subprocess.call('ls') #>lsコマンドの実行結果が出力される
この子を利用して先程ターミナルで実行したコマンドを実行していきます。
ここでポイント。
Python内で文字列を表現するときに使うのが " と ' ですが " "の中で " を使うことはできません。
今回は " と ' と \" を組合せてコマンドを表現することにしました。少しややこしいです。
ではコードをどうぞ。
import subprocess def send_slack_message(message): url = "XXX" #WebHookのURL cmd = "curl -X POST "+url+" -d '{\"text\":\""+message+"\"}'" subprocess.call(cmd,shell=True) message = 'お腹空いた' #任意の文字列 send_slack_message(message)
slackにご飯が食べたいという趣旨のメッセージが届いたら成功です! これで本編は終わりですが、最後に僕がどのように利用しているかを書いておきます。
僕の使いみち
最近趣味で機械学習を学んでいます。学習時間が長いときには数日間に及ぶので、進捗状況を管理したいというニーズがありました。
そこでスマホからでも確認できるよう、slackにメッセージを送信することにしました。コマンドラインからの実行だけでは使い勝手が
悪いかったので、ソースコードから直接メッセージの送信が出来るようにしたという流れです。
実際に使っていますがすごく便利です。学校の休み時間等にニヤニヤしながらLog lossを確認したりしています。
slackにメッセージを自動で送信するというのは、機械学習に限らず色々なところで役に立つと思うので、ぜひ利用してみてください。
自分のプログラムからメッセージが送られてくるというのは、人間的な距離が縮まったかのように感じられることと思います。
最後までお読みいただき、ありがとうございました。