改善python3.8以下版本的容错
This commit is contained in:
parent
a1d72a0595
commit
3d7a03d4e4
@ -20,9 +20,9 @@ import time
|
|||||||
from functools import wraps
|
from functools import wraps
|
||||||
|
|
||||||
from .utils import get_md5, detach_databases, attach_databases, execute_sql
|
from .utils import get_md5, detach_databases, attach_databases, execute_sql
|
||||||
from .db_parsing import read_img_dat, decompress_CompressContent, read_audio, parse_xml_string
|
# from .db_parsing import read_img_dat, decompress_CompressContent, read_audio, parse_xml_string
|
||||||
|
|
||||||
from flask import Flask, request, render_template, g, Blueprint
|
# from flask import Flask, request, render_template, g, Blueprint
|
||||||
|
|
||||||
|
|
||||||
def get_contact_list(MicroMsg_db_path):
|
def get_contact_list(MicroMsg_db_path):
|
||||||
@ -35,14 +35,19 @@ def get_contact_list(MicroMsg_db_path):
|
|||||||
# 连接 MicroMsg.db 数据库,并执行查询
|
# 连接 MicroMsg.db 数据库,并执行查询
|
||||||
db = sqlite3.connect(MicroMsg_db_path)
|
db = sqlite3.connect(MicroMsg_db_path)
|
||||||
cursor = db.cursor()
|
cursor = db.cursor()
|
||||||
cursor.execute(
|
sql = ("SELECT A.UserName, A.NickName, A.Remark,A.Alias,A.Reserved6,B.bigHeadImgUrl "
|
||||||
"SELECT A.UserName, A.NickName, A.Remark,B.bigHeadImgUrl FROM Contact A,ContactHeadImgUrl B ORDER BY NickName ASC")
|
"FROM Contact A,ContactHeadImgUrl B "
|
||||||
|
"where UserName==usrName "
|
||||||
|
"ORDER BY NickName ASC;")
|
||||||
|
cursor.execute(sql)
|
||||||
result = cursor.fetchall()
|
result = cursor.fetchall()
|
||||||
|
|
||||||
for row in result:
|
for row in result:
|
||||||
# 获取用户名、昵称、备注和聊天记录数量
|
# 获取用户名、昵称、备注和聊天记录数量
|
||||||
username, nickname, remark, headImgUrl = row
|
username, nickname, remark, Alias, describe, headImgUrl = row
|
||||||
users.append({"username": username, "nickname": nickname, "remark": remark, "headImgUrl": headImgUrl})
|
users.append(
|
||||||
|
{"username": username, "nickname": nickname, "remark": remark, "account": Alias, "describe": describe,
|
||||||
|
"headImgUrl": headImgUrl})
|
||||||
cursor.close()
|
cursor.close()
|
||||||
db.close()
|
db.close()
|
||||||
return users
|
return users
|
||||||
@ -264,61 +269,7 @@ def export(username, outpath, MSG_ALL_db_path, MicroMsg_db_path, MediaMSG_all_db
|
|||||||
return export_html(user, outpath, MSG_ALL_db_path, MediaMSG_all_db_path, FileStorage_path)
|
return export_html(user, outpath, MSG_ALL_db_path, MediaMSG_all_db_path, FileStorage_path)
|
||||||
|
|
||||||
|
|
||||||
app_show_chat = Blueprint('show_chat_main', __name__, template_folder='templates')
|
|
||||||
app_show_chat.debug = False
|
|
||||||
|
|
||||||
|
|
||||||
# 主页 - 显示用户列表
|
|
||||||
@app_show_chat.route('/')
|
|
||||||
def index():
|
|
||||||
g.USER_LIST = get_user_list(g.MSG_ALL_db_path, g.MicroMsg_db_path)
|
|
||||||
return render_template("index.html", users=g.USER_LIST)
|
|
||||||
|
|
||||||
|
|
||||||
# 获取聊天记录
|
|
||||||
@app_show_chat.route('/get_chat_data', methods=["GET", 'POST'])
|
|
||||||
def get_chat_data():
|
|
||||||
username = request.args.get("username", "")
|
|
||||||
user = list(filter(lambda x: x["username"] == username, g.USER_LIST))
|
|
||||||
|
|
||||||
if username and len(user) > 0:
|
|
||||||
user = user[0]
|
|
||||||
|
|
||||||
limit = int(request.args.get("limit", 100)) # 每页显示的条数
|
|
||||||
page = int(request.args.get("page", user.get("chat_count", limit) / limit)) # 当前页数
|
|
||||||
|
|
||||||
start_index = (page - 1) * limit
|
|
||||||
page_size = limit
|
|
||||||
|
|
||||||
data = load_chat_records(username, start_index, page_size, user, g.MSG_ALL_db_path, g.MediaMSG_all_db_path,
|
|
||||||
g.FileStorage_path)
|
|
||||||
return render_template("chat.html", msgs=data)
|
|
||||||
else:
|
|
||||||
return "error"
|
|
||||||
|
|
||||||
|
|
||||||
# 聊天记录导出为html
|
|
||||||
@app_show_chat.route('/export_chat_data', methods=["GET", 'POST'])
|
|
||||||
def get_export():
|
|
||||||
username = request.args.get("username", "")
|
|
||||||
|
|
||||||
user = list(filter(lambda x: x["username"] == username, g.USER_LIST))
|
|
||||||
|
|
||||||
if username and len(user) > 0:
|
|
||||||
user = user[0]
|
|
||||||
n = f"{user.get('username', '')}_{user.get('nickname', '')}_{user.get('remark', '')}"
|
|
||||||
outpath = os.path.join(os.getcwd(), "export" + os.sep + n)
|
|
||||||
if not os.path.exists(outpath):
|
|
||||||
os.makedirs(outpath)
|
|
||||||
|
|
||||||
ret = export_html(user, outpath, g.MSG_ALL_db_path, g.MediaMSG_all_db_path, g.FileStorage_path, page_size=200)
|
|
||||||
if ret[0]:
|
|
||||||
return ret[1]
|
|
||||||
else:
|
|
||||||
return ret[1]
|
|
||||||
else:
|
|
||||||
return "error"
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
pass
|
msg_all = r"D:\_code\py_code\test\a2023\b0821wxdb\merge_wfwx_db\kkWxMsg\MSG_all.db"
|
||||||
|
a = get_contact_list(msg_all)
|
||||||
|
print(a)
|
||||||
|
@ -56,12 +56,29 @@ def execute_sql(connection, sql, params=None):
|
|||||||
- sql:要执行的SQL语句
|
- sql:要执行的SQL语句
|
||||||
- params:SQL语句中的参数
|
- params:SQL语句中的参数
|
||||||
"""
|
"""
|
||||||
cursor = connection.cursor()
|
try:
|
||||||
if params:
|
# connection.text_factory = bytes
|
||||||
cursor.execute(sql, params)
|
cursor = connection.cursor()
|
||||||
else:
|
if params:
|
||||||
cursor.execute(sql)
|
cursor.execute(sql, params)
|
||||||
return cursor.fetchall()
|
else:
|
||||||
|
cursor.execute(sql)
|
||||||
|
return cursor.fetchall()
|
||||||
|
except Exception as e:
|
||||||
|
try:
|
||||||
|
connection.text_factory = bytes
|
||||||
|
cursor = connection.cursor()
|
||||||
|
if params:
|
||||||
|
cursor.execute(sql, params)
|
||||||
|
else:
|
||||||
|
cursor.execute(sql)
|
||||||
|
rdata = cursor.fetchall()
|
||||||
|
connection.text_factory = str
|
||||||
|
return rdata
|
||||||
|
except Exception as e:
|
||||||
|
print(f"**********\nSQL: {sql}\nparams: {params}\n{e}\n**********")
|
||||||
|
return None
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
pass
|
pass
|
||||||
|
@ -6,7 +6,6 @@
|
|||||||
# Date: 2023/10/14
|
# Date: 2023/10/14
|
||||||
# -------------------------------------------------------------------------------
|
# -------------------------------------------------------------------------------
|
||||||
import argparse
|
import argparse
|
||||||
import importlib.metadata
|
|
||||||
import os
|
import os
|
||||||
import sys
|
import sys
|
||||||
|
|
||||||
@ -353,8 +352,11 @@ class MainAll():
|
|||||||
args.filestorage_path = FileStorage_path
|
args.filestorage_path = FileStorage_path
|
||||||
MainShowChatRecords().run(args)
|
MainShowChatRecords().run(args)
|
||||||
|
|
||||||
|
try:
|
||||||
PYWXDUMP_VERSION = importlib.metadata.version('pywxdump')
|
import importlib.metadata as importlib
|
||||||
|
except ImportError:
|
||||||
|
import importlib_metadata as importlib
|
||||||
|
PYWXDUMP_VERSION = importlib.version('pywxdump')
|
||||||
|
|
||||||
|
|
||||||
class CustomArgumentParser(argparse.ArgumentParser):
|
class CustomArgumentParser(argparse.ArgumentParser):
|
||||||
@ -362,7 +364,7 @@ class CustomArgumentParser(argparse.ArgumentParser):
|
|||||||
# 首先显示软件简介
|
# 首先显示软件简介
|
||||||
# 定义软件简介文本并进行格式化
|
# 定义软件简介文本并进行格式化
|
||||||
line_len = 70
|
line_len = 70
|
||||||
PYWXDUMP_VERSION = importlib.metadata.version('pywxdump')
|
PYWXDUMP_VERSION = importlib.version('pywxdump')
|
||||||
wxdump_line = '\n'.join([f'\033[36m{line:^{line_len}}\033[0m' for line in wxdump_ascii.split('\n') if line])
|
wxdump_line = '\n'.join([f'\033[36m{line:^{line_len}}\033[0m' for line in wxdump_ascii.split('\n') if line])
|
||||||
first_line = f'\033[36m{" PyWxDump v" + PYWXDUMP_VERSION + " ":=^{line_len}}\033[0m'
|
first_line = f'\033[36m{" PyWxDump v" + PYWXDUMP_VERSION + " ":=^{line_len}}\033[0m'
|
||||||
brief = 'PyWxDump功能:获取账号信息、解密数据库、查看聊天记录、导出聊天记录为html等'
|
brief = 'PyWxDump功能:获取账号信息、解密数据库、查看聊天记录、导出聊天记录为html等'
|
||||||
@ -379,7 +381,7 @@ class CustomArgumentParser(argparse.ArgumentParser):
|
|||||||
def console_run():
|
def console_run():
|
||||||
# 创建命令行参数解析器
|
# 创建命令行参数解析器
|
||||||
parser = CustomArgumentParser(formatter_class=argparse.RawTextHelpFormatter)
|
parser = CustomArgumentParser(formatter_class=argparse.RawTextHelpFormatter)
|
||||||
PYWXDUMP_VERSION = importlib.metadata.version('pywxdump')
|
PYWXDUMP_VERSION = importlib.version('pywxdump')
|
||||||
parser.add_argument('-V', '--version', action='version', version=f"PyWxDump v{PYWXDUMP_VERSION}")
|
parser.add_argument('-V', '--version', action='version', version=f"PyWxDump v{PYWXDUMP_VERSION}")
|
||||||
|
|
||||||
# 添加子命令解析器
|
# 添加子命令解析器
|
||||||
|
Loading…
Reference in New Issue
Block a user