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を付けたわけか。


-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

で、最後
パイプライン|で 区切って 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://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]

うーーーん、わからん。
一旦ここまで。
curl で画像は取ってこれた、それをどう出力するか、ここで詰まっている。
いいなと思ったら応援しよう!
