以可读格式导出iMessage进行存档


33

我与一位联系人进行了长时间(数月)的iMessage对话。当他重新安装操作系统时,他丢失了这些消息,但是我仍然拥有档案。我们希望保留一些重要信息。

是否有一种简单的方法可以以人类可读的形式导出此对话以进行存档,并保留任何图像?

我可以选择部分对话,将其复制到剪贴板并将其粘贴到RTF文档中,但这会丢弃所有图像。我正在寻找一种保留图像的方法。

注意:我仅在OS X而非iOS上使用iMessage。

(理想情况下,我也想导出所有非图像文件附件,但我不希望这样做是可能的。)


1
您要从iDevice还是Mac保存它们?
Matthieu Riegler,2013年

@MatthieuRiegler Mac。我不在iOS上使用iMessage,所以我没有想到这种可能性。我将更新问题。
Szabolcs

1
是否apple.stackexchange.com/questions/88023/...帮助,或者你在找什么东西?
nohillside

@patrix我正在寻找一种从iMessage中获取消息的方法,因此即使我停止使用OS X也可以查看它们。我意识到在iMessage上回复以保留重要信息是错误的,因此我想移动完全摆脱它,并希望挽救未来的聊天记录。
Szabolcs

Answers:


20

如果您知道联系人的iMessage帐户,这里就是我的bash脚本,用于检索文本和图像。

#Parameter is a iMessage account (email or phone number i.e. +33616.... )
if [ $# -lt 1 ]; then
    echo "Enter a iMessage account (email of phone number i.e +33616.....) "
fi
login=$1

#Retrieve the text messages 

sqlite3 ~/Library/Messages/chat.db "
select is_from_me,text from message where handle_id=(
select handle_id from chat_handle_join where chat_id=(
select ROWID from chat where guid='iMessage;-;$1')
)" | sed 's/1\|/me: /g;s/0\|/budy: /g' > MessageBackup.txt


#Retrieve the attached stored in the local cache

sqlite3 ~/Library/Messages/chat.db "
select filename from attachment where rowid in (
select attachment_id from message_attachment_join where message_id in (
select rowid from message where cache_has_attachments=1 and handle_id=(
select handle_id from chat_handle_join where chat_id=(
select ROWID from chat where guid='iMessage;-;$1')
)))" | cut -c 2- | awk -v home=$HOME '{print home $0}' | tr '\n' '\0' | xargs -0 -t -I fname cp fname .

谢谢,这很有用。但是,这不会给我图像...
Szabolcs

我会再挖掘一些找到它们;)
Matthieu Riegler

谢谢!我刚刚找到了一个目前足够好的解决方案,所以请不要再花时间在此上了。
Szabolcs

嗨,如何运行此脚本
Atmiya_Dharmesh 2014年


12

我自由地提出了Matthieu的上述回答。我编写了一个脚本,该脚本将通过备份用户的所有消息(包括图像,音频文件和电影)来自动执行该过程-通过电话号码将每个对话存储为文本文件。

https://github.com/PeterKaminski09/baskup

编辑:我将脚本开发为具有联系人识别等一些不错功能的OS X应用程序。https://peterkaminski09.github.io/baskup


如果联系人没有电话号码怎么办?
Szabolcs

2
我从./Library/Messages/chat.db中的聊天表中检索所有联系信息。这不是特定于用户电话号码。只是与他们的消息相关联的ID。实际上,在大多数情况下,这是电话号码。
彼得·卡明斯基

我用了 有效。这是我发现唯一不花钱的解决方案。谢谢!
埃里克·艾伦

我用了 有效。非常好,我应该补充。+1'cos是我一个答案所能提供的全部。
Seamus

11

我找到了可行的解决方案:

  1. 向上滚动直到所有消息都已加载
  2. 列印成PDF
  3. (如果您有Acrobat,请)从页面上切下空白以提高跨页面拆分邮件的可读性。

结果看起来不太,但是它确实包含所有图像,并且文本是可搜索的。这样就足够了。


4
如果对话中有25,000条消息并且向上滚动不可行怎么办?
用户

这需要一些时间,但是我认为此解决方案对于许多用例都是不错的。
citadelgrad

6

封存

这个人似乎有一个更完善的解决方案(不要无视上面的极为有用的SQLite刮板):

http://www.chrisfinke.com/2013/11/05/convert-ichat-transcripts-to-useable-xml/

总结博客:

  • 安装Adium
  • 选择“从iChat导入”选项
  • 成绩单是从您的日志中生成的,并存储在以下位置:

    〜/图书馆/应用程序支持/ Adium 2.0 /用户/默认/日志/

转换后的文件采用HTML格式,更易于阅读,并且希望对归档更加友好,但是sqlite附件链接的方法似乎很明智。

附件

请注意,iMessage附件通常位于:

~/Library/Containers/com.apple.iChat/Data/Library/Messages/Attachments/...

(我不知道其中所包含的内容和不存在的内容的规则,因此它可能并不完整-但其中有相当多的内容)

但是实际上,您可以在文件的扩展属性中看到有关联系人和对话的一些信息:

$ xattr -lp com.apple.metadata:kMDItemWhereFroms <attachment>

如果Messages将其下载,则会打印一个原点。


1
是的,@ Szabolcs,我确实看到“请不要再花时间在此上”评论,但是不得不做一些我自己的挖掘,因此我认为应该分享,以防对他人有用。
2014年


-1

导出iMessages应用程序可让您将SMS / iMessages保存,打印,备份和恢复到Mac / PC。


1
这并不能真正回答问题,因为我明确地说过,我在OS X而不是iOS上使用iMessage 。
Szabolcs 2015年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.