7
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【制限解除】Slackの全メッセージデータを取得する【簡単解決】

Last updated at Posted at 2023-03-26

Slackの無料プランを業務で使っている人も多いと思います。
ぶっちゃけ、有料プランを使ってコストを増やしたくないから、無料プランにしてますよね?
僕もそのユーザの一人です。

また、リプライとかで話しているうちに、重要なテキストデータがあるかわからなくなってしまった、、。

ということがあると思います。

今回は、そんな問題を解決するためのコードを作成しました。

背景

Slackを無料プランのまま、APIとかを使って、使い倒したい!!という風に思ったのがきっかけです。

2ヶ月ごとにこのコードを実行すれば、Slackの全部の会話データが無料で手に入るようになるので、Slackを使い倒すことが出来るようになります。

コードの中身は知らなくてもいいから、使い方だけ知りたい!!
そんなあなたは、

  1. SlackAPIの作り方
  2. Botのワークスペースへの追加方法

この二つを読んでSlackのAPIを作成したら、Colabを実行することが可能です。

完成品はこちら

完成予定図

image.png

image.png

環境

Google Colaboratoryで実行しました。
Google Colaboratoryについての詳しい説明は、下記のURLから確認してください。

完成品はこちら

APIのURL APIの動作 ドキュメントのURL
https://colab.research.google.com/notebooks/welcome.ipynb 「Google Colaboratory」とは、Googleが提供するオンライン上でPythonのプログラムを実行できるJupyter Notebook環境です。 https://colab.research.google.com/notebooks/intro.ipynb

Slack API

Slack APIを使えるようにする為の権限の追加とワークスペースの追加の方法を記載する。

APIの作成

  1. Slack APIにアクセスする
  2. Create an appをクリック

image.png

 3. From scratchをクリックする

image.png

 4. App Nameに作りたいアプリの名前を入れて、workspaceにBotを入れる

image.png

これで、一通りアプリを作成するときに必要なことは完了しました。

権限の追加

  1. 左メニューの中の「OAuth & Permissions」をクリックする。

image.png

  1. 下の方のScopesという項目で以下6つのスコープを追加する。

    1. channels:history
    2. channels:read
    3. groups:read
    4. im:history
    5. mpim:history
    6. users:read

image.png

スコープで取得する情報

それぞれのスコープで取得する情報は下記のとおりです。

チャンネルにBotを追加する

  1. 上記のスコープの追加が終わったら、「OAuth Tokens for Your Workspace」の項目にある
      「Install to Workspace」を押す。
  2. クリックして、「Bot User OAuth Token」をコピーする

ここで得られる値が、APIの認証に必要なトークンとなっている。
そのため、外部に流出しないように注意する。

image.png

ChatDataを取得するBotをデータを取得したいChannelに追加する。

  1. チャンネルを「右」クリック
  2. チャンネル詳細を表示するをクリック
  3. チャンネル詳細のインテグレーションをクリック
  4. 青色の「アプリを追加する」をクリック
  5. 上記で作成したアプリ名を追加する。

image.png

image.png

用いたAPIの説明

コードの中で使用しているAPIは4つです。
それぞれのDMやチャンネル、スレッド内のメッセージを取得するAPIとなっています。

APIのURL APIの動作 ドキュメントのURL
conversations.history チャンネルのメッセージの履歴を取得します。 https://api.slack.com/methods/conversations.history
conversations.replies スレッドのメッセージを取得します。 https://api.slack.com/methods/conversations.replies
conversations.list ワークスペース内のチャンネルやDMを一覧表示します。 https://api.slack.com/methods/conversations.list
users.list ワークスペースに所属するユーザーの一覧を表示します。 https://api.slack.com/methods/users.list

関数の説明

get_response(api_url, payload=None)

Slack APIにリクエストを送信する関数です。

引数:

  • api_url (str): APIのエンドポイントのURL
  • payload (dict): APIリクエストのパラメータ

返り値:

  • res.json() (dict): APIのレスポンス

get_messages(channel_id, channel_name, users_dict)

指定されたチャンネルのメッセージ履歴を取得する関数です。

引数:

  • channel_id (str): チャンネルのID
  • channel_name (str): チャンネル名
  • users_dict (dict): ユーザIDとユーザ名の対応表

返り値:

  • messages_sorted (list): メッセージのリスト

print_channel_messages(channel_name, messages, users_dict)

チャンネルのメッセージを出力する関数です。

引数:

  • channel_name (str): チャンネル名
  • messages (list): メッセージのリスト
  • users_dict (dict): ユーザIDとユーザ名の対応表

返り値:

  • なし

必要な要素:

  • Slack APIのトークン(token)
  • APIエンドポイントのURL(api_url)
  • APIリクエストのパラメータ(payload)
  • ユーザIDとユーザ名の対応表(users_dict)
  • チャンネルのID(channel_id)
  • チャンネル名(channel_name)
  • メッセージのリスト(messages)

最後に

これで、SlackのAPIを使いこなして、
会社やプライベート使用しているSlackをさらに有効活用していきましょう!!

GitHubのコードはこちら

参考文献

Slack無料プランで3か月前までの会話しか見えなくなるのをAPIを使って何とかする

7
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?