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