添加聊天记录选择展示

This commit is contained in:
xaoyaoo 2024-01-16 19:25:33 +08:00
parent 524c40923f
commit 9e2fa29e93
3 changed files with 43 additions and 10 deletions

View File

@ -12,6 +12,7 @@ from flask import Flask, request, render_template, g, Blueprint, send_file, make
from pywxdump import analyzer, read_img_dat, read_audio from pywxdump import analyzer, read_img_dat, read_audio
from pywxdump.api.rjson import ReJson, RqJson from pywxdump.api.rjson import ReJson, RqJson
from pywxdump import read_info, VERSION_LIST, batch_decrypt, BiasAddr, merge_db from pywxdump import read_info, VERSION_LIST, batch_decrypt, BiasAddr, merge_db
import pywxdump
# app = Flask(__name__, static_folder='../ui/web/dist', static_url_path='/') # app = Flask(__name__, static_folder='../ui/web/dist', static_url_path='/')
@ -28,19 +29,26 @@ def init():
# g.msg_path = path # g.msg_path = path
# g.micro_path = path # g.micro_path = path
# g.media_path = path # g.media_path = path
# g.wxid_path = r"C:\Users\xaoyo\Documents\Tencent\WeChat Files\wxid_vzzcn5fevion22" # g.wx_path = r"C:\Users\xaoyo\Documents\Tencent\WeChat Files\wxid_vzzcn5fevion22"
# g.my_wxid = "wxid_vzzcn5fevion22" # g.my_wxid = "wxid_vzzcn5fevion22"
rdata = { rdata = {
"msg_path": "", "msg_path": "",
"micro_path": "", "micro_path": "",
"media_path": "", "media_path": "",
"wxid_path": "", "wx_path": "",
"my_wxid": "", "my_wxid": "",
"is_init": False, "is_init": False,
} }
return ReJson(0, rdata) return ReJson(0, rdata)
@api.route('/api/version', methods=["GET", 'POST'])
def version():
"""
版本
:return:
"""
return ReJson(0, pywxdump.__version__)
@api.route('/api/contact_list', methods=["GET", 'POST']) @api.route('/api/contact_list', methods=["GET", 'POST'])
def contact_list(): def contact_list():
@ -171,7 +179,7 @@ def get_img():
img_path = request.json.get("img_path", img_path) img_path = request.json.get("img_path", img_path)
if not img_path: if not img_path:
return ReJson(1002) return ReJson(1002)
img_path_all = os.path.join(g.wxid_path, img_path) img_path_all = os.path.join(g.wx_path, img_path)
if os.path.exists(img_path_all): if os.path.exists(img_path_all):
fomt, md5, out_bytes = read_img_dat(img_path_all) fomt, md5, out_bytes = read_img_dat(img_path_all)
out_bytes = base64.b64encode(out_bytes).decode("utf-8") out_bytes = base64.b64encode(out_bytes).decode("utf-8")
@ -213,6 +221,11 @@ def export():
end_time = request.json.get("end_time") end_time = request.json.get("end_time")
chat_type = request.json.get("chat_type") chat_type = request.json.get("chat_type")
username = request.json.get("username") username = request.json.get("username")
# 可选参数
wx_path = request.json.get("wx_path", g.wx_path)
key = request.json.get("key", "")
if not export_type or not start_time or not end_time or not chat_type or not username: if not export_type or not start_time or not end_time or not chat_type or not username:
return ReJson(1002) return ReJson(1002)
chat_type_tups = [] chat_type_tups = []
@ -228,7 +241,11 @@ def export():
if not os.path.exists(outpath): if not os.path.exists(outpath):
os.makedirs(outpath) os.makedirs(outpath)
if export_type == "csv": if export_type == "endb":
pass
elif export_type == "dedb":
pass
elif export_type == "csv":
# 导出聊天记录 # 导出聊天记录
outpath = os.path.join(outpath, "csv") outpath = os.path.join(outpath, "csv")
if not os.path.exists(outpath): if not os.path.exists(outpath):
@ -236,6 +253,16 @@ def export():
code, ret = analyzer.export_csv(username, outpath, g.msg_path) code, ret = analyzer.export_csv(username, outpath, g.msg_path)
if code: if code:
return ReJson(0, ret) return ReJson(0, ret)
elif export_type == "json":
pass
elif export_type == "html":
pass
elif export_type == "pdf":
pass
elif export_type == "docx":
pass
else:
return ReJson(1002)
return ReJson(0, "") return ReJson(0, "")

View File

@ -187,7 +187,7 @@ class MainShowChatRecords():
sb_decrypt.add_argument("-media", "--media_path", type=str, help="解密后的 MediaMSG.db 的路径", required=False, sb_decrypt.add_argument("-media", "--media_path", type=str, help="解密后的 MediaMSG.db 的路径", required=False,
metavar="") metavar="")
sb_decrypt.add_argument("-wid", "--wxid_path", type=str, sb_decrypt.add_argument("-wid", "--wx_path", type=str,
help="(可选)微信文件夹的路径(用于显示图片)", required=False, help="(可选)微信文件夹的路径(用于显示图片)", required=False,
metavar="") metavar="")
sb_decrypt.add_argument("-myid", "--my_wxid", type=str, help="(可选)微信账号(本人微信id)", required=False, sb_decrypt.add_argument("-myid", "--my_wxid", type=str, help="(可选)微信账号(本人微信id)", required=False,
@ -237,7 +237,8 @@ class MainShowChatRecords():
g.msg_path = args.msg_path g.msg_path = args.msg_path
g.micro_path = args.micro_path g.micro_path = args.micro_path
g.media_path = args.media_path g.media_path = args.media_path
g.wxid_path = args.wxid_path g.wx_path = args.wx_path
# g.key = args.key
g.my_wxid = args.my_wxid g.my_wxid = args.my_wxid
g.tmp_path = os.path.join(os.getcwd(), "wxdump_tmp") # 临时文件夹,用于存放图片等 g.tmp_path = os.path.join(os.getcwd(), "wxdump_tmp") # 临时文件夹,用于存放图片等
g.user_list = [] g.user_list = []
@ -448,7 +449,7 @@ class MainAll():
args.msg_path = merge_save_path args.msg_path = merge_save_path
args.micro_path = merge_save_path args.micro_path = merge_save_path
args.media_path = merge_save_path args.media_path = merge_save_path
args.wxid_path = filePath args.wx_path = filePath
args.my_wxid = wxid args.my_wxid = wxid
args.online = online args.online = online
MainShowChatRecords().run(args) MainShowChatRecords().run(args)
@ -492,7 +493,7 @@ class MainUi():
def before_request(): def before_request():
g.msg_path = "" g.msg_path = ""
g.media_path = "" g.media_path = ""
g.wxid_path = "" g.wx_path = ""
g.my_wxid = "" g.my_wxid = ""
g.tmp_path = os.path.join(os.getcwd(), "wxdump_tmp") # 临时文件夹,用于存放图片等 g.tmp_path = os.path.join(os.getcwd(), "wxdump_tmp") # 临时文件夹,用于存放图片等
g.user_list = [] g.user_list = []
@ -601,11 +602,16 @@ def console_run():
sb_all = main_all.init_parses(subparsers) sb_all = main_all.init_parses(subparsers)
modes[main_all.mode] = main_all modes[main_all.mode] = main_all
# 添加 'ui' 子命令解析器
main_ui = MainUi()
sb_ui = main_ui.init_parses(subparsers)
modes[main_ui.mode] = main_ui
# 检查是否需要显示帮助信息 # 检查是否需要显示帮助信息
if len(sys.argv) == 1: if len(sys.argv) == 1:
sys.argv.append('all') sys.argv.append('all')
elif len(sys.argv) == 2 and sys.argv[1] in modes.keys() and sys.argv[1] not in [main_all.mode, main_wx_info.mode, elif len(sys.argv) == 2 and sys.argv[1] in modes.keys() and sys.argv[1] not in [main_all.mode, main_wx_info.mode,
main_wx_db_path.mode]: main_wx_db_path.mode, main_ui.mode]:
sys.argv.append('-h') sys.argv.append('-h')
args = parser.parse_args() # 解析命令行参数 args = parser.parse_args() # 解析命令行参数

View File

@ -23,7 +23,7 @@ def before_request():
g.msg_path = path g.msg_path = path
g.micro_path = path g.micro_path = path
g.media_path = path g.media_path = path
g.wxid_path = r"*****" g.wx_path = r"*****"
g.my_wxid = "******" g.my_wxid = "******"
g.tmp_path = "dist" # 临时文件夹,用于存放图片等 g.tmp_path = "dist" # 临时文件夹,用于存放图片等
g.user_list = [] g.user_list = []