APIって結局なんやねん。SlackAPIより。
きっかけ
APIってよく聞くけど結局なんなんですか。Application Programming Interfaceっていうくらいなんやから、たぶんアプリとほかのサービスを橋渡しする機能の集まりなんやろって感じはするけどいまいちわかってない。
てことで今回はSlackAPIとPythonを使用し、Pyhtonファイルを実行してSlackにメッセージを送ってみたい。
Javascriptを一ミリも勉強してこなかった故の苦労
もともとデータサイエンスの分野で働いていたため、Web系のプログラミングに少し距離を置いていた。でもスクレイピングとかやってみたいしーとか思うこともしょっちゅうあったが、そのたびにめんどくさってなって結局やらなかった要因がある。そうJavaScriptとその周りを取り囲む環境構築、およびサーバーうんぬんである。だが転職して早1か月ようやく手を付けなければならない業務を任されてしまった。
環境
Windows 11 Home
Python 3.11.5
Jupyterlab 3.6.6(anaconda不使用)
pycodestyle 2.11.0
知らん単語が多すぎる
- HTTP用語(POST, GET など)
- Webhook
- SDK
- Token
- OAuth
- Curlコマンド
あるあるであるが、新しい知識や技術を手に入れようとするとそこに書いてある単語が分からず、紐づけができないことと、単語の優先順位がつけれないため理解の難易度が格段に上がる。
そのため、上記の単語に自信がない人はこれを一旦読んでもええかもしれません。
WebAPI周りの単語集
Slackにメッセージをpythonで送る
表題の目的を達成するために何が必要かというと
- Slackの設定
- Pythonのスクリプト
Slackの設定
とりあえず、slack-apiのページにクイックスタートのページがあったので、そちらを使用していく.。
ボットの作成
スラックのチャンネルでメッセージを送るため、ボットアカウントを作成する。
まずは自分のslackアカウントを作成し、ワークスペースを作成(もしくは既存のワークスペースに参加)する。
ページ内のCreate accountボタンより、ボタンを押し、Quick startページの手順に従って操作していく。
Create New app -> From scrach -> app nameを決定->ボットを追加したいworkSpaceを選択-> Create new appで作成できる。
ボットの詳細設定
作成したボットの役割や権限を決める必要がある。
OAuth & Permissions
このボットの権限を付与します。Scopesの項目でどのような権限をこのボットに持たすかを決めます。今回はslackのチャンネルにメッセージを送信することなので、'chat:write'を付与します。
ドロップダウンよりchat:write ->add an OAuth Scope
OAuth Tokens for Your Workspaceの取得
OAuth & Permissionsを決定するとページ上部のOAuth Tokens for Your Workspaceの欄にTokenキーが発行されていると思うので、それをコピーしておく。
チャンネルにBotを追加する
Slackのワークスペースのページに戻り、追加したいチャンネルのチャンネルタブを右クリックしチャンネルの詳細を表示する。インテグレーションタブよりアプリを追加するを押下。作成したボットを追加する。
ちゃんとトークンが生きているかテストする
APIメソッド一覧の中のchat.postMessageのページからテストすることができる。
Or, provide your own token: 先ほどコピーしたToken
Channel: ボットを追加したチャンネル
text: 任意のメッセージテキスト
これでメッセージが送れるはずである。
Pythonの設定
はい、pythonです。POSTリクエストできるライブラリあるのでインストールしまーす。requestライブラリ使いまーす。
pip install request
ヘッダーって...何???
はい、すみません。そこからなんです。知りませんでした。この記事では飛ばします。ですがもし同じ境遇のお仲間がいたらうれしいので外部リンクに自分なりのまとめをまとめておきます。
ではPythonファイルを作成していきます
import requests
TOKEN = "Token" # あなたのトークンを代入して下さい
CHANNEL = "Channel" #ボットが入っているチャンネル
message = "Message" #任意のテキストメッセージを代入して下さい
url = "https://slack.com/api/chat.postMessage"
headers = {"Authorization": "Bearer " + TOKEN}
data = {
'channel': CHANNEL,
'text': message
}
r = requests.post(url, headers=headers, data=data)
print(r.json())
第一引数のurlでURLを指定し、第二引数でヘッダー、第三引数でデータ、つまりボディ部分を渡しています。
これを実行するとSlackにメッセージが送れます。