Pythonでslackを使う(1): slackのメッセージ送信
結論
zsh
% source {任意の仮想環境 = venv}/bin/activate
(venv) % pip install "slack_sdk>=3.0"
(venv) % pip install aiohttp #必要であれば
zshenv
export SLACK_API_TOKEN="hogehogehoge" #your token
python
import os
from slack_sdk import WebClient
from slack_sdk.errors import SlackApiError
def send_slack_message(text = "Hello from your app! :tada:", channel = "random"):
slack_token = os.environ["SLACK_API_TOKEN"]
client = WebClient(token=slack_token)
try:
response = client.chat_postMessage(
channel=channel,
text=text
)
except SlackApiError as e:
# You will get a SlackApiError if "ok" is False
assert e.response["error"]
内容
導入
プログラムの実行過程を把握するポピュラーな方法は以下です。
-
print
などで出力 -
logger
などでlogをファイルに保存 - LINEやslackで通知等、他ツールを用いる
それぞれ話すと長くなるので(今後はそれぞれを記事にします)省略しますが、今回は3番目のアイテマイズのslackでプログラムの実行過程を把握する方法を説明します。
slackはLINE(line-notify
)に比べて業務や研究色が強く、Gmailと比べて気軽に閲覧できるのでオススメです。
pythonでslackを扱うための手順は以下です。
- API_TOKENの取得
- ローカル環境の設定(ライブラリ(
slack_sdk
)のインストールと環境変数) - プログラム記述
それぞれ以下で説明していきます。
1. SLACK_API_TOKENの取得
手順は以下です[2]。
- slack api(https://api.slack.com/) からアプリを作成
- Permissions -> Scopeからchat:write権限を追加
- slackワークスペースにアプリをインストール
- Bot User OAuth Access TokenのAPI tokenを取得(tokenが複数あるので該当のものであるか要確認)
2.ローカル環境の設定
SLACK_API_TOKENを環境変数に設定
取得したSLACK_API_TOKEN
は必ず環境変数に入れてプログラムレベルには記述しないようにしましょう。ターミナルでexportするか以下のようにシェルの環境設定ファイルで読み込むようにしましょう。
安全性の観点から前者でexportしてhistoryを消す方が良いですが、個人的にはログを残すという意味で後者でいいかなと思います。そもそもシェルの環境設定ファイルは隠しファイルで、見つからないという前提です。
zshenv
export SLACK_API_TOKEN="hogehogehoge" #your token
slack_sdk
)のインストール
ライブラリ(pythonでslackを扱うのに必要なライブラリをインストールします。
本家[1]に従うと以下のようになります。
また筆者は、slack_sdk
のみをインストールして後述のプログラムを実行すると、ModuleNotFoundError: No module named 'aiohttp'
というエラーが出たので、追加でaiohttp
もpip install
した。
zsh
% source {任意の仮想環境 = venv}/bin/activate
(venv) % pip install "slack_sdk>=3.0"
(venv) % pip install aiohttp #必要であれば
3.プログラム
プログラムは以下です。関数化するとどこでも呼べるので便利です。
import os
from slack_sdk import WebClient
from slack_sdk.errors import SlackApiError
def send_slack_message(text = "Hello from your app! :tada:", channel = "random"):
slack_token = os.environ["SLACK_API_TOKEN"]
client = WebClient(token=slack_token)
try:
response = client.chat_postMessage(
channel=channel,
text=text
)
except SlackApiError as e:
# You will get a SlackApiError if "ok" is False
assert e.response["error"]
send_slack_message()
最後に
Pythonでslackを使うシリーズは計3回を予定しています。
ご期待があればLINEやNotion APIなども使っていくので、コメントいただけるとありがたいです!!
関連
参考
[1] slack_sdk: https://slack.dev/python-slack-sdk/faq.html#installation-issues
[2] SLACK_API_TOKENの取得: https://risaki-masa.com/how-to-get-api-token-in-slack/
Discussion