下のスクリーンショットのようにセルB1にチャンネル名を入力しておき、スクリプトを動かすと、セルA3からずらずらっとメッセージなどの情報が出てきます。
APIにはチャンネル名ではなく、チャンネルIDを渡さなければならず、最初面食らいました。よってまずチャンネルIDとチャンネル名の一覧を取得し、そこからチャンネルIDを探してという流れになります。
また、返ってくるJSONデータも投稿内容によっていろいろな項目があってそのすべては把握できていません。なのでその辺は割りとテキトーなことになっていますし、その意味ではタイトルは「すべて」取得と書いていますが厳密にはすべてではありません。
詳細は省きますがトークンはリンク先から取得できたと思います。
https://api.slack.com/web
コード.gs
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sh = ss.getActiveSheet();
function getSlack() {
// チャンネルリストを取得
var token = "取得したトークン";
var url = "https://slack.com/api/channels.list?token="+token+"";
var response = UrlFetchApp.fetch(url);
var json = response.getContentText();
var data = JSON.parse(json);
// 対象となるチャンネル名から対応するチャンネルIDを探し出す
var channel_name = sh.getRange(1,2).getValue();
for (var i=0; i<data.channels.length; i++) {
if (data.channels[i].name == channel_name) {
var channel_id = data.channels[i].id;
break;
}
}
// 取得したチャンネルIDをもとにチャンネル内のすべてのメッセージを取得
var url = "https://slack.com/api/channels.history?token="+token+"&channel="+channel_id+"";
var response = UrlFetchApp.fetch(url);
var json = response.getContentText();
var data = JSON.parse(json);
// スプレッドシートに取り込む
// 最終行取得
var lr = sh.getLastRow();
// 初期化
if (lr > 2) sh.getRange(3,1,lr-2,sh.getLastColumn()).clear();
// 出てきそうな項目名を予め列挙しておく(この辺は必要に応じて加減すればよいでしょう)
var item = [
"file",
"text",
"type",
"user",
"ts"
];
// 2次元配列化
var ary = [];
var ary2 = [];
for (var i=0; i<data.messages.length; i++) {
for (var j=0; j<item.length; j++) {
ary.push(data.messages[i][item[j]]);
// もしundefinedなら空欄に直す
if (!ary[j]) {
ary[j] = "";
}
}
ary2.push(ary);
ary = [];
}
// スプレッドシートに転記
sh.getRange(3,1,ary2.length,item.length).setValues(ary2);
}
実際の運用ではチャンネル名とIDやユーザー名とIDなどは別シートに予めリスト化しておき、そこから拾うような感じになるでしょうか。また、応用すれば更新されたデータのみを毎日自動でチェックとかもできるでしょう。