qqsign 在上篇日志里我就提到要写一个输出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形式。写这个程序遇到了四个困难:

  1. Q-zone的代码实在太乱太dirty了,腾讯又没有官方明确申明有RSS,而Q-zone又没法在非IE浏览器下浏览,我没办法使用FF下的firebug来inspect它的XML文件,最后通过从IE临时文件中找到js文件,把xml文件地址给揪了出来
  2. 我本打算采用php的SimpleXML/DomDocument直接读取QQ的XML文件,但是DH主机不支持URL-file-access mode,不得不放弃了这种最简单的方法,好在我曾经在给自己的blog写个wordpress插件时发现可以用MagpieRSS来读取XML文件,并最终通过MagpieRSS实现了成功读取
  3. 第三个困难是编码问题,QQ的xml输出的编码是GB2312,在我用MagpieRSS之前我曾考虑过用curl下载XML文件并储存为字符型数据,结果curl把GB码的汉字全丢掉了,更糟糕的是,我测试用的几个朋友的QQ签名里因为各式各样的非汉字/非英文特殊文字弄得读取出错,换成MagpieRSS后,发现指定输出编码的话也会出这样的问题,最终的办法是使用早先的MagpieRSS版本,不指定输出编码,直接读取XML数据储存为数组
  4. 最后一个问题是怎么把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.

9 Reponses So Far ↓

  1. Sleepa:

    Nice work
    you a f*cking genius

  2. ELZIAC:

    + + 我的U10丢了…

  3. 8:

    full of niubility.

  4. punkid:

    Thx, you guys.

    @ Elziac : Time to get an iPod nano 3 Generation, now :D

  5. wonglaye:

    NewB,
    call you Coder P

  6. ELZIAC:

    买了sony a1000, 6g.. lol

  7. Utom:

    哈哈, 调不出来~!

  8. punkid:

    请确保你开启了QQ空间功能,并没有设置访问密码;与此同时,你还需要在Q-zone下设置把最新签名添加到”心路历程”下

    If it still fails, gimme the qq number, otherwise i wont be able to figure out what really matters.

Leave a Reply ↓