最近网上最热的话题算是 QQ 和 360 的火并了。我不是 360 的用户,也没有装 QQ 的 client 。偶尔有朋友非要用 QQ 联系我时,我会用 web qq 登陆上去,收个消息,回复一下,然后就下来。我有个 6 位 qq 号码(曾经还有个 5 位的),04 年开始就不怎么用了。
在腾讯,我有几个私交很不错的朋友,对这家公司没什么恶感。唯一的一次是觉得他们不尊重 GPL 协议。所以这次这件事情也没啥心情观看。直到,QQ 居然封掉了 web qq ,用这种自残的方式参战,完全不顾用户的感觉。
我一直认为,做一家大的互联网企业是应该有更高的追求的。所以我喜爱 google ,他们以让信息被更高效的获取为己任。而作为中国 IM 最大提供商的 qq 呢?我想,更方便的让中国互联网用户相互联络应该是他们最高的追求吧。但是,qq 没有这个意识,这是让我最为失望的地方。
腾讯绝对有技术实力,按 XMPP 协议实现个互联互通的 s2s 服务。这能极大的促进互联网用户的在线交流。但是他们没有。这是我不喜欢这家公司的主要地方。而不是因为 qq 是我所在网易公司所开发的不争气的 popo 的竞争对手的缘故。
我一直不懈余力的相我的朋友推广 google 的 IM 软件(以及 google 其它服务):googletalk 。不仅因为它的简洁,更在于它的开放。完整的支持了 XMPP 协议。我写过 blog 谈过为什么我喜欢 google talk 。我觉得这次也算一个契机,可以帮助更多的朋友从 qq 的封闭世界里解脱出来。
大多数人都觉得,摆脱不了 qq 的主要原因是 QQ 上的社交圈。看似无解,但其实也可以部分的做到 QQ 用户关系的迁移。
我们需要做两件事情:
第一,导出 QQ 的好友名单。
完成这一步的方法有三:
- 兼容 qq 协议,从服务器获取好友信息。
- 使用 web qq 或 qzone 的信息,这相对简单。
- 扫描用户本地聊天记录,提取好友信息。
关于其一,qq 是私有协议,逆向工程不符合 QQ 的 EULA 最终用户许可协议。不过世界上已经有许多开源的实现。我不认为 clone QQ 协议是非法的。用户有权用自己的方式合法的使用腾讯授予的服务。
关于其二,web qq 被腾讯自己砍掉了。qzone 倒是个不错的途径。
关于其三,扫描本地文件,比较流氓,不过得到用户授权,比如弹出对话框让用户选择目录应该没问题。只是兼容各种不同的 qq 版本比较繁琐。
如果用兼容 qq 协议的方式来做,出于对用户的方便,可以做成网络服务,让用户提交 qq 用户名密码。但这显得不太安全。没有什么可靠的手段让用户放心。所以,退而求其次,可以开发一个开源的 qq 登陆器。因为开源,可以受到监督,并没有盗取任何好友名单之外的信息。
并且在提交好友信息时,应该以明文方式呈现提交内容,让用户确定提交。
我认为这种形式是可以得到用户的信任的。
第二步要做的是提供一个服务收集用户之间的拓扑关系。用户提交自己另外在使用的 IM 软件的名字和帐号,以及自己的 QQ 好友列表。如果有足够多的用户(只需要是一个群体的)提交,这个服务就可以以各种方式提示你,你的 qq 好友某某正在使用 google talk / msn 等等。你可以方便的加他了。
以 google talk 为例,我们可以制作一个机器人。(因为 gtalk 兼容 XMPP 协议,机器人更方便制作,以跨服务器的方式来通讯,而不需要以 gtalk client 的形式)
在用户提交自己的 qq 好友关系时,我们的机器人就会自动加他为 gtalk 好友。一旦侦测到他有 qq 好友迁移到 gtalk,机器人就可以自动发通知了。
总的看来,这套东西不算难做。这几天比较闲,打算实现出来看看。
btw, 如果有 360 的同学看到这里。如果 360 有推出自己的 IM 软件的打算。我强烈建议使用标准的 XMPP 协议,架设 jabber 服务器就行了。别再搞私有协议了。