きっかけ
とあるSlackで特定のクラスタが何人いるのか数えたいと思いました。
そこでもはや何番煎じかもわからないですが、jqでSlackのユーザ一覧を取得し整形するということを試してみました。
Slack APIにてtoken取得
とりあえずアクセス
とりあえず下記のURLへアクセスし、Apps一覧の画面へいきましょう。
アプリ作成
みたいな画面が見えるはずなので、Create New App
をクリックします。
そうすると下記の画面が出てくるはずなので、
App Name
にアプリの名前を入力し、Development Slack Workspace
で対象のWorkspaceを選択します。
Permissonを与えて、Workspaceへの認証を実施
Appが出来上がると以下のBasic Infomation 画面へ遷移します(今回はサンプルとしてtestというAppを作成しています)。
左メニューにあるFeatures
のOAuth & 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を見て数え上げました・・・。
参考にした記事