在上篇日志里我就提到要写一个输出 QQ 签名的程序了,作用是仅仅通过插入一行类似于豆瓣秀的代码在任意页面上显示最新的 QQ 签名,有点类似于 twitter 输出。经过两个晚上的努力,初步实现了我想要的功能,并完成了前台页面的设计,IE 下还是有点 wacky :( 。Now this is the official release announcement: QQ 签名秀 web 程序诞生!
QQ 签名秀网站 : http://punkid.org/qqsign/
功能/Features
- 只需要简单的插入一行代码就能实现 QQ 签名的输出,而此过程的实现不需要你的主机支持 php,也无须对 XHTML 有太多了解,一切我都替你完成了
- 支持 UTF-8 和 GB18030 两种编码输出
- 可定义显示最近 QQ 签名的条目数
- 发表时间显示为更人性化的”XX 月 XX 天 XX 小时前”
- 可以通过 CSS 改变输出样式
- 可通过前台页面生成你需要的脚本代码,无须手动配置
- 前台页面配合预览功能,以验证输出的正确与完整
FAQ/疑问解答
- 为保证顺利抓取到你的”心路历程”xml 文件,请确保你开启了 QQ 空间功能,并没有设置访问密码;与此同时,你还需要在 Q-zone 下设置把最新签名添加到”心路历程”下
- UTF-8/GB18030 该选择哪个编码呢? 国内很多网站都还在使用 GB(GB2312,GBK,GB18030) 码,而时下的趋势是使用 UTF-8 码,用什么编码取决于你的页面编码。例如 blogbus 用的就是 UTF-8 码。
- 显示条目数究竟能设置多大值? 因为 QQ 的 xml 文件并没有一次性输出所有历史签名,所以条目数不宜设置过大。当然,即使你设置值已经超过了最大实际值也不要紧,程序最自动输出到最大实际值后停止的
程序实现过程
这个程序的原理很简单,读取 Q-zone 里的”心路历程”的 XML 文件,经过数据处理后再输出为 javascript 形式。写这个程序遇到了四个困难:
- Q-zone 的代码实在太乱太 dirty 了,腾讯又没有官方明确申明有 RSS,而 Q-zone 又没法在非 IE 浏览器下浏览,我没办法使用 FF 下的 firebug 来 inspect 它的 XML 文件,最后通过从 IE 临时文件中找到 js 文件,把 xml 文件地址给揪了出来
- 我本打算采用 php 的 SimpleXML/DomDocument 直接读取 QQ 的 XML 文件,但是 DH 主机不支持 URL-file-access mode,不得不放弃了这种最简单的方法,好在我曾经在给自己的 blog 写个 wordpress 插件时发现可以用 MagpieRSS 来读取 XML 文件,并最终通过 MagpieRSS 实现了成功读取
- 第三个困难是编码问题,QQ 的 xml 输出的编码是 GB2312,在我用 MagpieRSS 之前我曾考虑过用 curl 下载 XML 文件并储存为字符型数据,结果 curl 把 GB 码的汉字全丢掉了,更糟糕的是,我测试用的几个朋友的 QQ 签名里因为各式各样的非汉字/非英文特殊文字弄得读取出错,换成 MagpieRSS 后,发现指定输出编码的话也会出这样的问题,最终的办法是使用早先的 MagpieRSS 版本,不指定输出编码,直接读取 XML 数据储存为数组
- 最后一个问题是怎么把 php 执行的结果由 javascript 方式输出,研究了下 livid 的 project babel 程序 ing 模块代码,通过直接在 php 里写入 javascript 的
document.write格式输出搞定了。
最后,特别感谢 Druggo 和我熬夜奋斗啊,很多东西都是他帮忙想辙的! And dont forget to send some feedbacks to me if you have some better ideas or suggestion.