最新消息:20210816 当前crifan.com域名已被污染,为防止失联,请关注(页面右下角的)公众号

【记录】给Python脚本BlogsToWordPress中实现QQ空间搬家到wordpress的功能 + 感慨:QQ空间真的很变态 v2012-04-05

Python crifan 3598浏览 0评论

在折腾给BlogsToWordPress – 将百度空间,网易163,新浪sina等博客搬家到WordPress添加对应的QQ空间搬家的功能,然后发现了关于QQ空间的,技术层面的上的很多值得说说的东西。

 

说QQ空间变态,不是指用户层面的花哨等,而是指其内部。

就像一个人,除了外表弄得花里胡哨的,就是身体内部,搞不好也是肠胃互相错位等,乱就一个字,而且秉性也及其古怪,和常人思维两样。

下面就来具体说说QQ空间具体变态在哪些方面:

1.其他博客对应的帖子,对于第几页的帖子,获取的方法,一般都是/index/N,比如百度的

http://hi.baidu.com/againinput_tmp/blog/index/10

去获得对应的第10页的帖子列表,而QQ空间,则是,根据

显示的内容的第几页,比如:

点击第几页

如果你点击了6,对应的访问的地址,不是/index/6之类的地址,而是根据上面的6,所在的位置的坐标,比如135,则对应的url中包含pos=135之类的url地址,去访问,然后获得对应第6页的帖子的列表的。

这样的空间设置的思路,还真tmd的新颖啊。。。

难道真的是为了别人写程序抓取其网页,而故意这样设计,给别人增加难度的?

如果是,那么也无话可说,如果不是,那么设计者的思路,真tmd变态啊。

 

2.看到百度空间,有些地址返回的编码是UTF-8,有些是用的GBK,有些是GB2312.

真TMD的乱啊。

相比较而言,虽然其他网易,新浪等博客,也是用GBK等,但是至少人家是统一的啊。

不像QQ空间的html编码,这么变态,竟然都不统一。

 

3.刚刚遇到一个很巧合,也很变态的事情。

因为调试程序的时候,发现返回的值是这样的:

_Callback(
{"data":{
"ret":0,
"msg":"成功",
"totalnum":1,
"list":[{"blogid":0,
"type":0,
"pubtime":"2006-06-19 23:31",
"replytime":1150731115,
"replynum":3,
"cate":"个人日记",
"catehex":"b8f6c8cbc8d5bcc7",
"title":"最重要的是什么",
"effect":512,
"effect2":0,
"ar":0,
"block":0,
"inproc":false,
"appeal":0}],
"hostflag":1
}}
);

而不是之前类似的这样的:

_Callback(
{"data":{
"ret":0,
"msg":"成功",
"totalnum":3,
"list":[{"blogid":1321610165,
"type":0,
"pubtime":"2011-11-18 17:56",
"replytime":1326363093,
"replynum":1,
"cate":"〖真人秀〗",
"catehex":"a1bcd5e6c8cbd0e3a1bd",
"title":"下页:封爱教做QQ真人秀…下面不要红钻qq秀",
"effect":512,
"effect2":524294,
"ar":0,
"block":0,
"inproc":false,
"appeal":0},
…,…],
"hostflag":1
}}
);

搞得我刚才以为程序出错了呢。实际上则是,几个小时之前,写好了程序的时候,QQ空间的帖子的地址,还是类似于这样的:

http://user.qzone.qq.com/84483423/blog/1317915494

结果现在,此时此刻,当我再去测试程序的时候,才发现QQ空间,竟然内部又改版了,帖子的地址变成了:

http://user.qzone.qq.com/84483423/blog/0

http://user.qzone.qq.com/84483423/blog/1

才导致上述返回的blogid从之前的帖子的发布时间1317915494,变成了现在的帖子的序号0,1,2等。

改版不可怕,怕的是,改的这样频繁的。

这才写好程序没几个小时,结果就遇到这样的事情。

谁知道以后,QQ空间何时会再改版呢。到时候,搞得程序又不能用了,还要同步更新,那就坑爹了。

 

靠,刚发现一个更坑爹的,那就是,程序执行过程中,看到的打印信息,发现后来的很多帖子,blogid超过47之后,却又变成了pubsh time的datestamp值,比如1198288991。

3.刚又发现一个更加变态的事情,那就是QQ空间的帖子的评论,一般都是GB2312类型的(此处用GB18030,是GB2312的超集),然后返回的评论的数据,都是json字符串,所以,我用下面的代码:

dataJsonStrUni = dataJsonStr.decode("GB18030");
dataDict = json.loads(dataJsonStrUni, encoding="GB18030");

都是一直可以解析json字符串,获得对应评论的。

但是刚刚遇到,这个帖子:

http://user.qzone.qq.com/622007179/blog/1218912726

中的

still need get comment: startIdx=180, getNum=57

即第180-237个评论中,使用的编码,最后经过调试,调用chardet.detect的值,竟然用的是另外的编码:

encInfo= {‘confidence’: 0.7493138941403631, ‘encoding’: ‘ISO-8859-2’}

真尼玛太变态了,因为之前N多个帖子的评论数据,都已经测试OK的,有的帖子都有上千条评论的,都是好的,结果竟然还会遇到另外的帖子,变态的竟然采用不一样的编码。

真是彻底佩服了那帮QQ空间系统的设计者,编码竟然能乱到此种程度,实在无语了。

4.以为上面的已经够变态了,结果还有更变态的:

这个帖子:

http://user.qzone.qq.com/622000169/blog/1252395085

中所返回的帖子的内容:

{"data":{

"blogid":1252395085,

"voteids":0,

"pubtime":1252395085,

"replynum":40,

"category":"推荐阅读",

"tag":"嫁人|魅力|浪子|浪漫|激情",

"title":"五类男人可嫁性分析报告",

"effect":136315393,

"effect2":6,

"exblogtype":0,

"sus_flag":false,

"friendrelation":[],

"lp_type":0,

"lp_id":0,

"lp_style":0,

"lp_flag":0,

"orguin":622000169,

"orgblogid":1252395085,

"ip":3415476546,

"mention_uins":[ ],

"attach":[],

"replylist":[………..]

}}

其中省略掉的replylist部分的数据,就是帖子的评论数据。

对于上述整个的字符串,首先是用GB18030解码:

dataJsonStrUni = dataJsonStr.decode("GB18030");

会出错,然后就再尝试用chardet.detect解析出来的:

encInfo= {‘confidence’: 0.30552020319195256, ‘encoding’: ‘ISO-8859-2’}

中的ISO-8859-2去decode,结果可以decode了,但是接着的:

dataDict = json.loads(dataJsonStrUni, encoding="ISO-8859-2");

还是出错。

但是上述的整个字符串,通过python的logging打印出来,是可以正确显示的,意味着其本身编码,至少绝大多数的字符,还是GB2312(GB18030)的,但是呢,其中的部分,大概30%左右,却又是ISO-8859-2编码的,即本身这个字符串,就是混合了70%的GB2312和30%的ISO-8859-2的编码,这样会导致,不论用GB2312,还是ISO-8859-2去解码,以及接下来的json.loads,总是会失败的,也就无法通过代码规避此问题了。

代码乱也就算了,字符编码不统一也就算了,但是你尼玛也不能混用不同字符编码啊。。。。

 

5.然后又碰到一个很变态的:

如下内容:

QQ空间的帖子,返回的单个的评论,正常的数据中,都包含replynick:

#Normal one:

# {"replyid":2,

# "replytime":1332944481,

# "replyeffect":0,

# "replyautograph":"",

# "replycontent":"好美! ",

# "ismyreply":0,

# "capacity":4990,

# "replyuin":421380584,

# "replynick":"故乡的原风景 ",

# "responsecontent":[ ]}

果对于这个帖子

http://user.qzone.qq.com/417846901/blog/1332944095

结果其返回值中,突然就没了replynick,而变成了nickname:

#special one:

#{"replyid":1,

# "replytime":1332944343,

# "replyeffect":524288,

# "replyautograph":"",

# "replycontent":"梦里去过了! ",

# "ismyreply":0,

# "capacity":4990,

# "replyuin":"03037c9a5520fe5775a202f59858ec2e5dc9c1d73e346b3d",

# "nickname":"慕寒",

# "responsecontent":[ ]}

真尼玛够变态的。。。搞得程序还一直都要修修补补,这QQ空间,尼玛是谁设计的啊。。。

转载请注明:在路上 » 【记录】给Python脚本BlogsToWordPress中实现QQ空间搬家到wordpress的功能 + 感慨:QQ空间真的很变态 v2012-04-05

发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

网友最新评论 (7)

  1. 为什么我一直在边看边笑啊,将开心建立在别人的痛苦之上。话说现在转换qq空间基本没问题了么?
    ChoJemmy10年前 (2014-03-29)回复
  2. 楼主文风好搞笑啊 忍不住冒个泡
    fox10年前 (2014-03-05)回复
  3. 楼主大婶~~我到现在仍然没有登录进去啊啊啊啊
    张志鹏10年前 (2013-11-28)回复
    • 那就继续努力,啊啊啊
      crifan10年前 (2013-12-02)回复
  4. QQ就这样的。
    Leniy11年前 (2012-12-18)回复
87 queries in 0.181 seconds, using 22.21MB memory