【Slack・Python】プログラムからメッセージを送信する方法

tl;dr

WebHookでメッセージを送信するコマンドをPythonで実行する。

環境

WebHookの導入

これで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にメッセージを自動で送信するというのは、機械学習に限らず色々なところで役に立つと思うので、ぜひ利用してみてください。 自分のプログラムからメッセージが送られてくるというのは、人間的な距離が縮まったかのように感じられることと思います。

最後までお読みいただき、ありがとうございました。