From 95d4d58e82e61e42262c2bab17b32fc929b40610 Mon Sep 17 00:00:00 2001 From: xaoyaoo Date: Wed, 3 Jan 2024 21:34:34 +0800 Subject: [PATCH] =?UTF-8?q?UI=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pywxdump/analyzer/export_chat.py | 3 + pywxdump/api/14782369 | 0 pywxdump/api/api.py | 156 +++++++++++++++++++++++++++++++ pywxdump/api/args.micro_path | 0 pywxdump/api/chat_api.py | 36 ------- 5 files changed, 159 insertions(+), 36 deletions(-) create mode 100644 pywxdump/api/14782369 create mode 100644 pywxdump/api/api.py create mode 100644 pywxdump/api/args.micro_path delete mode 100644 pywxdump/api/chat_api.py diff --git a/pywxdump/analyzer/export_chat.py b/pywxdump/analyzer/export_chat.py index 01dcd52..a63da4b 100644 --- a/pywxdump/analyzer/export_chat.py +++ b/pywxdump/analyzer/export_chat.py @@ -83,6 +83,9 @@ def get_msg_list(MSG_db_path, selected_talker="", start_index=0, page_size=500): """ 获取聊天记录列表 :param MSG_db_path: MSG.db 文件路径 + :param selected_talker: 选中的聊天对象 wxid + :param start_index: 开始索引 + :param page_size: 每页数量 :return: 聊天记录列表 """ diff --git a/pywxdump/api/14782369 b/pywxdump/api/14782369 new file mode 100644 index 0000000..e69de29 diff --git a/pywxdump/api/api.py b/pywxdump/api/api.py new file mode 100644 index 0000000..aff1e94 --- /dev/null +++ b/pywxdump/api/api.py @@ -0,0 +1,156 @@ +# -*- coding: utf-8 -*-# +# ------------------------------------------------------------------------------- +# Name: chat_api.py +# Description: +# Author: xaoyaoo +# Date: 2024/01/02 +# ------------------------------------------------------------------------------- +from flask import Flask, request, render_template, g, Blueprint +from pywxdump import analyzer +from pywxdump.api.rjson import ReJson, RqJson +from flask_cors import CORS + +# from flask_cors import CORS + +app = Flask(__name__, static_folder='../ui/web/dist', static_url_path='/') + +CORS(app, resources={r"/*": {"origins": "*"}}, supports_credentials=True) # 允许所有域名跨域 + + +@app.route('/api/init', methods=["GET", 'POST']) +def init(): + """ + 初始化 + :return: + """ + rdata = { + "msg_path": "", + "micro_path": "", + "media_path": "", + "filestorage_path": "", + } + return ReJson(0, rdata) + + +@app.route('/api/contact_list', methods=["GET", 'POST']) +def contact_list(): + """ + 获取联系人列表 + :return: + """ + try: + # 获取联系人列表 + # 从header中读取micro_path + micro_path = request.headers.get("micro_path") + if not micro_path: + micro_path = g.micro_path + start = request.json.get("start") + limit = request.json.get("limit") + + contact_list = analyzer.get_contact_list(micro_path) + g.user_list = contact_list + if limit: + contact_list = contact_list[int(start):int(start) + int(limit)] + return ReJson(0, contact_list) + except Exception as e: + return ReJson(9999, msg=str(e)) + + +@app.route('/api/chat_count', methods=["GET", 'POST']) +def chat_count(): + """ + 获取联系人列表 + :return: + """ + try: + # 获取联系人列表 + # 从header中读取micro_path + msg_path = request.headers.get("msg_path") + if not msg_path: + msg_path = g.msg_path + contact_list = analyzer.get_chat_count(msg_path) + return ReJson(0, contact_list) + except Exception as e: + return ReJson(9999, msg=str(e)) + + +@app.route('/api/contact_count_list', methods=["GET", 'POST']) +def contact_count_list(): + """ + 获取联系人列表 + :return: + """ + try: + # 获取联系人列表 + # 从header中读取micro_path + msg_path = request.headers.get("msg_path") + micro_path = request.headers.get("micro_path") + if not msg_path: + msg_path = g.msg_path + if not micro_path: + micro_path = g.micro_path + start = request.json.get("start") + limit = request.json.get("limit") + word = request.json.get("word", "") + + contact_list = analyzer.get_contact_list(micro_path) + chat_count = analyzer.get_chat_count(msg_path) + for contact in contact_list: + contact["chat_count"] = chat_count.get(contact["username"], 0) + # 降序 + contact_list = sorted(contact_list, key=lambda x: x["chat_count"], reverse=True) + + g.user_list = contact_list + + if word and word != "" and word != "undefined" and word != "null": + contact_list = [contact for contact in contact_list if + word in contact["account"] or word in contact["describe"] or word in contact[ + "nickname"] or word in contact["remark"] or word in contact["username"]] + if limit: + contact_list = contact_list[int(start):int(start) + int(limit)] + return ReJson(0, contact_list) + except Exception as e: + return ReJson(9999, msg=str(e)) + + +@app.route('/api/msgs', methods=["GET", 'POST']) +def get_msgs(): + try: + msg_path = request.headers.get("msg_path") + micro_path = request.headers.get("micro_path") + if not msg_path: + msg_path = g.msg_path + if not micro_path: + micro_path = g.micro_path + start = request.json.get("start") + limit = request.json.get("limit") + wxid = request.json.get("wxid") + msg_list = analyzer.get_msg_list(msg_path, wxid, start_index=start, page_size=limit) + # row_data = {"MsgSvrID": MsgSvrID, "type_name": type_name, "is_sender": IsSender, "talker": talker, + # "room_name": StrTalker, "content": content, "CreateTime": CreateTime} + + userlist = {} + if wxid.endswith("@chatroom"): + # 群聊 + talkers = [msg["talker"] for msg in msg_list] + talkers = list(set(talkers)) + for user in g.user_list: + if user["username"] in talkers: + userlist[user["username"]] = user + return ReJson(0, {"msg_list": msg_list, "user_list": userlist}) + + except Exception as e: + return ReJson(9999, msg=str(e)) + + +if __name__ == '__main__': + @app.before_request + def before_request(): + path = r"D:\_code\py_code\test\a2023\b0821wxdb\merge_wfwx_db\kkWxMsg\MSG_all.db" + g.msg_path = path + g.micro_path = path + g.media_path = path + g.filestorage_path = "args.filestorage_path" + + + app.run(host='0.0.0.0', port=5000, debug=True) diff --git a/pywxdump/api/args.micro_path b/pywxdump/api/args.micro_path new file mode 100644 index 0000000..e69de29 diff --git a/pywxdump/api/chat_api.py b/pywxdump/api/chat_api.py deleted file mode 100644 index 626f6f2..0000000 --- a/pywxdump/api/chat_api.py +++ /dev/null @@ -1,36 +0,0 @@ -# -*- coding: utf-8 -*-# -# ------------------------------------------------------------------------------- -# Name: chat_api.py -# Description: -# Author: xaoyaoo -# Date: 2024/01/02 -# ------------------------------------------------------------------------------- -from flask import Flask, request, render_template, g, Blueprint -from pywxdump import analyzer -from pywxdump.api.rjson import ReJson, RqJson -# from flask_cors import CORS - -app = Flask(__name__ , static_folder='../ui/web/dist', static_url_path='/') - - -@app.route('/api/contact_list', methods=["GET", 'POST']) -def contact_list(): - """ - 获取联系人列表 - :return: - """ - if request.method == "POST": - # 从header中读取micro_path - micro_path = request.headers.get("micro_path") - try: - # 获取联系人列表 - contact_list = analyzer.get_contact_list(micro_path) - return ReJson(0, contact_list) - except Exception as e: - return ReJson(9999, msg=str(e)) - else: - return ReJson(9999) - - -if __name__ == '__main__': - app.run(host='0.0.0.0', port=5000, debug=True)