macでcurlでSlack API

前回

curl wttr.in/Tokyo で天気予報が出るのはわかった。
curl -h で色々コマンドがあるんだな〜ってのをチラッとみた。
URL打ち込んでヘッダー情報取れるのわかった(わかってない。

あと、色々ミスってあー ってなった時は
control c で。


インストールしておくもの

fig
https://fig.io/
便利だからおすすめ


brew
https://brew.sh/index_ja
brew --version で入ってたけな、バージョンなんだっけが確認できる。

jq
https://stedolan.github.io/jq/
brew install jq
でインストールできる。
jq --version でバージョン確認できる
jqとは?JSON整形したりみやすくしてくれる、らしい。

curlでSlackチャンネルの一覧取得(conversations.list)やってみる

こちらを参考にした。

で、まあ、まずはやってみますわな。

まずはトークンを定義。

slack_api_token="xoxb-xxxxxxxx-xxxxxxxxxxx-xxxxxxxxxxxxx"

これをそのままターミナルに打ってみる。

でもなー、個人的には、
User OAuth TokenなのかBot User OAuth Tokenなのか分かるように命名したいな。まあ、ひとまずやってみる。

これ、定義されたものを確認するのはどうするんだ?
それがわからないけど、ひとまず進む。

コマンド

curl -s "https://slack.com/api/conversations.list?limit=1" \
    -H "Authorization: Bearer ${slack_api_token}" \
    -H 'Content-Type: application/json; charset=utf-8' \
    | jq

実行結果

お〜取れてる!


コマンドを読み解いてみる。

-s, --silent        Silent mode
-s "https://slack.com/api/conversations.list?limit=1" \

標準のレスポンスは時間等が表示される。

-sなしで実行すると、確かに実行結果の時間が取れている。
これは見えなくても良いので、-sを付けたわけか。

https://www.setouchino.cloud/blogs/99#s



-H
うーん、多分ヘッダ情報と思うけど。

-H "Authorization: Bearer ${slack_api_token}" \

-H 'Content-Type: application/json; charset=utf-8' \

https://www.pg-fl.jp/program/dos/doscmd/curl.htm#opt_header

https://www.pg-fl.jp/program/dos/doscmd/curl.htm#opt_header


で、最後
パイプライン|で 区切って jq で整形してるわけか。
jqなしで実行してみるとこうなる。


チャンネル一覧のAPIが上手くいったので、API変えればユーザ一覧も取れる。

curl -s "https://slack.com/api/users.list?limit=1" \
    -H "Authorization: Bearer ${slack_api_token}" \
    -H 'Content-Type: application/json; charset=utf-8' \
    | jq


jqコマンドを利用して、特定の値だけ抜き出したい

とりあえず、コピペで動かしてみる。

curl -s "https://slack.com/api/users.list?limit=1" \
    -H "Authorization: Bearer ${slack_api_token}" \
    -H 'Content-Type: application/json; charset=utf-8' \
    | jq -r '.members[] | select(.deleted == false) | select(.is_restricted == false) | select(.is_bot == false) | .profile.image_72, .name' 

うーん。ちょっと違うんだよな。botの画像はいらないんだよなー。それだけが抜き出されてる状態だ。

-r は多分removeかなあ。

「jq コマンド 使い方」でググって
この辺を参考にしてみる。
https://www.wakuwakubank.com/posts/676-linux-jq/

あ、limit=1 いらんか。

select(.name  !== “slackbot”) にしたらSlackbot除外できるかと思ったけど上手くいかない。
うーん。

一旦、これでユーザの名前と画像は取れてる

curl -s "https://slack.com/api/users.list" \
    -H "Authorization: Bearer ${slack_api_token}" \
    -H 'Content-Type: application/json; charset=utf-8' \
    | jq -r '.members[] | select(.deleted == false) | select(.is_restricted == false) | select(.is_bot == false) |.profile.image_72, .name' 

-r               output raw strings, not JSON texts;
だった.

とにかく、一旦、このコマンドでBotユーザを除いたユーザの名前と画像は取れた。あとはこれを然るべき場所に保存したい。

元のコマンドをもう一度みる。
https://qiita.com/shinichinomura/items/def949e1cbe80c2f695c

元のコマンド

curl https://slack.com/api/users.list -d "token=$OAUTH_TOKEN" \
  | jq -r '.members[] | select(.deleted == false) | select(.is_restricted == false) | select(.is_bot == false) | .profile.image_72, .name' \
  | xargs -n 2 sh -c 'curl -L $0 -o $1.png'

改変途中

curl -s "https://slack.com/api/users.list" \
    -H "Authorization: Bearer ${slack_api_token}" \
    -H 'Content-Type: application/json; charset=utf-8' \
    | jq -r '.members[] | select(.deleted == false) | select(.is_restricted == false) | select(.is_bot == false) |.profile.image_72, .name' 

元のコマンドでは、 | xargs -n 2 sh -c 'curl -L $0 -o $1.png' この辺でどうにかやってるっぽい。

xargsとは??えっくすあーぐす?ざーぐす?引数?

「xargs」は、「標準入力やファイルからリストを読み込み、コマンドラインを作成して実行する」というコマンドです。

https://atmarkit.itmedia.co.jp/ait/articles/1801/19/news014.html

ちょっと何言ってるのかわからない。
https://wa3.i-3-i.info/word11619.html

xargs [オプション] [コマンド[引数]]

構文はこう。

xargs -n 2 sh -c 'curl -L $0 -o $1.png' 

これはつまり
-n 2 sh
-c 'curl
-L $0
-o $1.png'

の4つか。
'curl -L $0 -o $1.png'  で一括りになってるのが怪しー。

よくわかんねえなあ。

 [-n number [-x]]
 [-L number]

https://orebibou.com/ja/home/201507/20150727_001/



うーーーん、わからん。
一旦ここまで。

curl で画像は取ってこれた、それをどう出力するか、ここで詰まっている。

#curl
#xargs
#slack
#jq

いただいたサポートで、書籍代や勉強費用にしたり、美味しいもの食べたりします!