Slackで検索キーワード付きのURLを作成

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=
  1. 元になるJSONにキーd,rそれぞれの値に検索キーワードを入れます。
  2. それぞの値(“の内の部分)をURLエンコードします。
  3. 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

この記事が気に入ったら
いいねしてね!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

目次