LoginSignup
0
1

More than 1 year has passed since last update.

slackのログ出力で生成されるjsonファイルを見やすいログの形式にするpythonプログラム

Posted at

slack有料化

slackが9/1以降無料ユーザーが使える機能を変更し、無料ユーザーは90日前までの発言しか閲覧できなくなります。全体連絡等に使っていたところは他のアプリに移行することも多いと思います。その際、過去のやり取りとしてログを保存することになると思います。そのときに.jsonファイルができます。このファイルにはやり取りのすべての情報が入っているといっても過言ではないですが、見づらいためそれをよく見るテキストの形式に変換するpythonのプログラムを作りました。

pythonソースコード

ソースコードを以下に示します。下のソースコード中のフォルダ名の部分を変更して使ってください。
簡単に説明すると、jsonファイルを辞書型(dict型)として読み込んで、メッセージ部分と発言者だけを抽出、タイムスタンプを変換して文字列型(str型)に変換して、それを成形してテキストファイルとして出力しています。同じ階層のgeneratedに出力されてるはずです。

 画像は取得できないのでメッセージと同じように記録されたリンクからダウンロードなりなんなりしてください。
この部分は純粋に自分の力不足です。すみません。

from cgitb import text
import json
import datetime
import re
import os
from tkinter import filedialog

dr_path='target'
dr_path=os.path.join(dr_path,'フォルダ名')
root=os.getcwd()
gene=os.path.join(root,'generated')
#print(gene)


def autlogex(path):
    if os.path.isdir(path):
        # directoryだったら中のファイルに対して再帰的にこの関数を実行
        files = os.listdir(path)
        for file in files:
            autlogex(os.path.join(path,file))
    else:
        # fileだったら処理
        ex_log(path)
    return

def ex_log(path):
    global gene
    ip=path.split('\\')
    #print(ip)
    #print(path)
    fname=ip[-1]
    fname=fname[:-5]
    logtext=''
    with open(path, 'r',encoding='utf-8') as f:
        json_dict=json.load(f)
        count=0

        for i in json_dict :
            ts,user,file='','',''
            if i.get('type')=='message':
            
                ts=i.get('ts')
            
                if ts !=None:
                    dt = datetime.datetime.fromtimestamp(float(ts))
                    #print('\n\n{}'.format(dt))
                    logtext+='\n'+'\n\n{}'.format(dt)

                user=i.get('user_profile')
                if user !=None:
                    #print('----------{}----------'.format(user['first_name']))
                    logtext+='\n'+'----------{}----------'.format(user['first_name'])
                file=i.get('files')
                if file !=None:
                    count+=1
                    path=file[0].get('permalink')
                    #print('画像< {} >のURL---->   {}'.format(count,path))
                    logtext+='\n'+'画像< {} >のURL---->   {}'.format(count,path)
            txt=i.get('text')
            #print(txt)
            if txt==None:
                txt=''
            logtext+='\n'+ txt
        #print('------ログここまで-----\n画像は{}枚あります'.format(count))
        logtext+='\n'+'------ログここまで-----\n画像は{}枚あります'.format(count)
        #print(gene)
        genefile=os.path.join(gene,'extract-{}.txt'.format(fname))
        #print(genefile)

        try:
            os.mkdir(gene)
        except FileExistsError as e:
            pass
        with open(genefile,'w',encoding='utf-8',newline='') as d:
            d.write(logtext)

    return


autlogex(dr_path)

0
1
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
0
1