Zenn
👻

SlackAPIを使っていろいろ入手してみよう

2024/12/21に公開

こんにちは,gaeです.この記事は MMA Advent Calendar 2024 の21日目の記事です.
昨日は,udonくんの「音声処理実験の話」でした.私もこの実験をちょうど今やっているので,とても参考になりました.

https://qiita.com/Q_Udon/items/1f6e33e75e77bdc7acd8
https://adventar.org/calendars/10770

はじめに

現在,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)

https://api.slack.com/methods

メッセージ履歴の取得

conversations.historyメソッドを使うことで,チャンネルのメッセージ履歴を取得することができます.channelにはチャンネル名ではなく,チャンネルIDを指定します.limitは取得するメッセージ数(上限1000),oldestlatestは取得するメッセージの範囲をタイムスタンプで指定します.

response = self.client.conversations_historytr(
    channel=channel_id,
    limit=1000,
    oldest=oldest,
    latest=latest
)

このように実行することで,response["messages"]にメッセージのリストが返ってきます.中には,メッセージの内容や送信者の情報などが含まれています.これを使って,SlackLogを作成することができます.

https://api.slack.com/methods/conversations.history

ユーザー情報の取得

ただメッセージを取得しても,中に入っているユーザ情報は全てIDで表示されています.これを名前に変換するためには,ユーザ情報を取得する必要があります.SlackAPIのusers.infoメソッドを使うことで,特定のユーザ情報を取得することができます.

response = self.client.users_list(user=user_id)

ただ,これだと1人ずつ取得することになります.そのため,全ユーザ情報を取得するためには,users.listメソッドを使います.

response = self.client.users_list()

これによって,response["members"]にユーザ情報のリストが返ってきます.中には,ユーザの名前やアイコンなどが含まれています.これを使って,先ほどのメッセージ内のユーザ情報やメンションなどのユーザ情報を名前に変換することができます.

https://api.slack.com/methods/users.info
https://api.slack.com/methods/users.list

チャンネル情報の取得

チャンネル情報も同様に取得することができます.SlackAPIのconversations.infoメソッドを使うことで,特定のチャンネル情報を取得することができます.

response = self.client.conversations_info(channel=channel_id)

また,これも同様に全チャンネル情報を取得するためには,conversations.listメソッドを使います.

response = self.client.conversations_list(limit=1000)

これによって,response["channels"]にチャンネル情報のリストが返ってきます.中には,チャンネルの名前や作成者などが含まれています.これを使って,メッセージの送信されたチャンネルの名前を取得できたり,メッセージ内のチャンネル情報を名前に変換することができます.

https://api.slack.com/methods/conversations.info
https://api.slack.com/methods/conversations.list

リアクションの取得

カスタム絵文字も取得することができます.SlackAPIのreactions.getメソッドを使うことで,カスタム絵文字のリストを取得することができます.

response = self.client.emoji_list()

これによって,response["emoji"]にカスタム絵文字のリストが返ってきます.中には,絵文字の名前やURLなどが含まれています.これを使って,メッセージ内のリアクション情報を名前に変換することができます.

ただ,これだとデフォルトで入っている絵文字は取得できません.そこで,以下のリポジトリを作成してデフォルト絵文字の辞書を作成しました.使いたい場合はご自由にお使いください.(appleの絵文字のなのは許して)

https://api.slack.com/methods/emoji.list
https://github.com/gae-22/slack-default-emoji/tree/main

おわりに

今回のAPI紹介はここまでになります.他にも,SlackAPIには様々な機能があります.今回は取得するもののみを紹介しましたが,送信するものや削除するものなどもあります.(要管理者権限)

皆さんもぜひ,SlackAPIを使って,Slackをより便利に使ってみてください.
明日は kanakanaくんが記事を書いてくれる予定です.お楽しみに.

GitHubで編集を提案

Discussion

ログインするとコメントできます