Slackのパブリックチャンネル一覧を取得してスプレットシートに書き出したい!
解決したいこと
Slackのパブリックチャンネル一覧を取得してスプレットシートに書き出したいです!
ネット上にいくつか関連ソースが転がっているのにも関わらずうまく動かないのでご助言いただけますと幸いです。
おそらくものすごく初歩的な部分が分かっていないかと思います...。
発生している問題・エラー
getSlackUsers @ Code.gs:37
setChannelInfo @ Code.gs:14
14行目
users = getSlackUsers();
37行目
"method" : method,
該当するソースコード(初学者なので全文記載します)
// スプレッドシート取得.
let ss = SpreadsheetApp.getActiveSpreadsheet();
let sheet = ss.getActiveSheet();
// SlackAPIで登録したボットのトークンを設定する.
let token = "xoxb-XXXXXXXXXXXXX";
// 削除するレコード数.
let deleteLength = 2000;
// 実行メソッド.
function setChannelInfo() {
deleteSpredsheetList();
users = getSlackUsers();
public_channels = getChannelList("public_channel");
for(let i=0;i<public_channels.length;i++) {
sheet.getRange(i+5,2).setValue(public_channels[i].name);
sheet.getRange(i+5,3).setValue(public_channels[i].topic.value);
sheet.getRange(i+5,4).setValue(public_channels[i].purpose.value);
for(let j=0;j<users.length;j++) {
if(users[j].id == public_channels[i].creator) {
sheet.getRange(i+5,5).setValue(users[j].real_name + "(" + users[j].name + ")");
break;
}
}
}
sheet.getRange(2,5).setValue(public_channels.length);
}
// slackユーザ取得.
function getSlackUsers() {
let options = {
"method" : method,
"contentType": contentType,
"payload" : {
"token": token
}
}
// 必要scope = users:read.
let url = 'https://slack.com/api/users.list';
let response = UrlFetchApp.fetch(url, options);
let obj = JSON.parse(response);
return obj.members;
}
// チャンネルリストを消し込む.
function deleteSpredsheetList() {
for(let i=0;i<deleteLength;i++) {
sheet.getRange(i+5,2).setValue("")
sheet.getRange(i+5,3).setValue("")
sheet.getRange(i+5,4).setValue("")
sheet.getRange(i+5,5).setValue("")
}
sheet.getRange(2,5).setValue(0);
}
// チャンネルリスト ページャー対応.
function getChannelList(types) {
// ページャーの最大数.
let maxPager = 10;
let count = 1;
let channelList = [];
let cursor = "";
while(count<=maxPager) {
channelObj = getChannelObject(types, cursor);
channelList = channelList.concat(channelObj.channels);
if(channelObj.response_metadata.next_cursor == "") {
break;
}
cursor = channelObj.response_metadata.next_cursor;
count++;
}
return channelList;
}
// チャンネルリストを取得する.
// https://api.slack.com/methods/conversations.list
function getChannelObject(types, cursor) {
let options = {
"method" : "get",
"contentType": "application/x-www-form-urlencoded",
"payload" : {
"token": token,
"limit": 1000,
"exclude_archived": true,
"types": types,
"cursor": cursor
}
}
let url = 'https://slack.com/api/conversations.list';
let response = UrlFetchApp.fetch(url, options);
let obj = JSON.parse(response);
return obj;
}
参考リンク
0 likes