diff --git a/pywxdump/analyzer/__init__.py b/pywxdump/analyzer/__init__.py index b323419..11db128 100644 --- a/pywxdump/analyzer/__init__.py +++ b/pywxdump/analyzer/__init__.py @@ -8,3 +8,4 @@ from .db_parsing import read_img_dat, read_emoji, decompress_CompressContent, read_audio_buf, read_audio, \ parse_xml_string, read_BytesExtra from .export_chat import export_csv, get_contact_list, get_chatroom_list, get_msg_list, get_chat_count +from .utils import get_type_name, get_name_typeid diff --git a/pywxdump/analyzer/utils.py b/pywxdump/analyzer/utils.py index 120877d..09073c2 100644 --- a/pywxdump/analyzer/utils.py +++ b/pywxdump/analyzer/utils.py @@ -73,7 +73,7 @@ def get_type_name(type_id: tuple): (49, 1): "类似文字消息而不一样的消息", (49, 5): "卡片式链接", (49, 6): "文件", - (49, 8): "用户上传的 GIF 表情", + (49, 8): "用户上传的GIF表情", (49, 19): "合并转发的聊天记录", (49, 33): "分享的小程序", (49, 36): "分享的小程序", @@ -96,6 +96,46 @@ def get_type_name(type_id: tuple): return "未知" +def get_name_typeid(type_name: str): + """ + 获取消息类型名称 + :param type_id: 消息类型ID 元组 eg: (1, 0) + :return: + """ + type_name_dict = { + (1, 0): "文本", + (3, 0): "图片", + (34, 0): "语音", + (43, 0): "视频", + (47, 0): "动画表情", + + (49, 0): "文件", + (49, 1): "类似文字消息而不一样的消息", + (49, 5): "卡片式链接", + (49, 6): "文件", + (49, 8): "用户上传的GIF表情", + (49, 19): "合并转发的聊天记录", + (49, 33): "分享的小程序", + (49, 36): "分享的小程序", + (49, 57): "带有引用的文本消息", + (49, 63): "视频号直播或直播回放等", + (49, 87): "群公告", + (49, 88): "视频号直播或直播回放等", + (49, 2000): "转账消息", + (49, 2003): "赠送红包封面", + + (50, 0): "语音通话", + (10000, 0): "系统通知", + (10000, 4): "拍一拍", + (10000, 8000): "系统通知" + } + type_tup = [] + for k, v in type_name_dict.items(): + if v == type_name: + type_tup.append(k) + return type_tup + + def get_md5(data): """ 获取数据的 MD5 值 diff --git a/pywxdump/api/api.py b/pywxdump/api/api.py index 75af879..0bde353 100644 --- a/pywxdump/api/api.py +++ b/pywxdump/api/api.py @@ -193,6 +193,30 @@ def get_audio(savePath): return send_file(savePath) +# 导出聊天记录 +@api.route('/api/export', methods=["GET", 'POST']) +def export(): + """ + 导出聊天记录 + :return: + """ + export_type = request.json.get("export_type") + start_time = request.json.get("start_time") + end_time = request.json.get("end_time") + chat_type = request.json.get("chat_type") + username = request.json.get("username") + if not export_type or not start_time or not end_time or not chat_type or not username: + return ReJson(1002) + chat_type_tups = [] + for t in chat_type: + tup = analyzer.get_name_typeid(t) + if tup: + chat_type_tups += tup + if not chat_type_tups: + return ReJson(1002) + return ReJson(0, "") + + # 这部分为专业工具的api @api.route('/api/wxinfo', methods=["GET", 'POST']) def get_wxinfo():