SlackAPIを使っていろいろ入手してみよう
こんにちは,gaeです.この記事は MMA Advent Calendar 2024 の21日目の記事です.
昨日は,udonくんの「音声処理実験の話」でした.私もこの実験をちょうど今やっているので,とても参考になりました.
はじめに
現在,MMAはSlackの無料版を使っています.ただ,無料版だと3ヶ月で過去のメッセージをみれなくなってしまいます.そのため,SlackのAPIを使ってSlackLogを鋭意作成中です.
今回はその一部として,SlackAPIを使っていろいろ入手してみたいと思います.(作ったものを公開しようかとも思いましたが,怒られそうなくらいに充実してきたのでやめておきます.)
SlackAPI
SlackAPIは,Slackの機能をプログラムから利用するためのAPIです.SlackAPIを使うことで,チャンネルのメッセージを取得したり,メッセージを送信したり,ユーザーの情報を取得したりすることができます.
今回はその中でも,SlackLogを作成する中で使用したもの,つまり取得するものをご紹介します.なお,以下のコードはPython
で書かれています.詳細に関しては,SlackAPIのドキュメントを参照してください.
また,今回使用するAPIには token
が必要です.この token
は,SlackAPIを利用するための認証情報です.SlackAppを作成してそこから入手してください.詳細はこちらを参照してください.なお,今回は全て以下のクラス内で実行するものとします.
import os
from slack_sdk import WebClient
from dotenv import load_dotenv
class SlackAPI:
load_dotenv()
def __init__(self):
self.token = os.getenv("SLACK_TOKEN")
self.client = WebClient(token=self.token)
メッセージ履歴の取得
conversations.history
メソッドを使うことで,チャンネルのメッセージ履歴を取得することができます.channel
にはチャンネル名ではなく,チャンネルIDを指定します.limit
は取得するメッセージ数(上限1000),oldest
とlatest
は取得するメッセージの範囲をタイムスタンプで指定します.
response = self.client.conversations_historytr(
channel=channel_id,
limit=1000,
oldest=oldest,
latest=latest
)
このように実行することで,response["messages"]
にメッセージのリストが返ってきます.中には,メッセージの内容や送信者の情報などが含まれています.これを使って,SlackLogを作成することができます.
ユーザー情報の取得
ただメッセージを取得しても,中に入っているユーザ情報は全てIDで表示されています.これを名前に変換するためには,ユーザ情報を取得する必要があります.SlackAPIのusers.info
メソッドを使うことで,特定のユーザ情報を取得することができます.
response = self.client.users_list(user=user_id)
ただ,これだと1人ずつ取得することになります.そのため,全ユーザ情報を取得するためには,users.list
メソッドを使います.
response = self.client.users_list()
これによって,response["members"]
にユーザ情報のリストが返ってきます.中には,ユーザの名前やアイコンなどが含まれています.これを使って,先ほどのメッセージ内のユーザ情報やメンションなどのユーザ情報を名前に変換することができます.
チャンネル情報の取得
チャンネル情報も同様に取得することができます.SlackAPIのconversations.info
メソッドを使うことで,特定のチャンネル情報を取得することができます.
response = self.client.conversations_info(channel=channel_id)
また,これも同様に全チャンネル情報を取得するためには,conversations.list
メソッドを使います.
response = self.client.conversations_list(limit=1000)
これによって,response["channels"]
にチャンネル情報のリストが返ってきます.中には,チャンネルの名前や作成者などが含まれています.これを使って,メッセージの送信されたチャンネルの名前を取得できたり,メッセージ内のチャンネル情報を名前に変換することができます.
リアクションの取得
カスタム絵文字も取得することができます.SlackAPIのreactions.get
メソッドを使うことで,カスタム絵文字のリストを取得することができます.
response = self.client.emoji_list()
これによって,response["emoji"]
にカスタム絵文字のリストが返ってきます.中には,絵文字の名前やURLなどが含まれています.これを使って,メッセージ内のリアクション情報を名前に変換することができます.
ただ,これだとデフォルトで入っている絵文字は取得できません.そこで,以下のリポジトリを作成してデフォルト絵文字の辞書を作成しました.使いたい場合はご自由にお使いください.(appleの絵文字のなのは許して)
おわりに
今回のAPI紹介はここまでになります.他にも,SlackAPIには様々な機能があります.今回は取得するもののみを紹介しましたが,送信するものや削除するものなどもあります.(要管理者権限)
皆さんもぜひ,SlackAPIを使って,Slackをより便利に使ってみてください.
明日は kanakanaくんが記事を書いてくれる予定です.お楽しみに.
Discussion