如何将 QQ/TIM 聊天记录导入 Telegram
开头是写给太长不看的人:
- 用 PC 版 QQ 或 TIM 导出
.txt
格式的全部消息记录,文件名为默认的全部消息记录.txt
; - 安装 Python3;下载
import2telegram
的qqtxt.py
,并将全部消息记录.txt
置于同一文件夹;(可选)修改脚本中你的QQ用户名;执行python3 qqtxt.py
; - 将你要导入的聊天对应的生成的 txt 文件分享给 Android / iOS 版本的新版 Telegram 应用。
Telegram 于昨日 开放了聊天记录导入 ,方法是通过其他聊天软件分享至新版 Telegram 移动应用,再选择联系人即可完成导入。虽说 Durov 说之后会开放 API,方便开发者导入,但显然,我已经等不及了。
原理
因为看代码看不出什么名堂,也无法在网上找到 KakaoTalk 或 WhatsApp 导出文件的范例,所以我临时注册了两个 WhatsApp 账号互相发送消息并导出。导出的是 txt 文件,内容示例如下:
1/29/21, 9:19 AM - Messages and calls are end-to-end encrypted. No one outside of this chat, not even WhatsApp, can read or listen to them. Tap to learn more. 1/29/21, 9:17 AM - +1 (114) 514-1919: Haha 1/29/21, 9:17 AM - +1 (114) 514-1919: Test 1/29/21, 9:17 AM - +1 (114) 514-1919: 这还端到端加密 1/29/21, 9:17 AM - +1 (114) 514-1919: <Media omitted> 1/29/21, 9:17 AM - +1 (114) 514-1919: 🍒🍒 1/29/21, 9:18 AM - +1 (114) 514-1919: STK-20210129-WA0001.webp (file attached) 1/29/21, 9:18 AM - +1 (114) 514-1919: STK-20210129-WA0000.webp (file attached) 1/29/21, 9:19 AM - +1 (114) 514-1919: <Media omitted> 身份的焦虑(1).epub 1/29/21, 9:19 AM - 猫猫: 行 1/29/21, 9:19 AM - 猫猫: 好,测试多行 多行测试结束
手机号是杜撰的。
由是,目前可以得出的结论:换行符会保留;日期格式为 月/日/两位年, 无零占位十二小时制时:有零占位分 XM
。测试发现多 0 会导致显示导入成功但实际没生效的情况。脚本中的 waDateConverter()
函数可以帮助你将 QQ 的日期转换成 WhatsApp 格式的日期。
经过与友人数十次测试,还发现文件名必须是 WhatsApp Chat with xxxx.txt
的格式,但文件名的用户名不用作分辨导入消息中哪方对应哪方。当聊天记录为一方手机号、另一方非手机号时手机号的那方将会成为对方,而手机号是自己的时也不会和 Telegram 账号手机号进行匹配(就是反了)。有三个用户名的时候,所有人的消息都将展示在对方一侧(推荐你导入群组)。
WhatsApp 可以带媒体导出,但是测试发现大部分文件(包括照片)被 Telegram 忽略了。所以我没有研究文件。
导出 QQ 消息
新界面的 TIM 把头像的消息管理器入口删掉了。所以可以使用 PC 版 QQ 或 TIM 点开任一联系人的消息记录,点开消息管理器,点「导出全部消息记录」。
转换
之后我写了一个转换脚本(代码很糟糕,你可以自己写一个),放在 import2telegram 里。 qqtxt.py
可以帮助你生成 WhatsApp 格式的聊天记录导出文件,无需安装第三方 Python 库。
请将导出的 txt 文件置于脚本同一目录下,执行 python3 qqtxt.py
,即可为每个聊天生成导入用的文件。
脚本里推荐修改 your_qq_names
和 import_3rd
两个参数,否则所有消息都会显示为对方发送。
分享至 Telegram
找到你想导入的对话的生成的 txt 文件,传到移动设备上。
你可以发送给 Saved messages,这时要注意,分享(而不是转发)这个文件给 Telegram 应用自己,这时就会触发导入界面。
如果 Play 还没有给你推送更新,不妨试试 Nekogram X 的预览版,合并了今天上游的 commit。
结语
在找导出 QQ 聊天记录的方法时还是大费周章了,而微信官方更是只提供了转移聊天记录的功能。大部分的聊天软件的做法由此可见一斑:试图让消息迁移变得愈发困难,来增大用户黏性。选择更开放的平台(比如还有 Matrix)不失为保护自己数据的良方——有如 Durov 所言:
Nothing like this has ever been made possible by a major app, and our team had to implement some serious magic to make it work. … The original meaning of the paper plane on the Telegram logo means “freedom”. For us, freedom of choice and data portability are paramount. People should be in complete control over their own data – and their own lives.
本文以 CC BY-NC 4.0(知识共享 署名-非商业性使用 4.0)共享,最先发布在 Github OverflowCat/import2telegram/README.textile。