3
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Slackのトーク履歴を整形する

Last updated at Posted at 2017-04-29

背景

Slackのトーク履歴を見やすいように整形したいと思います。
Slackのトーク履歴は、チャンネル/日付毎にファイル分けされたjsonでエクスポートされます。
このままではまともに見られないので、今回は、特定のチャンネルでの全期間の会話を一つのログに纏め、jsonをパースして出力させてみます。

そもそもトーク履歴をエクスポートする方法

フリープランの場合は、
https://チャンネル名.slack.com/services/export
でエクスポートできます(admin以上の権限が必要)。

有料プランの場合は他にもいくつか方法があるようです。
https://get.slack.help/hc/ja/articles/204897248-Slack-データエクスポート-ガイド

作ったシェルスクリプト

作業場所: 整形したいトーク履歴が格納されたディレクトリのあるディレクトリ

slack_log_parser.sh
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/

出力例

after.txt
U06THOGE1: ほげほげ
U06TFUGA9: ふが
U06TFOO63: ふーばー

ユーザ名はIDで格納されているので必要に応じて修正してください。

関連記事

こちらチャットログ整形記事第三弾でした。過去のものは以下からどうぞ。

Skype版
http://qiita.com/taumu/items/37f1baf0f6af3997d341
LINE版
http://qiita.com/taumu/items/278b2a3a1530498a62d1

3
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?