Edited at

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


なにこれ



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 にまとめています。


関連記事