利用webqq协议使用python登录qq发消息源码参考


Posted in Javascript onApril 08, 2013

开源的,地址在https://github.com/atupal/webqq

等有时间了写一个完整的cli qq客户端。
使用方法:python login_qq.py即可

import urllib2 
import httplib2 
import re 
import random 
from encryption import QQmd5 
import cookielib 
import requests 
import getpass 
import time 
import json 
import urllib 
class webqq: 
def __init__(self, user, pwd): 
self.cookies = cookielib.CookieJar() 
self.opener = urllib2.build_opener( 
urllib2.HTTPHandler(), 
urllib2.HTTPSHandler(), 
urllib2.HTTPCookieProcessor(self.cookies), 
) 
urllib2.install_opener(self.opener) 
self.user = user 
self.pwd = pwd 
self.mycookie = ";" 
#self.clientid = "21485768" 
#self.clientid = "34592990" 
self.clientid = str(random.randint(10000000, 99999999)) 
def getSafeCode(self): 
url = 'https://ssl.ptlogin2.qq.com/check?uin=' + str(self.user) + '&appid=1003903&js_ver=10017&js_type=0&login_sig=0ihp3t5ghfoonssle-98x9hy4uaqmpvu*8*odgl5vyerelcb8fk-y3ts6c3*7e8-&u1=http%3A%2F%2Fweb2.qq.com%2Floginproxy.html&r=0.8210972726810724' 
req = urllib2.Request(url) 
#self.mycookie += "confirmuin=" + self.user + ";" 
#req.add_header('Cookie', self.mycookie) 
req = urllib2.urlopen(req) 
#cs = ['%s=%s' % (c.name, c.value) for c in self.cookies] 
#self.mycookie += ";".join(cs) 
verifycode = re.search(r"'(\d)','(.+)','(.+)'", req.read()) 
self.check = verifycode.group(1) 
self.verifycode1 = verifycode.group(2) 
self.verifycode2 = verifycode.group(3) 
if self.check == "1": 
url = 'https://ssl.captcha.qq.com/getimage?&uin='+str(self.user)+'&aid=1002101&0.45644426648505' + str(random.randint(10,99)) 
req = urllib2.Request(url) 
req = urllib2.urlopen(req) 
self.fi = open("./image.jgp", "wb") 
while 1: 
c = req.read() 
if not c: 
break 
else :self.fi.write(c) 
self.fi.close() 
self.verifycode1 = raw_input("verifer:") 
print self.check, self.verifycode1, self.verifycode2 
def loginGet(self): 
#cs = ['%s=%s' % (c.name, c.value) for c in self.cookies] 
#self.mycookie += ";" "; ".join(cs) 
login_url = 'https://ssl.ptlogin2.qq.com/login?u='+self.user +'&p=' + str(QQmd5().md5_2(self.pwd, self.verifycode1, self.verifycode2)) + '&verifycode=' + self.verifycode1 + '&webqq_type=10&remember_uin=1&login2qq=1&aid=1003903&u1=http%3A%2F%2Fweb.qq.com%2Floginproxy.html%3Flogin2qq%3D1%26webqq_type%3D10&h=1&ptredirect=0&ptlang=2052&from_ui=1&pttype=1&dumy=&fp=loginerroralert&action=2-14-32487&mibao_css=m_webqq&t=1&g=1&js_type=0&js_ver=10015&login_sig=0ihp3t5ghfoonssle-98x9hy4uaqmpvu*8*odgl5vyerelcb8fk-y3ts6c3*7e8-' 
req = urllib2.Request(login_url) 
req.add_header("Referer", "https://ui.ptlogin2.qq.com/cgi-bin/login?target=self&style=5&mibao_css=m_webqq&appid=1003903&enable_qlogin=0&no_verifyimg=1&s_url=http%3A%2F%2Fweb.qq.com%2Floginproxy.html&f_url=loginerroralert&strong_login=1&login_state=10&t=20121029001") 
#req.add_header("Cookie", self.mycookie) 
#self.opener.addheaders.append(("Cookie", self.mycookie)) 
req = urllib2.urlopen(req) 
print req.read() 
for cookie in self.cookies: 
print cookie.name, ":", cookie.value 
if cookie.name == 'ptwebqq': 
self.ptwebqq = cookie.value 
print urllib2.urlopen('http://web2.qq.com/web2/get_msg_tip?uin=&tp=1&id=0&retype=1&rc=0&lv=3&t=1358252543124').read() 
#cs = ['%s=%s' % (c.name, c.value) for c in self.cookies] 
#self.mycookie += ";" "; ".join(cs) 
def loginPost(self): 
url = 'http://d.web2.qq.com/channel/login2' 
data = 'r=%7B%22status%22%3A%22online%22%2C%22ptwebqq%22%3A%22' + self.ptwebqq + '%22%2C%22passwd_sig%22%3A%22%22%2C%22clientid%22%3A%22'+self.clientid+'%22%2C%22psessionid%22%3Anull%7D&clientid='+self.clientid+'&psessionid=null' 
req = urllib2.Request(url, data) 
#req.add_header('Cookie', self.mycookie) 
req.add_header('Referer', 'http://d.web2.qq.com/proxy.html?v=20110331002&callback=1&id=2') 
req = urllib2.urlopen(req) 
self.result = json.load(req) 
print self.result['result']['vfwebqq'], self.result['result']['psessionid'] 
def getGroupList(self): 
url = 'http://s.web2.qq.com/api/get_group_name_list_mask2' 
data = 'r=%7B%22vfwebqq%22%3A%22'+self.result['result']['vfwebqq'] +'%22%7D' 
req = urllib2.Request(url, data) 
req.add_header('Referer', 'http://s.web2.qq.com/proxy.html?v=20110412001&callback=1&id=1') 
req = urllib2.urlopen(req) 
self.group = json.load(req) 
pass 
def getFriend(self): 
url = 'http://s.web2.qq.com/api/get_user_friends2' 
data = 'r=%7B%22vfwebqq%22%3A%22'+self.result['result']['vfwebqq'] +'%22%7D' 
req = urllib2.Request(url, data) 
req.add_header('Referer', 'http://s.web2.qq.com/proxy.html?v=20110412001&callback=1&id=1') 
req = urllib2.urlopen(req) 
self.friend = json.load(req) 
print self.friend 
pass 
def getMeg(self): 
print urllib2.urlopen('http://web2.qq.com/web2/get_msg_tip?uin=&tp=1&id=0&retype=1&rc=0&lv=3&t=1358252543124').read() 
pass 
def poll2(self): 
url = 'http://d.web2.qq.com/channel/poll2' 
data ='r=%7B%22clientid%22%3A%22'+self.clientid+'%22%2C%22psessionid%22%3A%22'+self.result['result']['psessionid']+'%22%2C%22key%22%3A0%2C%22ids%22%3A%5B%5D%7D&clientid='+self.clientid+'&psessionid='+self.result['result']['psessionid'] 
req = urllib2.Request(url, data) 
#req.add_header('Cookie', self.mycookie) 
req.add_header('Referer', 'http://d.web2.qq.com/proxy.html?v=20110331002&callback=1&id=3') 
result = json.load(urllib2.urlopen(req)) 
print result 
def sendMsg(self, uin, msg): 
url = 'http://d.web2.qq.com/channel/send_buddy_msg2' 
data = 'r=%7B%22to%22%3A'+uin+'%2C%22face%22%3A237%2C%22content'+urllib.quote(r'":"[\"'+msg+r'\",\"\\n【提示:此用户正在使用shift webQq】\",[\"font\",{\"name\":\"宋体\",\"size\":\"10\",\"style\":[0,0,0],\"color\":\"000000\"}]]","')+'msg_id%22%3A13190001%2C%22clientid%22%3A%22'+self.clientid+'%22%2C%22psessionid%22%3A%22'+self.result['result']['psessionid']+'%22%7D&clientid='+self.clientid+'&psessionid='+self.result['result']['psessionid'] 
req = urllib2.Request(url, data) 
#req.add_header('Cookie', self.mycookie) 
req.add_header('Referer', 'http://d.web2.qq.com/proxy.html?v=20110331002&callback=1&id=2') 
print urllib2.urlopen(req).read() 
pass 
def sendQunMsg(self, uin, msg): 
url = 'http://d.web2.qq.com/channel/send_qun_msg2' 
data = 'r=%7B%22group_uin%22%3A'+uin+'%2C%22face%22%3A237%2C%22content'+urllib.quote(r'":"[\"'+msg+r'\",\"\\n【提示:此用户正在使用shift webQq】\",[\"font\",{\"name\":\"宋体\",\"size\":\"10\",\"style\":[0,0,0],\"color\":\"000000\"}]]","')+'msg_id%22%3A13190001%2C%22clientid%22%3A%22'+self.clientid+'%22%2C%22psessionid%22%3A%22'+self.result['result']['psessionid']+'%22%7D&clientid='+self.clientid+'&psessionid='+self.result['result']['psessionid'] 
req = urllib2.Request(url, data) 
req.add_header('Referer', 'http://d.web2.qq.com/proxy.html?v=20110331002&callback=1&id=2') 
print urllib2.urlopen(req).read() 
pass 
def main(): 
user = raw_input('QQ:') 
pwd = getpass.getpass('password: ') 
qq = webqq(user, pwd) 
qq.getSafeCode() 
qq.loginGet() 
qq.loginPost() 
qq.getGroupList() 
qq.getFriend() 
while 0: 
time.sleep(0.5) 
qq.poll2() 
for i in range(100): 
print 'to', qq.friend['result']['info'][0]['uin'] 
print 'to', qq.group['result']['gnamelist'][10] 
#qq.sendMsg(str(qq.friend['result']['info'][0]['uin']), 'clientjsfzhiyong') 
ms = '' 
for _ in xrange(i): 
ms += '。' 
qq.sendQunMsg(str(qq.group['result']['gnamelist'][10]['gid']), ms) 
#qq.sendMsg('2236071402', 'geisf') 
if __name__ == "__main__": 
main()
Javascript 相关文章推荐
Javascript 判断 object 的特定类转载
Feb 01 Javascript
javascript 表格内容排序 简单操作示例代码
Jan 03 Javascript
jQuery制作简洁的图片轮播效果
Apr 03 Javascript
JavaScript知识点总结(四)之逻辑OR运算符详解
May 31 Javascript
AngularJS基础 ng-non-bindable 指令详细介绍
Aug 02 Javascript
利用Vue.js框架实现火车票查询系统(附源码)
Feb 27 Javascript
详解AngularJS 路由 resolve用法
Apr 24 Javascript
vue-cli整合vuex的时候,修改actions和mutations,实现热部署的方法
Sep 19 Javascript
详解在不使用ssr的情况下解决Vue单页面SEO问题
Nov 08 Javascript
30分钟快速实现小程序语音识别功能
Nov 27 Javascript
6种JavaScript继承方式及优缺点(小结)
Feb 06 Javascript
vue 解决兄弟组件、跨组件深层次的通信操作
Jul 27 Javascript
setInterval,setTimeout与jquery混用的问题
Apr 08 #Javascript
JQueryEasyUI Layout布局框架的使用
Apr 08 #Javascript
jquery 实现二级/三级/多级联动菜单的思路及代码
Apr 08 #Javascript
JQueryEasyUI datagrid框架的基本使用
Apr 08 #Javascript
Jquery中使用setInterval和setTimeout的方法
Apr 08 #Javascript
JQueryEasyUI datagrid框架的进阶使用
Apr 08 #Javascript
基于datagrid框架的查询
Apr 08 #Javascript
You might like
PHP 实用代码收集
2010/01/22 PHP
Zend Studio去除编辑器的语法警告设置方法
2012/10/24 PHP
PHP6 中可能会出现的新特性预览
2014/04/04 PHP
在Mac上编译安装PHP7的开发环境
2015/07/28 PHP
CI框架AR数据库操作常用函数总结
2016/11/21 PHP
PHP底层运行机制与工作原理详解
2020/07/31 PHP
jQuery chili图片远处放大插件
2009/11/30 Javascript
Jquey拖拽控件Draggable使用方法(asp.net环境)
2010/09/28 Javascript
js实现在文本框光标处添加字符的方法介绍
2012/11/24 Javascript
探讨jQuery的ajax使用场景(c#)
2013/12/03 Javascript
JavaScript使用HTML5的window.postMessage实现跨域通信例子
2014/04/11 Javascript
基于NodeJS的前后端分离的思考与实践(六)Nginx + Node.js + Java 的软件栈部署实践
2014/09/26 NodeJs
浅谈javascript 归并方法
2015/01/21 Javascript
莱鸟介绍window.print()方法
2016/01/06 Javascript
js简单实现图片延迟加载的方法
2016/07/19 Javascript
微信JSAPI Ticket接口签名详解
2020/06/28 Javascript
简单实现js进度条加载效果
2020/03/25 Javascript
原生JS实现的简单小钟表功能示例
2018/08/30 Javascript
Vue起步(无cli)的啊教程详解
2019/04/11 Javascript
基于javascript canvas实现五子棋游戏
2020/07/08 Javascript
js+css3实现炫酷时钟
2020/08/18 Javascript
uniapp微信小程序实现一个页面多个倒计时
2020/11/01 Javascript
python+matplotlib演示电偶极子实例代码
2018/01/12 Python
Python判断中文字符串是否相等的实例
2018/07/06 Python
浅述python中深浅拷贝原理
2018/09/18 Python
pandas pivot_table() 按日期分多列数据的方法
2018/11/16 Python
用Python读取几十万行文本数据
2018/12/24 Python
css3遮罩层镂空效果的多种实现方法
2020/05/11 HTML / CSS
前端实现打印图像功能
2019/08/27 HTML / CSS
html5实现九宫格抽奖可固定抽中某项奖品
2020/06/15 HTML / CSS
给物业的表扬信
2014/01/21 职场文书
融资租赁计划书
2014/04/29 职场文书
学校节能减排倡议书
2014/05/16 职场文书
应用心理学专业求职信
2014/08/04 职场文书
Redis的字符串是如何实现的
2021/10/24 Redis
详解SQL的窗口函数
2022/04/21 Oracle