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)