背景
Slackのトーク履歴を見やすいように整形したいと思います。
Slackのトーク履歴は、チャンネル/日付毎にファイル分けされたjsonでエクスポートされます。
このままではまともに見られないので、今回は、特定のチャンネルでの全期間の会話を一つのログに纏め、jsonをパースして出力させてみます。
そもそもトーク履歴をエクスポートする方法
フリープランの場合は、
https://チャンネル名.slack.com/services/export
でエクスポートできます(admin以上の権限が必要)。
有料プランの場合は他にもいくつか方法があるようです。
https://get.slack.help/hc/ja/articles/204897248-Slack-データエクスポート-ガイド
作ったシェルスクリプト
作業場所: 整形したいトーク履歴が格納されたディレクトリのあるディレクトリ
channel=hogeChannel #チャンネル名を指定
outputfile=after.txt #アウトプットファイル名を指定
for file in `\find ./${channel}/ -maxdepth 1 -type f | sort`; do
json=`cat ${file}`
len=$(echo $json | jq length)
for i in $( seq 0 $(($len - 1)) ); do
user=$(echo $json | jq -r .[$i].user)
text=$(echo $json | jq -r .[$i].text)
echo "${user}: ${text}" >> $outputfile
done
done
findはそのままだと時系列順(ファイル名辞書順)にならないのでsortをつけています。
slack_log_parser.shを実行するとafter.txtが作られます。
ディレクトリ構造は以下のようになります。
- slack_log_parser.sh
- after.txt
- hogeChannel
- YYYY-MM-DD.json
- ...
参考記事
bashでjqを使ってJSONの配列をループさせる
http://qiita.com/ryo0301/items/2ac9d11f355f1cf52ea5
bashやshなどのsh系スクリプトでJSON形式のデータを読み込む
http://satolabo.0t0.jp/2017/01/30/shell-script-parse-json/
出力例
U06THOGE1: ほげほげ
U06TFUGA9: ふが
U06TFOO63: ふーばー
ユーザ名はIDで格納されているので必要に応じて修正してください。
関連記事
こちらチャットログ整形記事第三弾でした。過去のものは以下からどうぞ。
Skype版
http://qiita.com/taumu/items/37f1baf0f6af3997d341
LINE版
http://qiita.com/taumu/items/278b2a3a1530498a62d1