与一个领域里的专家大牛对话,常有醍醐灌顶之感。有的疑问在我们脑子里徘徊良久不能获得解答,有时是一阵子,有时一留就是数年之久。如同武侠世界里的神童,多年来参悟某个秘籍时不得要领,数年没有长进。如果在某个良辰吉日里,你在一处不起眼的街角路遇高手,正好切中要害一语中的地帮你解答疑问,你茅塞顿开、武功大为精进,从此步入武林高手行列,这将是何等幸事?
幸而在互联网高度发达、信息传播充分高效的今天,通常当我们在技术上遇到问题时,不再需要花费数年之久来参悟。一般来说,现实压力也通常不会允许要花这么久,不然我们连 996 的福报也没有资格享受了。所以,人们通常从搜索引擎上查找已经遇到过类似问题的人所发布的讨论和分享,从开源网站上参考其他人的示例方法,大部分的问题也就能够快速得到解答了。另一方面说,这几乎足以说明不少技术人员的工作内容都是相同、至少是类似的。
如果在搜索引擎上找不到现成的分享,这时就要考虑以某种其他方式来获得解答了。比如,去一些问答网站上发贴求救,或者去一些在线群聊里讨论。一般来说,如果说的不够清楚,就会被管理员一顿批评,大意是“哪里来的菜鸟,问题都不会提!”,或者“扯那么多废话干嘛,先上代码!”如果确实是遇到了群组和社区大佬亲临指点,我们基本上就愉快地忍了,然后速速地按照指点把代码呈上一份、听候进一步的指点。
如果这是一个没有出现过的问题,就会引发大家的围观和讨论,最后问题在讨论中被淹没或者解决。如果这个问题经常出现、太初级,就会被大佬和大家鄙视一番,并被要求回去看书。这时,情况就有点尴尬了。毕竟,我怎么知道该去看哪本书,哪部分?而且,本来这个问题就是在线等的很着急,这会儿我还等着下班呢……
如果时光能倒流
如果这时,人群里冒出来一位善良的姑娘,她打破尴尬给你指出,刚好在三天之前群里还讨论过这个问题,或者给你发来一个独家整理的笔记和总结,你是不是恨不能穿过网线去看她?(然而,人家并不想理你)
那么,问题就来了:我怎么知道前两天讨论过……
所谓大隐隐于市,高手在民间。在日常互联网上,很多即兴对话里蕴含着很多知识,他们当时给围观者带来了帮助,却又很快消失在人们眼中。当不断再度有人谈到时,高手们不再有耐心来解答,低手们也就不再能够获得解答了。他们又绝望地回到了搜索引擎上……无意中有的人却搜到了这个:
情何以堪!
Wechaty 成就 dotnet club 时光机
这时,聪明的我在想,大佬们分享的时候,大家都爽,可惜就是像上面这种做笔记的好人太少,而对于日以继夜的大佬们来说,这点小事更是不会上心。如果有一种工具能帮我们把微信群里大佬们的精辟对话导出来,放到某个地方供后人瞻仰、查阅,岂不美哉?
是的,作为关注 .NET Core 的技术社区,dotnet club 就开发了 club-chaty 这样一款工具:它可以将微信群里发生的对话批量导出为 JSON 格式,然后再导入到 dotnet club 网站上,供他人公开查阅这些对话。它的使用步骤是:
- 用户添加网站的客服号为好友,在网站上完成账号的映射绑定
- 用户把自己想收藏的对话,“多选”之后合并转发给客服号
- 待客户号完成对话转换后,由用户选择把已经转换的对话导入到网站上
整体流程如下图:
其中最为关键的就是右上角的“Wechaty 自动转换客服” club-chaty 项目,它能将收到的微信“消息记录”类型的消息导出为 JSON 格式,同时解析并下载其中包含的多媒体消息,包括链接、文件和图片视频等。
之所以它能将微信消息提取到微信之外,这得益于微信消息解析 SDK。club-chaty 开发之初,在选用微信 SDK 的时候,发现社区中的微信 SDK 很多,琳琅满目到处都是,一时之间,难分伯仲。然而,club-chaty 要求能够解析“消息记录”类型的消息,这一硬性要求很快便将绝大多数 SDK 排除在外了。只有 Wechaty 才能完美地提供这些功能。
Wechaty 是由句子互动发布的开源微信 SDK,它直接为微信个人账号赋予编程接口,将个人账号变成自动化应答程序。最重要的是,它能以结构化的方式解析“消息记录”类型的消息。除了解析消息本身,Wechaty 还提供相关的 API 可以下载消息中包含的多媒体内容。这些功能都完美地满足了 club-chaty 的需求。
时不我待,club-chaty 很快就开始了基于 Wechaty 的开发,并在 dotnet club 主站中集成了相关的对话导入流程。作为 dotnet club 网站的一部分,club-chaty 并没有独立地提供线上的网站服务。不过它作为一个软件项目,它的代码与 dotnet club 主站的开发是相互独立的,因此可以单独使用这部分代码。
club-chaty 如何防止隐私泄漏
随着了解 club-chaty 这项功能的人越来越多,逐渐有人关注到它可能带来隐私泄露的风险。比如,张三正跟李四在微信里聊起了他对哪个姑娘刚刚萌生的情愫之后,李四改天就用 club-chaty 这款神器把张三的想法公之于众,页面上还有张三的头像和名字,这还得了。鉴于这种考量,dotnet club 在使用由 club-chaty 导入的数据时,会对对话的内容进行一系列“脱敏”处理。比如,隐去微信对话参与者的原始昵称和头像,换用随机生成的昵称和对话;必须由实名制账号导入对话,并接受原对话参与者的认领和删除等。
在 club-chaty 这种智能导入工具之前,人们如果要留存聊天记录,就需要一张张截图,并利用一些拼图软件将多张图拼到一起作为一个整体进行保存了。相信大家都以这种方式吃过不少大瓜,吃的时候很过瘾,但要么是事后再也找不到了,要么是被吃瓜的当事人信息被泄漏。
而用 club-chaty 导入的聊天记录与截图相比,有诸多好处和优势:
- 整个过程操作顺畅、便利
- 导出的结果是文本、链接和单张图片等可以二次整理的素材
- 导入的结果保存在互联网或笔记软件之后,可以公开查阅和搜索
- 可以更好地保护和管理对话参与者的隐私
写在最后
作为例子,可以来看看导入后的最终效果:https://dotnetclub.net/topics/61
综合来看,基于 Wechaty 实现的 club-chaty 提供的这项功能十分实用,能对具备收藏价值和传播价值的对话内容进行导出、再发布和持久利用,以便解决文章开头的困惑。另一方面,如果某位大牛的发言广为传播,使很多人受益,那么他难道不应该因此收到应有的肯定和赞赏吗?由于 club-chaty 导出的数据中包含原始的发言人账号信息,因此只要使用单向哈希等方式,便可以在保护隐私的同时还能够保留必要的信息以便支持进一步的互动。
作者: @jijiechen dotnet club 技术社区负责人。