备份和读取微信通讯录

突发奇想会不会某一天因为微信账号被封导致我失去我的联系人带来不方便,今天备份了一次微信通讯录,当账号丢失时我还可以通过我的备份文件找到我的联系人。

备份步骤使用 iTunes 也就是现在内置在 Finder 里面的 Device 里面了,不加密备份一次备份时间取决于你的设备数据大小,我的 iPhone 14 Pro 256GB 使用了 149GB,备份耗时 35 分钟。使用 iPhone Backup Extractor 的 Expert Mode 提取Applications/com.tencent.xin/Documents/[MD5 of Your Wechat ID]/DB/WCDB_Contact.sqlite文件使用 DB Browser for SQLite 打开刚刚 Extract 出来的 WCDB_Contact.sqlite 文件,选择 Friend 表,菜单栏中选择 File/Export/Table(s) as CSV File…为什么导出 CSV?请看我直接用 DB Browser for SQLite 打开看到的内容,很多字段是 BLOB 二进制类型,特别不直观,对于我们需要阅读和查找都非常不方便。

特别是 dbContactRemark 字段,里面的格式很奇怪,包含 n 个 uniCode 字符 + 昵称 + 修改过的微信 id + 备注 + 拼音 等等,解析的时候我需要跳过 [\u0000-\u001f] 字符集。

解析、查询.CSV 内的数据解析器 ✈️ 直达

源码在这,无毒无害。完全本地解析,放心食用。

读取 .csv 文件后,我默认过滤掉了 type === 4(也就是在同一个群里但不是好友)的联系人数据。如果想要查看这个数据,可以自行克隆运行这个项目,修改 /src/index/index.tsx 处的过滤条件。为了方便查找,表格中我列出了 4 列数据,分别是头像(dbContactHeadImage)、微信 id(userName)、微信名称(dbContactRemark)、备注(dbContactRemark)。点击行数据头部的 ➕ 号可以展开展示原始数据。

搜索框输入关键词时从 userName 和 dbContactRemark 字段中寻找匹配。

Friend 表里的 type 字段枚举值这里是我根据我的通讯录数据得到的结果,仅供参考。

typemeaning0微信收款助手、小程序商家助手1公众号、朋友圈、好友2微信群(不是我创建的)、附近的人、摇一摇3好友4在同一个群里但不是好友5朋友发的名片加的好友7从微信群加的好友8黑名单33QQ 邮箱提醒259,263不给他看朋友圈515公众号2049文件传输助手2050我创建的微信群65537,65539,65543,65795,66051,73729,98307,98311不看他的朋友圈8388611,8388615,8388867,8421379,8421635仅聊天268435458微信群2147483649,2147483651公众号1 个插曲在 Hexo source 添加静态文件夹时,我在 _config.yml 中配置了

_config.yml12skip_render: - static/*这导致我添加一个编译过的 web 页面(包含一个 assets 文件夹),其中的 assets 文件夹内的 .js、.css 无法正确地被 Skip Render, 导致运行失败。纠正很简单,只需将 static/* 改成 static/**/* 即可。

错误日志参考:

1Unhandled rejection WarehouseError: ID `source/static/wechat-contact-parser/assets/index-X6-k19vv.css` has been used12TAL { err: Error [Nunjucks Error]: wechat-contact-parser/assets/index-DX3XtJu_.js [Line 68, Column 11190] tag name expected参考文章数据备份系列(一):微信通讯录备份