💬

Slackのチャンネルとダイレクトメッセージをエクスポートする

2022/08/23に公開3

Slack のメッセージをエクスポートするスクリプトを書いたので、その紹介です。

やりたいこと

2022年9月1日の Slack のフリープランの変更で過去90日のメッセージしか保存されなくなってしまうので、自分が参加しているすべてのチャンネルのメッセージとダイレクトメッセージをエクスポートします。

公式のエクスポート機能はフリープランだとパブリックチャンネルにしか対応していないので、使えませんでした。

関連する記事

こちらの記事では、スプレッドシートを使って単一のチャンネルをエクスポートする方法が紹介されています。

今回はすべてのチャンネルとダイレクトメッセージを JSON でエクスポートしたかったので、自前で実装することにしました。

https://zenn.dev/nariakiiwatani/articles/8ed4a7bb0d5d0b

使い方

https://github.com/thamaa/slack-export

上記リポジトリにある slack_export.py を以下のように実行してください。
token には、Slack App の OAuth トークンを指定します。
トークンの発行方法や詳しい説明は GitHub の README を参照してください。

python slack_export.py \
    --token xxxxx \
    --output-dir output

実行すると、(上記の例だと)output ディレクトリの中に、チャンネルごとに以下のような JSON ファイルが作成されます。
--output-format jsonl オプションを追加すると、1行1メッセージの NDJSON 形式で保存されます。

$ head -n 10 output/random.json
[
    {
        "subtype": "channel_join",
        "text": "<@UXXXXXXXXXX>さんがチャンネルに参加しました",
        "ts": "0000000000.000000",
        "type": "message",
        "user": "UXXXXXXXXXX"
    },
    ...

実装

https://github.com/thamaa/slack-export/blob/7a57e70d7a4128a8f49adc6c17372beee1048375/slack_export.py

Slack Web API を利用して、以下の流れで自分が参加しているすべてのチャンネルとダイレクトメッセージを取得しています。

  1. conversations.list API でチャンネルとダイレクトメッセージのリストを取得
  2. conversations.history API で各チャンネルのメッセージを取得
  3. conversations.replies API でスレッド内のメッセージを取得

Discussion

jetbeejetbee

こちらのスクリプトでPMもプライベートチャンネルもエクスポートできました。本当に助かりました。

thamathama

ありがとうございます!お役に立てたようでよかったです。

shikishiki

今日試したんですが、90日以前の情報取れなくなっていませんか……?