From 82c6bb5e73a2a50328c43d618a833d246f0a662e Mon Sep 17 00:00:00 2001 From: xaoyaoo Date: Fri, 19 Apr 2024 12:20:32 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8A=A0=E5=BF=AB=E6=95=B0=E6=8D=AE=E5=BA=93?= =?UTF-8?q?=E8=AE=BF=E9=97=AE=E9=80=9F=E5=BA=A6=EF=BC=8C=E5=90=8C=E6=97=B6?= =?UTF-8?q?=E7=8B=AC=E7=AB=8B=E5=A4=84=E7=90=86=E6=AF=8F=E4=B8=80=E4=B8=AA?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E5=BA=93?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pywxdump/dbpreprocess/__init__.py | 65 ++++++++++++++++++++++++++++ pywxdump/wx_info/tools/realTime.exe | Bin 2166272 -> 2166272 bytes 2 files changed, 65 insertions(+) diff --git a/pywxdump/dbpreprocess/__init__.py b/pywxdump/dbpreprocess/__init__.py index 8a88f45..708c7f0 100644 --- a/pywxdump/dbpreprocess/__init__.py +++ b/pywxdump/dbpreprocess/__init__.py @@ -5,9 +5,74 @@ # Author: xaoyaoo # Date: 2024/04/15 # ------------------------------------------------------------------------------- +import pandas as pd + from .parsingMSG import ParsingMSG from .parsingMicroMsg import ParsingMicroMsg from .parsingMediaMSG import ParsingMediaMSG from .parsingOpenIMContact import ParsingOpenIMContact +def get_user_list(MicroMsg_db_path, OpenIMContact_db_path=None, word=None): + """ + 获取联系人列表 + :param MicroMsg_db_path: MicroMsg.db 文件路径 + :return: 联系人列表 + """ + # 连接 MicroMsg.db 数据库,并执行查询 + if not MicroMsg_db_path: + return [] + parsing_micromsg = ParsingMicroMsg(MicroMsg_db_path) + users = parsing_micromsg.user_list(word=word) + # 如果有 OpenIMContact.db 文件,获取 OpenIMContact.db 中的联系人信息 + if OpenIMContact_db_path: + parsing_openimcontact = ParsingOpenIMContact(OpenIMContact_db_path) + users += parsing_openimcontact.user_list(word=word) + # 去重 + users = [dict(t) for t in {tuple(d.items()) for d in users}] + return users + + +def get_recent_user_list(MicroMsg_db_path, OpenIMContact_db_path=None,limit=200): + """ + 获取联系人列表 + :param MicroMsg_db_path: MicroMsg.db 文件路径 + :return: 联系人列表 + """ + # 连接 MicroMsg.db 数据库,并执行查询 + if not MicroMsg_db_path: + return [] + parsing_micromsg = ParsingMicroMsg(MicroMsg_db_path) + recent_users = parsing_micromsg.recent_chat_wxid() # [{"wxid": username, "LastReadedCreateTime": LastReadedCreateTime, "LastReadedSvrId": LastReadedSvrId},] + recent_users = pd.DataFrame(recent_users) + recent_users = recent_users.sort_values(by="LastReadedCreateTime", ascending=False) + recent_users = recent_users.drop_duplicates(subset=["wxid"], keep="first").head(limit) + + users = get_user_list(MicroMsg_db_path, OpenIMContact_db_path) + users = pd.DataFrame(users) + + users = pd.merge(users, recent_users, on="wxid", how="right") + # users = users.drop_duplicates(subset=["wxid"], keep="last") # 保留最新的 + users = users.sort_values(by="LastReadedCreateTime", ascending=False) # 按照最新的排序 + users = users.drop_duplicates(subset=["wxid"], keep="first") # 保留最新的 + users = users.fillna("") + users = users.to_dict(orient="records") + return users + + +def wxid2userinfo(MicroMsg_db_path, OpenIMContact_db_path, wxid): + """ + 获取联系人信息 + :param MicroMsg_db_path: MicroMsg.db 文件路径 + :param wxid: 微信id + :return: 联系人信息 {wxid: {wxid: wxid, nickname: nickname, remark: remark, account: account, describe: describe, headImgUrl: headImgUrl}} + """ + # 连接 MicroMsg.db 数据库,并执行查询 + parsing_micromsg = ParsingMicroMsg(MicroMsg_db_path) + users = parsing_micromsg.wxid2userinfo(wxid) + # {'wxid_uw8ruinee7zq12': {'wxid': 'wxid_uw8ruinee7zq12', 'nickname': '2021年', 'remark': '于浩', 'account': 'yh13327404424', 'describe': '', 'headImgUrl': 'https://wx.qlogo.cn/mmhead/ver_1/LLibM2qUys7nBt9Hl8uuTQkn9ILFicoImlt2616ZNGoIvRbA8VmJ0Vibhd3V96JFfxQ25Tj1nRWTsXYDdH3z2FAQkQDXSnjS5PBuSraey4ZnoooOkEu2e3DjXbJaJJXKUib1/0'}} + # 如果有 OpenIMContact.db 文件,获取 OpenIMContact.db 中的联系人信息 + if OpenIMContact_db_path: + parsing_openimcontact = ParsingOpenIMContact(OpenIMContact_db_path) + users.update(parsing_openimcontact.wxid2userinfo(wxid)) + return users diff --git a/pywxdump/wx_info/tools/realTime.exe b/pywxdump/wx_info/tools/realTime.exe index 499b2561ad0957e4acf5df6d46e72f03c2ae018a..93d532d9591caaeeb72b75e58c26876b93a8190d 100644 GIT binary patch delta 8069 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 delta 7956 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