💬
Slackのチャンネルとダイレクトメッセージをエクスポートする
Slack のメッセージをエクスポートするスクリプトを書いたので、その紹介です。
やりたいこと
2022年9月1日の Slack のフリープランの変更で過去90日のメッセージしか保存されなくなってしまうので、自分が参加しているすべてのチャンネルのメッセージとダイレクトメッセージをエクスポートします。
公式のエクスポート機能はフリープランだとパブリックチャンネルにしか対応していないので、使えませんでした。
関連する記事
こちらの記事では、スプレッドシートを使って単一のチャンネルをエクスポートする方法が紹介されています。
今回はすべてのチャンネルとダイレクトメッセージを JSON でエクスポートしたかったので、自前で実装することにしました。
使い方
上記リポジトリにある 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"
},
...
実装
Slack Web API を利用して、以下の流れで自分が参加しているすべてのチャンネルとダイレクトメッセージを取得しています。
- conversations.list API でチャンネルとダイレクトメッセージのリストを取得
- conversations.history API で各チャンネルのメッセージを取得
- conversations.replies API でスレッド内のメッセージを取得
Discussion
こちらのスクリプトでPMもプライベートチャンネルもエクスポートできました。本当に助かりました。
ありがとうございます!お役に立てたようでよかったです。
今日試したんですが、90日以前の情報取れなくなっていませんか……?