Slack APIとjqでSlackにいるメンバーをサクッと取得


きっかけ

とあるSlackで特定のクラスタが何人いるのか数えたいと思いました。
そこでもはや何番煎じかもわからないですが、jqでSlackのユーザ一覧を取得し整形するということを試してみました。

Slack APIにてtoken取得

とりあえずアクセス

とりあえず下記のURLへアクセスし、Apps一覧の画面へいきましょう。

アプリ作成

上記のURLをクリックすると、

もしくは

みたいな画面が見えるはずなので、Create New Appをクリックします。
そうすると下記の画面が出てくるはずなので、

App Nameにアプリの名前を入力し、Development Slack Workspaceで対象のWorkspaceを選択します。

Permissonを与えて、Workspaceへの認証を実施

Appが出来上がると以下のBasic Infomation 画面へ遷移します(今回はサンプルとしてtestというAppを作成しています)。

左メニューにあるFeaturesOAuth & Permissionsへ移動します。

下へスクロールすると、Scopeという項目があります。
User Token Scopesの下にあるAdd an OAuth Scopeを押してusers:readの権限を追加します。

終わったら、左メニューにあるInstall App をクリックし移動し、Install to Workspaceをクリックします。

下記みたいな認証画面が出てくるので許可します。

これでUser Tokenが取得完了し一旦は終わりです。

このUser Tokenはコピーしておきましょう。

取得して加工

とりあえずjsonを取得

(やっとここからスクショが不要な部分になってほっとしてます)
以下はLinux, Mac, WSL/WSL2での利用を前提として記載となっております。
PowerShellやCommand Promptでの利用を前提としていない旨ご了承ください。

user.listのリファレンスを読む限り、HTTPのGetを投げてあげたらResponseで帰ってくるそうなので、とりあえずcurlで叩きます。

curlでの取得は以下の通りです。
<YourToken>は取得したUserToken

curl -X POST -H 'Authorization: Bearer <YourToken>' -H 'Content-type: application/json' https://slack.com/api/users.list > users_temp.json

jqのinstall

みんながみんなjqを入れてるわけではないはずなので、jsonの加工に必要なjqをインストール手順を示します。

sudo apt update
sudo apt install -y jq

レスポンスのjsonが読みづらいので整形

1行で返ってきてとても読みづらいので先ほど導入したjqで整形します。

cat users_temp.json | jq -r > users.json

csvへ出力

最後に、jsonからユーザ名を列にしたcsvを出力します。
jqの--raw-outputオプションを使ってもダブルクオートが消えないので、最後にsedコマンドで消し去っています。とりあえずワンライナーにて実行しています。

cat users.json |jq --raw-output '.members[] | [.name, .real_name] | @csv' | sed s/\"//g > users.csv

あとはcsvで確認すればOKです。
ちなみに、SlackにはWhat I Doに所属を記載でき、users.infoのAPIで個々の内容を取得することも可能です。
たださすがに制限に引っかかるであろうこと、何より人によって記載が異なったりすることがよくあるので結局最後はcsvを見て数え上げました・・・。

参考にした記事