研究室内Slack のチャンネルをアーカイブする話

Slack から Growi へ

弊ラボでは最近,研究室内SNSとしてSlack を使い始めました.使い始めたばかりで,まだ運用が確立していないので無料版を使っています.特段,不便なことはなかったのですが一つ,メッセージやファイルが消えてしまうという問題がありました.

そこで,研究室内ドキュメントとして使用している Growi に Slack のチャンネルのメッセージや画像をアーカイブしようではないか!ということでやってみました.(現在進行形)

何をするのか

  • Slack チャンネル を アーカイブ
  • 主な対象は一定期間で使わなくなってしまうチャンネル
  • 画像なども同時にアーカイブする

 Slack での設定

Slack のメッセージを取得するために App を作成し,workspace にインストールします.そして,Permission を良い感じに設定します.

必要なのは,

  • チャンネルのメッセージ取得 (channels:history)
  • チャンネル情報の取得 (チャンネル名からチャンネルIDに変換するため) (channels:read)
  • ユーザ情報の取得 (メッセージ内の ユーザID を名前に変換するため) (users:read)
  • 画像などデータ取得(files:read)

Growi での設定

設定からアクセストークンを発行します.

プログラム

Python で requests を使って Slack と Growi の API を叩きます.

pypi.org

 

基本的な方針は

  1. アーカイブしたいチャンネル名を渡す
  2. 指定されたチャンネルからメッセージを取得
  3. メッセージ内のユーザIDを名前に変換する
  4. スレッドのメッセージはまとめるようにする (読みやすく)
  5. 画像などのダウンロード
  6. Markdown 形式に整形する
  7. Growi へアップロード

です.

常用しているチャンネルの一部だけをアーカイブ,ページのアップデートを考慮して

  • メッセージを取得する際に,latest と oldest を設定できるようにする
  • Growi 側にアーカイブしたメッセージの最新タイムスタンプを記録しておき,更新に利用する

という要素が入りこんできます.

したがって,1. と 2. の間にまずは指定されたチャンネル名 (or Growi のページ名) のページの有無を確認.存在する場合は タイムスタンプ (ts) の確認をする必要があります.

 

 という感じのことをのんびりと実装しています.ユーザが一定数いるサービスを自由に開発できるのは楽しいですね.

 

Github 

github.com