LoginSignup
95
96

More than 3 years have passed since last update.

Slack の特定のチャンネルのメッセージ一覧をスプレッドシートにエクスポートするツールを作ってみた

Last updated at Posted at 2019-05-13

なにこれ

about.jpg
Slack の特定のチャンネルのメッセージ一覧(厳密にはスレッド一覧)をスプレッドシートに出力するやつです。

概要

Slack にはメッセージのエクスポート機能があります( ワークスペースのデータをエクスポートする - Slack )が、ワークスペースの全てのメッセージをエクスポートするとかなり時間がかかるので、特定のチャンネルのメッセージ一覧をスプレッドシートにエクスポートするツールを作りました。

使用技術

Google Apps Script

スプレッドシートに出力したかったため、 Google Apps Script を採用しました。

Slack API

Slack の API を叩いて、メッセージ一覧を取得しました。

実装

Google Apps Script で、 50 行くらいで書けました。

var TOKEN   = PropertiesService.getScriptProperties().getProperty("TOKEN");
var CHANNEL = PropertiesService.getScriptProperties().getProperty("CHANNEL");

function main() {
  const baseUrl = 'https://slack.com/api/channels.history';
  const baseParameters = [
    'token=' + TOKEN,
    'channel=' + CHANNEL,
    'count=1000',
  ];

  var messages = [];
  var latestMessage = '';
  do {
    var parameters = baseParameters.concat([latestMessage]).join('&');
    var res = fetchSlackChannelMessages(baseUrl + '?' + parameters);
    var newMessages = res.messages
      .filter(function (v) {
        return !('thread_ts' in v) || v.ts === v.thread_ts;
      }).map(function (v) {
        return [
          v.client_msg_id,
          v.type,
          v.text,
          v.user,
          v.ts,
          v.reply_count || 0,
          v.reply_users_count || 0,
        ];
      });
    messages = messages.concat(newMessages);
    latestMessage = 'latest=' + res.messages[res.messages.length-1].ts;
  } while (res.has_more);

  SpreadsheetApp
    .getActiveSheet()
    .getRange('A2:G' + (messages.length+1))
    .setValues(messages);
}

function fetchSlackChannelMessages(url) {
    const res = UrlFetchApp.fetch(url, {
        method: 'GET',
        headers: { "Content-Type": 'application/json' }
    });
  return JSON.parse(res);
}

導入方法

導入方法は GitHub の tanabee/slack-channel-exporter リポジトリの README にまとめています。

関連記事

95
96
1

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
95
96