研究室内Slack のチャンネルをアーカイブする話
Slack から Growi へ
弊ラボでは最近,研究室内SNSとしてSlack を使い始めました.使い始めたばかりで,まだ運用が確立していないので無料版を使っています.特段,不便なことはなかったのですが一つ,メッセージやファイルが消えてしまうという問題がありました.
そこで,研究室内ドキュメントとして使用している Growi に Slack のチャンネルのメッセージや画像をアーカイブしようではないか!ということでやってみました.(現在進行形)
何をするのか
Slack での設定
Slack のメッセージを取得するために App を作成し,workspace にインストールします.そして,Permission を良い感じに設定します.
必要なのは,
- チャンネルのメッセージ取得 (channels:history)
- チャンネル情報の取得 (チャンネル名からチャンネルIDに変換するため) (channels:read)
- ユーザ情報の取得 (メッセージ内の ユーザID を名前に変換するため) (users:read)
- 画像などデータ取得(files:read)
Growi での設定
設定からアクセストークンを発行します.
プログラム
Python で requests を使って Slack と Growi の API を叩きます.
基本的な方針は
- アーカイブしたいチャンネル名を渡す
- 指定されたチャンネルからメッセージを取得
- メッセージ内のユーザIDを名前に変換する
- スレッドのメッセージはまとめるようにする (読みやすく)
- 画像などのダウンロード
- Markdown 形式に整形する
- Growi へアップロード
です.
常用しているチャンネルの一部だけをアーカイブ,ページのアップデートを考慮して
- メッセージを取得する際に,latest と oldest を設定できるようにする
- Growi 側にアーカイブしたメッセージの最新タイムスタンプを記録しておき,更新に利用する
という要素が入りこんできます.
したがって,1. と 2. の間にまずは指定されたチャンネル名 (or Growi のページ名) のページの有無を確認.存在する場合は タイムスタンプ (ts) の確認をする必要があります.
という感じのことをのんびりと実装しています.ユーザが一定数いるサービスを自由に開発できるのは楽しいですね.