webQQ协议——发送消息

"

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;



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值