YammerからSlackに移行した際、各メンバー(ユーザー)の投稿を確認する際にちょっと手間なので、一覧ページを作成しようとした際のメモ。
目次
基本編
Slack検索の基本URL
https://app.slack.com/client/<team_id>/search/search-<base64エンコードしたJSON>
<team_id>は、検索したいワークスペースのIDです。
ブラウザで開いたらアドレスバーに表示されている https://app.slack.com/client/XXXXXXXXXXX XXXXXXXXXXXの部分になります。
base64エンコードしたJSON
// 1. 元になるJSON
{
"d":"検索キーワード",
"r":"検索キーワード"
}
// 2. 各値をURLエンコード
{
"d":"%E6%A4%9C%E7%B4%A2%E3%82%AD%E3%83%BC%E3%83%AF%E3%83%BC%E3%83%89",
"r":"%E6%A4%9C%E7%B4%A2%E3%82%AD%E3%83%BC%E3%83%AF%E3%83%BC%E3%83%89"
}
// 3. JSONをbase64エンコード
ew0KCSJkIjoiJUU2JUE0JTlDJUU3JUI0JUEyJUUzJTgyJUFEJUUzJTgzJUJDJUUzJTgzJUFGJUUzJTgzJUJDJUUzJTgzJTg5IiwNCgkiciI6IiVFNiVBNCU5QyVFNyVCNCVBMiVFMyU4MiVBRCVFMyU4MyVCQyVFMyU4MyVBRiVFMyU4MyVCQyVFMyU4MyU4OSINCn0=
- 元になるJSONにキーd,rそれぞれの値に検索キーワードを入れます。
- それぞの値(“の内の部分)をURLエンコードします。
- JSONの{から}までまとめてbase64エンコードします。
URLを結合
Slack検索の基本URLにbase64エンコードした値を結合します。
https://app.slack.com/client/<team_id>/search/search-ew0KCSJkIjoiJUU2JUE0JTlDJUU3JUI0JUEyJUUzJTgyJUFEJUUzJTgzJUJDJUUzJTgzJUFGJUUzJTgzJUJDJUUzJTgzJTg5IiwNCgkiciI6IiVFNiVBNCU5QyVFNyVCNCVBMiVFMyU4MiVBRCVFMyU4MyVCQyVFMyU4MyVBRiVFMyU4MyVCQyVFMyU4MyU4OSINCn0
これで基本的な検索は可能なはずです。
応用編
メンバー(ユーザー)単位での検索
{
"d":"from:<@[user]|@[real_name]>",
"r":"from:<@[user]>"
}
[user]には、user id
[real_name]には、氏名
更にチャンネルを追加
{
"d":"from:<@[user]|@[real_name]> in:#{チャンネル名}",
"r":"from:<@[user]> in:<#[channel]>"
}
[user]には、user id
[real_name]には、氏名
[チャンネル名]には、表示されているチャンネル名
[channel]には、channel id
channel idはチャンネルを右クリックしてコピー-リンクをコピーしたURLの https://solapro.slack.com/archives/XXXXXXXXXXX XXXXXXXXXXXの部分
サンプルコード
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Slackユーザー一覧</title>
</head>
<body>
<?php
// https://api.slack.com/apps/ の OAuth & Permissions から事前に追加が必要
// 『OAuth Token』の取得、User Token Scopesに『channels:read』を追加
$API_KEY = 'xoxp-xxxxxxxxxxxxx-xxxxxxxxxxxxx-xxxxxxxxxxxxx-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'; // 各自キーは取得
$url = "https://slack.com/api/users.list";
$headers = [
'Authorization: Bearer '.$API_KEY,
'Content-Type: application/x-www-form-urlencoded'
];
$options = [
CURLOPT_URL => $url,
CURLOPT_HTTPHEADER => $headers,
CURLOPT_RETURNTRANSFER => true
];
$ch = curl_init();
curl_setopt_array($ch, $options);
$res = curl_exec($ch);
curl_close($ch);
$user_list = json_decode($res);
if($user_list->ok){
foreach($user_list->members as $v){
if($v->id != 'USLACKBOT' && $v->deleted != true){
$d = rawurlencode("from:<@$v->id|@$v->real_name>");
$r = rawurlencode("from:<@$v->id>");
$search = base64_encode('{"d":"'.$d.'","r":"'.$r.'"}');
$url = "https://app.slack.com/client/$v->team_id/search/search-$search";
echo "<a href=\"$url\"target=\"_blank\">$v->real_name ( $v->name )</a><br />";
}
}
}
?>
</body>
</html>
GitHubにもアップしてみました。
slack_user_list/slack_user_list.php at main · nstation/slack_user_list
Slackのワークスペースに所属しているユーザーの検索リンクを作成・表示. Contribute to nstation/slack_user_list development by creating an account on GitHub.
コメント