LANG SELRCT

Apps Script Reference  (Create: Create new Spreadsheet | Create new Apps Script

Wednesday, February 20, 2019

Slack APIで特定のchannelの履歴を取得したい

追記 2020/08/02

最初に投稿した時は
https://slack.com/api/channels.history
で取得できていましたが、Slack側の仕様変更で

https://slack.com/api/conversations.history
になったようなので修正しました。


Scopesの設定は
channels:history
のままで良いようです。



Slack APIのchannels.historyで履歴の取得を試みたコードを書き残しておきます。
  1. クエリパラメータで渡すコード
    • URLの末尾にパラメータを付け足す
  2. payloadで渡すコード
    • POSTでpayloadに入れる

の2パターンを試してみました。


1. クエリパラメータで渡してみる


コード.gs
function gethistories() {
  var token = "TOKEN";
  var channel_id = "ID";
  var oldest = getUnixTime("2019/02/14 13:26:12");
  var latest = getUnixTime("2019/02/23 22:17:12");
  var url = 'https://slack.com/api/conversations.history' +
            '?token=' + token +
            '&channel=' + channel_id +
            '&latest=' + latest +
            '&oldest=' + oldest +
            '&inclusive=' + true +
            '&count=' + 2;
  var response = UrlFetchApp.fetch(url)
  var jobj = JSON.parse(response)
  Logger.log(jobj);
}

function getUnixTime(dateTime) {
  var date = new Date(dateTime);
  var milsec = date.getTime();
  var sec = milsec / 1000;
  var time = sec.toString();
  return time;
}



2. payloadで渡してみる


コード.gs
function gethistories() {
  var token = "TOKEN";
  var channel_id = "ID"; //channelの名前ではなくID
  var oldest = getUnixTime("2019/02/14 13:26:12");
  var latest = getUnixTime("2019/02/23 22:17:12");
  var url = "https://slack.com/api/conversations.history";
  var payload = {
    "token": token,//Slack AppのToken
    "channel": channel_id,//ChannelのID
    "oldest": oldest,//この日時から
    "latest": latest,//この日時まで
    "inclusive": true,//oldestとlatestを含めるか true, false
    "count": 2//取得する件数 1〜1000
  }

  var options = {
    'method': 'post',
    'payload': payload
  };
  
  var response = UrlFetchApp.fetch(url, options)
  var jobj = JSON.parse(response)
  Logger.log(jobj);
}

function getUnixTime(dateTime) {
  var date = new Date(dateTime);
  var milsec = date.getTime();
  var sec = milsec / 1000;
  var time = sec.toString();
  return time;
}


補足

日時はそのままでは渡せない仕様のため
getUnixTimeという関数を作ってUNIX時間に変換しました。

FYI:UNIX時間
https://ja.wikipedia.org/wiki/UNIX%E6%99%82%E9%96%93


channel_idはブラウザでその部屋を開いたときにアドレスバーで確認できます。
NAME.slack.com/messages/CHANNEL_ID/


TOKEN取得の方法
Slack AppのTokenを取得したい


Slack App側の設定
Scope Permission Scopesで「channels:history」を選択します



関連記事


参考

conversations.history
https://api.slack.com/methods/conversations.history

channels.history
https://api.slack.com/methods/channels.history

Latest post

スプレッドシートA列にある複数のテキストをスライドに追加したい(Google Apps Script)

今回Google Apps Scriptでやりたいこと GoogleスプレッドシートA列にある複数の値を取得して Googleスライドに渡して 図形オブジェクトのテキストとして追加したい ① スプレッドシートのA列に値を入れておく ② Code.gsのinsertNewShape...