こんにちは、名古屋スタジオでアプリエンジニアをしています田中と申します。
今回はPythonを使ってSlackにメッセージを投稿する方法を紹介します。
下準備
Slack編
PythonからSlackにメーセージを送るために「Incoming Webhooks」の設定を行います。
「Incoming Webhooks」を使うことで、外部からHTTPリクエストでメッセージを投稿することができます。
-
SlackのApp ディレクトリのページで incoming-webhooks を検索し選択します。
-
Slackに追加をクリック
-
メッセージを投稿したいチャンネルを選択します。(DMも設定できるのでテストする時は自身のDMに設定するのがオススメです)
-
Webhook URLが発行されるので、これでSlack側の準備は完了です。
Python編
続いて、Python側の準備です。
先ほど設定した「Incoming Webhooks」をPythonから呼び出す必要がありますが、
Python標準のurllibだと少し大変なので簡単に扱うために、今回はHTTPライブラリのRequestsをインストールします。
pipコマンドで簡単にインストールできます。
pip install requests
実践
では、次に実際にSlackにメッセージを投稿するスクリプトを書いていきます。
Hello Worldと投稿するスクリプト
import requests
import json
# WEB_HOOK_URLは下準備で発行したURLを設定しください
WEB_HOOK_URL = "https://hooks.slack.com/services/**************"
requests.post(WEB_HOOK_URL, data=json.dumps({
"text" : "Hello World",
}))
結果
犬のアイコンで投稿するスクリプト
また、以下の様に投稿するアイコンや名前なども指定することができます。
import requests
import json
# WEB_HOOK_URLは下準備で発行したURLを設定しください
WEB_HOOK_URL = "https://hooks.slack.com/services/**************"
requests.post(WEB_HOOK_URL, data=json.dumps({
# メッセージ内容
"text" : "wan!wan!",
# アイコン
"icon_emoji" : ":dog:",
# 投稿者名
"username" : "dog_bot"
}))
結果
天気ボット
他にも例えば天気の情報を取得してきて、毎日同じ時間に実行するようにすればちょっとしたお天気ボットを簡単に作成することができます。
(今回はLivedoor Weather Web Hacksを使って天気情報を取得しました。)
import requests
import json
url = "http://weather.livedoor.com/forecast/webservice/json/v1"
# cityで場所を指定します。今回は名古屋市(230010)を指定します
payload = {"city":"230010"}
weather_data = requests.get(url, params=payload).json()
# タイトル
weather_text = weather_data["title"] + "\n"
# 日付
weather_text += weather_data["forecasts"][0]["date"] + "\n"
# 天気
weather_text += weather_data["forecasts"][0]["telop"] + "\n"
# WEB_HOOK_URLは下準備で発行したURLを設定しください
WEB_HOOK_URL = "https://hooks.slack.com/services/**************"
requests.post(WEB_HOOK_URL, data=json.dumps({
"text" : weather_text,
"icon_emoji" : ":mostly_sunny:",
"username" : "weather_news_bot"
}))
結果
まとめ
今回はPythonを使ってSlackにメッセージを投稿する方法を説明しました!
工夫することでデバッグ用のログの出力やちょっとしたボットを作成することができます。
皆さんも是非挑戦してみてください!