mirror of
https://github.com/LC044/WeChatMsg
synced 2025-02-23 03:22:17 +08:00
导出所有数据库的聊天记录
This commit is contained in:
parent
38080499cd
commit
9c7cb674f8
@ -4,17 +4,11 @@
|
|||||||
<option name="autoReloadType" value="SELECTIVE" />
|
<option name="autoReloadType" value="SELECTIVE" />
|
||||||
</component>
|
</component>
|
||||||
<component name="ChangeListManager">
|
<component name="ChangeListManager">
|
||||||
<list default="true" id="84e65474-7da9-466d-baf3-cc88dde3ffdd" name="变更" comment="修复情感分析数值显示过长的bug">
|
<list default="true" id="84e65474-7da9-466d-baf3-cc88dde3ffdd" name="变更" comment="新增聊天记录导出csv格式">
|
||||||
<change afterPath="$PROJECT_DIR$/app/data/icons/search.svg" afterDir="false" />
|
|
||||||
<change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
|
<change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
|
||||||
|
<change beforePath="$PROJECT_DIR$/app/DataBase/micro_msg.py" beforeDir="false" afterPath="$PROJECT_DIR$/app/DataBase/micro_msg.py" afterDir="false" />
|
||||||
<change beforePath="$PROJECT_DIR$/app/DataBase/msg.py" beforeDir="false" afterPath="$PROJECT_DIR$/app/DataBase/msg.py" afterDir="false" />
|
<change beforePath="$PROJECT_DIR$/app/DataBase/msg.py" beforeDir="false" afterPath="$PROJECT_DIR$/app/DataBase/msg.py" afterDir="false" />
|
||||||
<change beforePath="$PROJECT_DIR$/app/DataBase/output_pc.py" beforeDir="false" afterPath="$PROJECT_DIR$/app/DataBase/output_pc.py" afterDir="false" />
|
<change beforePath="$PROJECT_DIR$/app/ui_pc/mainview.py" beforeDir="false" afterPath="$PROJECT_DIR$/app/ui_pc/mainview.py" afterDir="false" />
|
||||||
<change beforePath="$PROJECT_DIR$/app/components/bubble_message.py" beforeDir="false" afterPath="$PROJECT_DIR$/app/components/bubble_message.py" afterDir="false" />
|
|
||||||
<change beforePath="$PROJECT_DIR$/app/ui_pc/Icon.py" beforeDir="false" afterPath="$PROJECT_DIR$/app/ui_pc/Icon.py" afterDir="false" />
|
|
||||||
<change beforePath="$PROJECT_DIR$/app/ui_pc/contact/contactInfo.py" beforeDir="false" afterPath="$PROJECT_DIR$/app/ui_pc/contact/contactInfo.py" afterDir="false" />
|
|
||||||
<change beforePath="$PROJECT_DIR$/app/ui_pc/contact/contactUi.py" beforeDir="false" afterPath="$PROJECT_DIR$/app/ui_pc/contact/contactUi.py" afterDir="false" />
|
|
||||||
<change beforePath="$PROJECT_DIR$/app/ui_pc/contact/contactUi.ui" beforeDir="false" afterPath="$PROJECT_DIR$/app/ui_pc/contact/contactUi.ui" afterDir="false" />
|
|
||||||
<change beforePath="$PROJECT_DIR$/app/ui_pc/contact/contact_window.py" beforeDir="false" afterPath="$PROJECT_DIR$/app/ui_pc/contact/contact_window.py" afterDir="false" />
|
|
||||||
</list>
|
</list>
|
||||||
<option name="SHOW_DIALOG" value="false" />
|
<option name="SHOW_DIALOG" value="false" />
|
||||||
<option name="HIGHLIGHT_CONFLICTS" value="true" />
|
<option name="HIGHLIGHT_CONFLICTS" value="true" />
|
||||||
@ -111,27 +105,6 @@
|
|||||||
</key>
|
</key>
|
||||||
</component>
|
</component>
|
||||||
<component name="RunManager" selected="Python.decrypt_window">
|
<component name="RunManager" selected="Python.decrypt_window">
|
||||||
<configuration name="CAvatar" type="PythonConfigurationType" factoryName="Python" temporary="true" nameIsGenerated="true">
|
|
||||||
<module name="WeChatMsg" />
|
|
||||||
<option name="INTERPRETER_OPTIONS" value="" />
|
|
||||||
<option name="PARENT_ENVS" value="true" />
|
|
||||||
<envs>
|
|
||||||
<env name="PYTHONUNBUFFERED" value="1" />
|
|
||||||
</envs>
|
|
||||||
<option name="SDK_HOME" value="" />
|
|
||||||
<option name="WORKING_DIRECTORY" value="$PROJECT_DIR$/app/components" />
|
|
||||||
<option name="IS_MODULE_SDK" value="true" />
|
|
||||||
<option name="ADD_CONTENT_ROOTS" value="true" />
|
|
||||||
<option name="ADD_SOURCE_ROOTS" value="true" />
|
|
||||||
<option name="SCRIPT_NAME" value="$PROJECT_DIR$/app/components/CAvatar.py" />
|
|
||||||
<option name="PARAMETERS" value="" />
|
|
||||||
<option name="SHOW_COMMAND_LINE" value="false" />
|
|
||||||
<option name="EMULATE_TERMINAL" value="false" />
|
|
||||||
<option name="MODULE_MODE" value="false" />
|
|
||||||
<option name="REDIRECT_INPUT" value="false" />
|
|
||||||
<option name="INPUT_FILE" value="" />
|
|
||||||
<method v="2" />
|
|
||||||
</configuration>
|
|
||||||
<configuration name="decrypt_window" type="PythonConfigurationType" factoryName="Python" temporary="true" nameIsGenerated="true">
|
<configuration name="decrypt_window" type="PythonConfigurationType" factoryName="Python" temporary="true" nameIsGenerated="true">
|
||||||
<module name="WeChatMsg" />
|
<module name="WeChatMsg" />
|
||||||
<option name="INTERPRETER_OPTIONS" value="" />
|
<option name="INTERPRETER_OPTIONS" value="" />
|
||||||
@ -237,13 +210,34 @@
|
|||||||
<option name="INPUT_FILE" value="" />
|
<option name="INPUT_FILE" value="" />
|
||||||
<method v="2" />
|
<method v="2" />
|
||||||
</configuration>
|
</configuration>
|
||||||
|
<configuration name="test" type="PythonConfigurationType" factoryName="Python" temporary="true" nameIsGenerated="true">
|
||||||
|
<module name="WeChatMsg" />
|
||||||
|
<option name="INTERPRETER_OPTIONS" value="" />
|
||||||
|
<option name="PARENT_ENVS" value="true" />
|
||||||
|
<envs>
|
||||||
|
<env name="PYTHONUNBUFFERED" value="1" />
|
||||||
|
</envs>
|
||||||
|
<option name="SDK_HOME" value="" />
|
||||||
|
<option name="WORKING_DIRECTORY" value="$PROJECT_DIR$" />
|
||||||
|
<option name="IS_MODULE_SDK" value="true" />
|
||||||
|
<option name="ADD_CONTENT_ROOTS" value="true" />
|
||||||
|
<option name="ADD_SOURCE_ROOTS" value="true" />
|
||||||
|
<option name="SCRIPT_NAME" value="$PROJECT_DIR$/test.py" />
|
||||||
|
<option name="PARAMETERS" value="" />
|
||||||
|
<option name="SHOW_COMMAND_LINE" value="false" />
|
||||||
|
<option name="EMULATE_TERMINAL" value="false" />
|
||||||
|
<option name="MODULE_MODE" value="false" />
|
||||||
|
<option name="REDIRECT_INPUT" value="false" />
|
||||||
|
<option name="INPUT_FILE" value="" />
|
||||||
|
<method v="2" />
|
||||||
|
</configuration>
|
||||||
<recent_temporary>
|
<recent_temporary>
|
||||||
<list>
|
<list>
|
||||||
<item itemvalue="Python.decrypt_window" />
|
<item itemvalue="Python.decrypt_window" />
|
||||||
<item itemvalue="Python.msg" />
|
<item itemvalue="Python.msg" />
|
||||||
|
<item itemvalue="Python.test" />
|
||||||
<item itemvalue="Python.main" />
|
<item itemvalue="Python.main" />
|
||||||
<item itemvalue="Python.misc" />
|
<item itemvalue="Python.misc" />
|
||||||
<item itemvalue="Python.CAvatar" />
|
|
||||||
</list>
|
</list>
|
||||||
</recent_temporary>
|
</recent_temporary>
|
||||||
</component>
|
</component>
|
||||||
@ -259,13 +253,6 @@
|
|||||||
<option name="presentableId" value="Default" />
|
<option name="presentableId" value="Default" />
|
||||||
<updated>1672848140146</updated>
|
<updated>1672848140146</updated>
|
||||||
</task>
|
</task>
|
||||||
<task id="LOCAL-00016" summary="窗口切换,使用stackedWidget">
|
|
||||||
<created>1680630659802</created>
|
|
||||||
<option name="number" value="00016" />
|
|
||||||
<option name="presentableId" value="LOCAL-00016" />
|
|
||||||
<option name="project" value="LOCAL" />
|
|
||||||
<updated>1680630659802</updated>
|
|
||||||
</task>
|
|
||||||
<task id="LOCAL-00017" summary="修复了Webengine横向小的问题">
|
<task id="LOCAL-00017" summary="修复了Webengine横向小的问题">
|
||||||
<created>1680670947385</created>
|
<created>1680670947385</created>
|
||||||
<option name="number" value="00017" />
|
<option name="number" value="00017" />
|
||||||
@ -602,7 +589,14 @@
|
|||||||
<option name="project" value="LOCAL" />
|
<option name="project" value="LOCAL" />
|
||||||
<updated>1700064404522</updated>
|
<updated>1700064404522</updated>
|
||||||
</task>
|
</task>
|
||||||
<option name="localTasksCounter" value="65" />
|
<task id="LOCAL-00065" summary="新增聊天记录导出csv格式">
|
||||||
|
<created>1700145601841</created>
|
||||||
|
<option name="number" value="00065" />
|
||||||
|
<option name="presentableId" value="LOCAL-00065" />
|
||||||
|
<option name="project" value="LOCAL" />
|
||||||
|
<updated>1700145601841</updated>
|
||||||
|
</task>
|
||||||
|
<option name="localTasksCounter" value="66" />
|
||||||
<servers />
|
<servers />
|
||||||
</component>
|
</component>
|
||||||
<component name="UnknownFeatures">
|
<component name="UnknownFeatures">
|
||||||
@ -638,7 +632,6 @@
|
|||||||
</option>
|
</option>
|
||||||
</component>
|
</component>
|
||||||
<component name="VcsManagerConfiguration">
|
<component name="VcsManagerConfiguration">
|
||||||
<MESSAGE value="用stackedWidget实现导航栏" />
|
|
||||||
<MESSAGE value="修复部分bug" />
|
<MESSAGE value="修复部分bug" />
|
||||||
<MESSAGE value="替换chat里的contact" />
|
<MESSAGE value="替换chat里的contact" />
|
||||||
<MESSAGE value="增加中文路径提示" />
|
<MESSAGE value="增加中文路径提示" />
|
||||||
@ -663,7 +656,8 @@
|
|||||||
<MESSAGE value="显示联系人信息" />
|
<MESSAGE value="显示联系人信息" />
|
||||||
<MESSAGE value="修复db文件空格路径的bug" />
|
<MESSAGE value="修复db文件空格路径的bug" />
|
||||||
<MESSAGE value="修复情感分析数值显示过长的bug" />
|
<MESSAGE value="修复情感分析数值显示过长的bug" />
|
||||||
<option name="LAST_COMMIT_MESSAGE" value="修复情感分析数值显示过长的bug" />
|
<MESSAGE value="新增聊天记录导出csv格式" />
|
||||||
|
<option name="LAST_COMMIT_MESSAGE" value="新增聊天记录导出csv格式" />
|
||||||
<option name="OPTIMIZE_IMPORTS_BEFORE_PROJECT_COMMIT" value="true" />
|
<option name="OPTIMIZE_IMPORTS_BEFORE_PROJECT_COMMIT" value="true" />
|
||||||
<option name="REFORMAT_BEFORE_PROJECT_COMMIT" value="true" />
|
<option name="REFORMAT_BEFORE_PROJECT_COMMIT" value="true" />
|
||||||
</component>
|
</component>
|
||||||
|
@ -37,5 +37,11 @@ def get_contact():
|
|||||||
return result
|
return result
|
||||||
|
|
||||||
|
|
||||||
|
def close():
|
||||||
|
global DB
|
||||||
|
if DB:
|
||||||
|
DB.close()
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
get_contact()
|
get_contact()
|
||||||
|
@ -1,24 +1,40 @@
|
|||||||
import os.path
|
import os.path
|
||||||
|
import re
|
||||||
import sqlite3
|
import sqlite3
|
||||||
|
|
||||||
DB = None
|
DB = []
|
||||||
cursor = None
|
cursor = []
|
||||||
msg_path = "./app/Database/Msg/MSG0.db"
|
msg_root_path = "./app/Database/Msg/"
|
||||||
# misc_path = './Msg/Misc.db'
|
# misc_path = './Msg/Misc.db'
|
||||||
if os.path.exists(msg_path):
|
if os.path.exists(msg_root_path):
|
||||||
DB = sqlite3.connect(msg_path, check_same_thread=False)
|
for root, dirs, files in os.walk(msg_root_path):
|
||||||
|
for file in files:
|
||||||
|
if re.match('^MSG[0-9]+\.db$', file):
|
||||||
|
# print('ok', file)
|
||||||
|
msg_path = os.path.join(msg_root_path, file)
|
||||||
|
DB0 = sqlite3.connect(msg_path, check_same_thread=False)
|
||||||
# '''创建游标'''
|
# '''创建游标'''
|
||||||
cursor = DB.cursor()
|
cursor0 = DB0.cursor()
|
||||||
|
DB.append(DB0)
|
||||||
|
cursor.append(cursor0)
|
||||||
|
|
||||||
|
|
||||||
def init_database():
|
def init_database():
|
||||||
global DB
|
global DB
|
||||||
global cursor
|
global cursor
|
||||||
if not DB:
|
if not DB:
|
||||||
if os.path.exists(msg_path):
|
if os.path.exists(msg_root_path):
|
||||||
DB = sqlite3.connect(msg_path, check_same_thread=False)
|
for root, dirs, files in os.walk(msg_root_path):
|
||||||
|
for file in files:
|
||||||
|
# print(file)
|
||||||
|
if re.match('^MSG[0-9]+\.db$', file):
|
||||||
|
print('ok', file)
|
||||||
|
msg_path = os.path.join(msg_root_path, file)
|
||||||
|
DB0 = sqlite3.connect(msg_path, check_same_thread=False)
|
||||||
# '''创建游标'''
|
# '''创建游标'''
|
||||||
cursor = DB.cursor()
|
cursor0 = DB0.cursor()
|
||||||
|
DB.append(DB0)
|
||||||
|
cursor.append(cursor0)
|
||||||
|
|
||||||
|
|
||||||
def get_messages(username_):
|
def get_messages(username_):
|
||||||
@ -28,15 +44,25 @@ def get_messages(username_):
|
|||||||
where StrTalker=?
|
where StrTalker=?
|
||||||
order by CreateTime
|
order by CreateTime
|
||||||
'''
|
'''
|
||||||
cursor.execute(sql, [username_])
|
result = []
|
||||||
result_ = cursor.fetchall()
|
for cur in cursor:
|
||||||
return result_
|
cur.execute(sql, [username_])
|
||||||
|
result_ = cur.fetchall()
|
||||||
|
# print(len(result))
|
||||||
|
result += result_
|
||||||
|
result.sort(key=lambda x: x[5])
|
||||||
|
return result
|
||||||
|
|
||||||
|
|
||||||
|
def close():
|
||||||
|
for db in DB:
|
||||||
|
db.close()
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
from pprint import pprint
|
from pprint import pprint
|
||||||
|
|
||||||
msg_path = './Msg/MSG3.db'
|
msg_root_path = './Msg/'
|
||||||
init_database()
|
init_database()
|
||||||
|
|
||||||
username = 'wxid_0o18ef858vnu22'
|
username = 'wxid_0o18ef858vnu22'
|
||||||
|
@ -13,6 +13,7 @@ from PyQt5.QtCore import *
|
|||||||
from PyQt5.QtWidgets import *
|
from PyQt5.QtWidgets import *
|
||||||
|
|
||||||
from app import config
|
from app import config
|
||||||
|
from app.DataBase import msg
|
||||||
from app.Ui.Icon import Icon
|
from app.Ui.Icon import Icon
|
||||||
from . import mainwindow
|
from . import mainwindow
|
||||||
from .contact import ContactWindow
|
from .contact import ContactWindow
|
||||||
@ -112,3 +113,9 @@ class MainWinController(QMainWindow, mainwindow.Ui_MainWindow):
|
|||||||
f"QQ交流群:{config.contact}\n"
|
f"QQ交流群:{config.contact}\n"
|
||||||
"地址:https://github.com/LC044/WeChatMsg"
|
"地址:https://github.com/LC044/WeChatMsg"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
def close(self) -> bool:
|
||||||
|
del self.listWidget
|
||||||
|
del self.stackedWidget
|
||||||
|
msg.close()
|
||||||
|
self.contact_window.close()
|
||||||
|
Loading…
Reference in New Issue
Block a user