Slackに書いた分報をjqでまとめる雑なワンライナー

More than 1 year has passed since last update.

image

こんな感じにします。

内容

curl https://slack.com/api/channels.history\?token\=XXXXX\&channel\=YYYYY | jq -r '.messages | reverse | map((.ts | tonumber | .+32400 | todate) + " "  + .text) | .[]'

(2015/12/07 追記)別解。あんまりスマートにならなかった。tacを使う手もあったけど手元の環境に入ってなかったので、インストールしてまで…という感じ。

curl https://slack.com/api/channels.history\?token\=XXXXX\&channel\=YYYYY | jq -r '.messages | reverse | .[] | [(.ts | tonumber | .+32400 | todate), .text] | join(" ")'

(2015/12/17 追記)markdownでtableになるバージョン。subとかgsub使いたかったけどよくわからないエラーが出ておっかけるのに時間かかりそうだったのでsplit→joinでお茶を濁す。ついでに日付は削った。

curl https://slack.com/api/channels.history\?token\=XXXXX\&channel\=YYYYY | jq -r '.messages | reverse | .[] | [(.ts | tonumber | .+32400 | strftime("%H:%M:%S")), (.text | split("|") | join("\\|") | split("\n") | join("<br>"))] | join("|")'

(2016/2/16 追記)分報のチャンネルにbotの通知を流し始めたら、その投稿のtextがnullだったのでその対策を行ったバージョン。

curl https://slack.com/api/channels.history\?token\=XXXXX\&channel\=YYYYY | jq -r '.messages | reverse | .[] | select(.text) | [(.ts | tonumber | .+32400 | strftime("%H:%M:%S")), (.text | split("|") | join("\\|") | split("\n") | join("<br>"))] | join("|")'

slackのチャンネルの履歴の取得

https://api.slack.com/methods/channels.history
ここを読んだらだいたいできます。テストフォームがあるのでそこから試すと良いでしょう。テストフォームからトークン取るページに行ってトークンも取れます。

チャンネルIDは https://api.slack.com/methods/channels.list こっちのチャンネル一覧の結果に入ってます。

jqで加工

帰ってくるjsonのmessages項目に配列で発言が入ってて、tsがタイムスタンプ(小数)、textが本文なので、1行に時間と本文が1つ出るように加工してます。

新しい物が上にくるのでreverseしてます。
32400は時差の解消です。
.[]は配列を1要素1行に分解するものです。