您的位置:首页 > 其它

webQQ协议——发送消息

2014-03-08 23:39 218 查看
"

2014/06/28修改

重写代码, 分成2个模块, 向群发送消息, 还有向好友发送消息;

"

这里就只讲下向好友发送消息好了。。

发送请求的地址:http://d.web2.qq.com/channel/send_buddy_msg2

发送请求中的form。。。



to后面的是uin, 它并不是QQ号。。。这点需要注意, 它是每次登录时随机分配的, 所以要发送消息, 就要先获得好友信息, 群信息进而获得uin。。。

msg_id这个值, 每发送一次消息就会增加1, 初始值可以自己随便写。。。

psessionid,
clientid在模拟登录的时候有提到=。=,自己过去看下吧。。。(传送门)

FriendSender.py

#coding=utf-8

import urllib;
import urllib.request;
from AbstractSender import AbstractSender;

URL_SEND_FRIENDMSG = "http://d.web2.qq.com/channel/send_buddy_msg2";

class FriendSender(AbstractSender):
def __init__(self, dict):
AbstractSender.__init__(self, dict);

def doSend(self, uin, msg):
data = {"r":'{"to":' + str(uin) + r',"content":"[\"' + str(msg) + r'\",[\"font\",{\"name\":\"' + self.getFont() + r'\",\"size\":' + str(self.getSize()) + r',\"style\":[0,0,0],\"color\":\"000000\"}]]","face":549,"clientid":' + str(self.queryInfo("clientid")) + ',"msg_id":' + str(self.getMsgId()) + ',"psessionid":"' + self.queryInfo("psessionid") + '"}'};
request = urllib.request.Request(URL_SEND_FRIENDMSG, headers = self.queryInfo("header"));
return request, data;


GroupSender.py

#coding=utf-8

import urllib;
import urllib.request;
from AbstractSender import AbstractSender;

URL_SEND_GROUPMSG = "http://d.web2.qq.com/channel/send_qun_msg2";

class GroupSender(AbstractSender):
def __init__(self, dict):
AbstractSender.__init__(self, dict);

def doSend(self, uin, msg):
data = {"r":'{"group_uin":' + str(uin) + r',"content":"[\"' + msg + r'\",[\"font\",{\"name\":\"' + self.getFont() + r'\",\"size\":' + str(self.getSize()) + r',\"style\":[0,0,0],\"color\":\"000000\"}]]","face":549,"clientid":' + self.queryInfo("clientid") + ',"msg_id":' + str(self.getMsgId()) + ',"psessionid":"' + self.queryInfo("psessionid") + '"}'};
request = urllib.request.Request(URL_SEND_GROUPMSG, headers = self.queryInfo("header"));
return request, data;


AbstractSender.py(上面2个模块都继承这个模块。。。Queryable在模拟登录那篇文章里面有。。)

#coding=utf-8

import json;
import random;
import urllib;
import urllib.request;
from urllib.parse import *;
from Queryable import *;

class AbstractSender(Queryable):
def __init__(self, dict, size = 10, font = "宋体"):
Queryable.__init__(self, dict);
#消息id, 每次发送消息都会增加1
self._msgId = random.randint(50000000, 99999999);
self.setFont(font);
self.setSize(size);

def getMsgId(self):
self._msgId += 1;
return self._msgId;

def setFont(self, font):
self._font = font;

def getFont(self):
return self._font;

def setSize(self, sz):
self._size = sz;

def getSize(self):
return self._size;

def doSend(self, uin, msg):
pass;

def send(self, uin, msg):
request, data = self.doSend(uin, msg);
opener = self.queryInfo("opener");
ret = json.loads(opener.open(request, urlencode(data).encode("utf-8")).read().decode("utf-8"));
if(ret["retcode"] == 0):
return True;
return False;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: