pylinuxqq是博主在linux平台下面使用webqq或者其他第三方插件,或者wine模拟,都或多或少的有一些缺陷。而且一直想锻炼一下,自己写一个linux平台下面的QQ。pylinuxqq基于python,目前博主还算小菜,正在开发当中。下面就记录下开发中遇到的一些问题:
项目地址:https://github.com/younfor/PyLinuxQQ
有兴趣的可以fork一份来一起开发
如何连接QQ
结合网上的方法,发现webqq最新版smartqq是相对比较容易的一种方法。通过python的request,urllib2等包可以方便的实现post,get模拟它的协议。
登陆QQ
最难的就是这一步,qq使用了rsa,md5加密还添加了各种规则。好在web端都暴露在js里面。最简单的方法是直接在python里面调用js。当然这个只是一种想法,因为易语言,c语言都能这样,于是经过查阅资料发现,mozila,google都有js引擎。而且都有python的api版本。于是就安装了mozila的spidermonkey,速度很快。主要难点就在算法的分析,和逻辑了。
- 使用ie,firefox,chrome的f12功能,截取整个登陆流程的get,post请求
分析出qq需要登陆2次,而且都是用js请求。如果不会分析source里面的js文件就没法做。
- 分析出js的算法后,使用debug找出每个参数,还有cookies的情况。详细流程在项目源码里面一目了然
- qq的协议经常变,建议把核心写成一个模块和UI分离,以后更新直接下载py模块和js文件就行。
好友列表
首先获取一份qqhash密文,作为请求好友列表的参数,然后通过返回的json用pyqt做界面。
接收信息
主要就是不断的提交一个名叫poll2的POST,如果有值,就说明接收到了消息。接收信息采用和QQ类似的闪动头像,还有聊天对话框合并。
发送信息
群组,讨论组,好友发送消息都是类似的一个POST,带上参数就行了。
PyQt的GUI
主界面采用tabwidget+toolbox+listwidget 实现好友列表和选项卡
下面是一些效果图片:
本文出自www.younfor.com