/QQ-History-Backup

【停更】QQ/TIM 聊天记录导出为 HTML,支持图片、语音,可 GUI 与 非 GUI 操作 (Python)

Primary LanguagePythonMIT LicenseMIT

QQ聊天记录导出

关于其他平台(Windows, MacOS, iOS…)

请看 QQBackup/qq-win-db-key

维护情况

省流:没时间维护,欢迎新 maintainer 与 PR(或者可以自行开个fork)。请提交到dev分支。

同时,请参看白羽夜星制作组的改进版。

运行方式

  1. 一切操作之前,你需要先安装 Python 3.x(建议使用可下载的最高版本,已知支持3.12),可参考此文章(Windows)
  2. 然后,在当前目录打开终端,Windows 用户若不懂可以看这篇博文
  3. 输入以下命令永久加速相关依赖的下载(换源):pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
  4. 安装依赖:pip install -r requirements.txt
  5. 若是运行 GUI,就python GUI.py
  6. 若是直接运行命令行版,就修改好QQ_History.py最下面的内容,并运行:python QQ_History.py

声明

本项目仅供学习交流使用,严禁用于任何违反**大陆法律法规、您所在地区法律法规、QQ软件许可及服务协议的行为,本人不承担任何相关行为导致的直接或间接责任。

本项目理论仅能将可以通过正常方法查看的聊天记录导出,而不能进行包括但不限于已删除聊天记录恢复在内的操作。

本项目不对生成内容的完整性、准确性作任何担保,因此生成的一切内容没有法律效力,您不应当将其用于学习与交流外的任何用途。

简介

作为国内最常用的聊天工具之一,QQ 为了用户留存度,默认聊天记录备份无法脱离 QQ 被独立打开。

目前版本往往需要通过命令行运行,本方法在之前版本的基础上简化了操作,制作了GUI方便使用;并且不再需要提供密钥,自动填入备注/昵称,添加了QQ表情、图片和语音的一并导出。

如果你不使用打包后的版本,请首先运行以下命令以安装依赖:pip install -r requirements.txt

获取聊天记录文件夹方法

注:以下提到的“电脑”泛指一切可以运行此程序的环境,如安卓手机上的 Termux 也属于此列

注:以下内容假设您使用的是 QQ 而非 TIM,如果您在使用 TIM,请将com.tencent.mobileqq改为com.tencent.tim,将MobileQQ改为Tim

如果手机已获得 root 权限,聊天记录可在以下路径找到。

/data/data/com.tencent.mobileqq/

我们需要的文件只有databases/<QQ号>.dbdatabases/slowtable_<QQ号>.dbfiles/kc,因此您可以将整个文件夹压缩后传输到电脑上,亦或将这三个文件单独放在同一个目录中传输。本程序会自动识别这两种不同的目录结构。

如果没有 root 权限,可以通过手机自带的备份工具备份整个 QQ,拷贝备份文件到电脑,解压找到 com.tencent.mobileqq

具体方法可以参见

怎样导出手机中的QQ聊天记录? - 益新软件的回答 - 知乎 https://www.zhihu.com/question/28574047/answer/964813560

关于苹果设备导出,参见此讨论;对于安卓系统导出内容的提取,请自行在互联网查询。

如果同时需要在聊天记录中显示图片,拷贝手机中 /sdcard/Android/data/com.tencent.mobileqq/Tencent/MobileQQ/chatpic/chatimgGUI.exe 同一文件夹中或者拷贝过来的com.tencent.mobileqq目录下。

(QQ)如果同时需要在聊天记录中显示语音,拷贝手机中 /sdcard/Android/data/com.tencent.mobileqq/Tencent/MobileQQ/<QQ号>/pttGUI.exe 同一文件夹中或者拷贝过来的com.tencent.mobileqq目录下。

(TIM)如果同时需要在聊天记录中显示语音,拷贝手机中 /sdcard/Android/data/com.tencent.tim/Tencent/Tim/ptt/<QQ号>GUI.exe 同一文件夹中或者拷贝过来的com.tencent.mobileqq目录下,并重命名为ptt

GUI使用方法

GUI_image

  • com.tencent.mobileqq:选择导出的相应文件夹,对于备份方式,一般为apps/com.tencent.mobileqq
  • 表情版本:默认为新版QQ表情。如果你的聊天记录来自很早以前,可以切换为旧版的表情
  • 导出所有记录:若此项选择“是”,则QQ号/群号:私聊/群聊:选项会被忽略。
  • 导出图片:若此项与前一项均选择“是”,必须把chatimg目录复制到生成的output_xxx目录下,图片才能正常显示
  • 合并图片:默认为否
    • 不启用合并图片好处在于:1. 使导出的 HTML 文件具有可读性;2. 减小 HTML 文件体积方便打开
    • 启用合并图片好处:拷贝时不需要和 emoticon 以及 chatimg 文件夹一起拷贝,更加方便

输出截图

screenshot screenshot

如果没有启用合并图片,拷贝生成的聊天记录时需要一起拷贝 emoticon 以及 chatimg 文件夹.

有 bug 的话提 issue,记得附上 log.txt 里的内容以及终端的报错内容。

TODO

  • 支持群聊导出
  • 支持自动查找密钥
  • 使用好友/群聊昵称作为默认用户名
  • 自动合并 db 和 slow-table
  • 支持新 QQ emoji
  • 支持单一文件导出
  • 支持音频导出
  • 支持视频导出
  • 支持合并转发消息导出
  • 支持戳一戳导出
  • 支持缩略图
  • 支持卡片分享
  • 重构代码
  • 加入 i18n 与自定义翻译支持
  • 支持使用silk-v3-decoder转换音频文件
  • 使用 Jinja2 生成 HTML 文件
  • 允许插入自定义 CSS 与 自定义 JS
  • 分析并试图优化解密相关函数
  • 更新预览图
  • 基于 GitHub Actions 以 PyInstaller 生成在 Windows 下的可执行文件

FAQ

  • 聊天记录中显示 [图片] 是因为什么?

    解码出的图片路径在 chatimg 找不到相应文件。可能原因为在手机中没有加载过该文件,导致图片没有存在手机里。

CHANGELOG

v2

  • 直接从 files/kc 提取明文的密钥,不用再手动输入或解密
  • 支持群聊记录导出
  • 支持 私聊/群聊 的 备注/昵称 自动填入
  • 支持 slowtable 的直接整合
  • 支持新版 QQ 表情

v2.2

  • 支持导出图片至聊天记录
  • 支持合并图片至单一文件方便传输

v2.3

  • 支持读取不同的目录结构
  • 支持单独导出一个私聊对话或群聊对话
  • 部分修复解密函数存在的 bug
  • 支持批量导出
  • 修复导出的 HTML 中的字符转义

v2.4

  • 支持读取音频

致谢

  1. roadwide/qqmessageoutput

  2. WincerChan/export.py

  3. Yiyiyimu/QQ-History-Backup (本仓库的来源,致敬!同时,源代码基于 MIT 协议使用。)

  4. ZhangJun2017/QQChatHistoryExporter (参考了 Protobuf 相关内容)

适配新类型笔记

  1. 下载 protoc 这一可执行文件,设置可执行权限(仅 Linux 类系统)并移动到适当位置(位于 PATH 环境变量中的目录)

  2. 编辑proto/RichMsg.proto,增加新类型(可以参照此项目

  3. 切换到目录proto中,运行compile,在 Windows 下需先将其改名为compile.bat

  4. 编辑QQ_History.py中的decrypt,加入msgtype对应判断与处理代码

  5. 记得写文档