def get_group_msg_img(self, uin, info): """ 获取消息中的图片 """ name = info.get("name") file_id = info.get("file_id") key = info.get("key") server = info.get("server") ip, port = server.split(":") gid = self.group_map.get(uin, {}).get("gid") url = "http://web2.qq.com/cgi-bin/get_group_pic" params = [("type", 0), ("gid", gid), ("uin", uin),("rip", ip), ("rport", port), ("fid", file_id), ("pic", name), ("vfwebqq", self.vfwebqq), ("t", time.time())] helper = HttpHelper(url, params) helper.add_header("Referer", "http://web2.qq.com/") return helper.open()
def get_group_msg_img(self, uin, info): """ 获取消息中的图片 """ name = info.get("name") file_id = info.get("file_id") key = info.get("key") server = info.get("server") ip, port = server.split(":") gid = self.group_map.get(uin, {}).get("gid") url = "http://web2.qq.com/cgi-bin/get_group_pic" params = [("type", 0), ("gid", gid), ("uin", uin), ("rip", ip), ("rport", port), ("fid", file_id), ("pic", name), ("vfwebqq", self.vfwebqq), ("t", time.time())] helper = HttpHelper(url, params) helper.add_header("Referer", "http://web2.qq.com/") return helper.open()
class WebQQ(object): """ WebQQ :param :qid QQ号 :param :event_queue pyxmpp2时间队列""" def __init__(self, qid, event_queue): self.logger = get_logger() self.qid = qid self.aid = 1003903 self.clientid = random.randrange(11111111, 99999999) self.msg_id = random.randrange(1111111, 99999999) self.group_map = {} # 群映射 self.group_m_map = {} # 群到群成员的映射 self.uin_qid_map = {} # uin 到 qq号的映射 self.check_code = None self.skey = None self.ptwebqq = None self.require_check = False self.QUIT = False self.last_msg = {} self.event_queue = event_queue self.check_data = None # CheckHanlder返回的数据 self.blogin_data = None # 登录前返回的数据 self.rc = 1 self.start_time = time.time() self.hb_last_time = self.start_time self.poll_last_time = self.start_time self._helper = HttpHelper() self.connected = False self.polled = False self.heartbeated = False self.group_lst_updated = False def event(self, event, delay = 0): """ timeout可以延迟将事件放入事件队列 """ if delay: target = partial(self.put_delay_event, self.event_queue, event, delay) t = threading.Thread(target = target) t.setDaemon(True) t.start() else: self.event_queue.put(event) def put_delay_event(self, queue,event, delay): """ 应当放入线程中 """ time.sleep(delay) queue.put(event) def ptui_checkVC(self, r, vcode, uin): """ 处理检查的回调 返回三个值 """ if int(r) == 0: self.logger.info("Check Ok") self.check_code = vcode else: self.logger.warn("Check Error") self.check_code = self.get_check_img(vcode) self.require_check = True return r, self.check_code, uin def get_check_img(self, vcode): """ 获取验证图片 """ url = "https://ssl.captcha.qq.com/getimage" params = [("aid", self.aid), ("r", random.random()), ("uin", self.qid)] helper = HttpHelper(url, params, jar = http_sock.cookiejar) res = helper.open() path = tempfile.mktemp() fp = open(path, 'wb') fp.write(res.read()) fp.close() res = upload_file("check.jpg", path) print res.geturl() check_code = None while not check_code: check_code = raw_input("打开上面连接输出图片上的验证码: ") return check_code.strip() def handle_pwd(self, password): """ 根据检查返回结果,调用回调生成密码和保存验证码 """ r, self._vcode, huin = eval("self." + self.check_data.rstrip(";")) pwd = md5(md5(password).digest() + huin).hexdigest().upper() return md5(pwd + self._vcode).hexdigest().upper() def ptuiCB(self, scode, r, url, status, msg, nickname = None): """ 模拟JS登录之前的回调, 保存昵称 """ if int(scode) == 0: self.logger.info("Get ptwebqq Ok") self.skey = http_sock.cookie['.qq.com']['/']['skey'].value self.ptwebqq = http_sock.cookie['.qq.com']['/']['ptwebqq'].value self.logined = True else: self.logger.warn("Get ptwebqq Error") if nickname: self.nickname = nickname def get_qid_with_uin(self, uin): """ 根据uin获取QQ号 """ url = "http://s.web2.qq.com/api/get_friend_uin2" params = [("tuin", uin), ("verifysession", ""),("type",4), ("code", ""), ("vfwebqq", self.vfwebqq), ("t", time.time())] self._helper.change(url, params) self._helper.add_header("Referer", "http://d.web2.qq.com/proxy." "html?v=20110331002&callback=1&id=3") res = self._helper.open() data = res.read() if data: info = json.loads(data) if info.get("retcode") == 0: return info.get("result", {}).get("account") def get_group_msg_img(self, uin, info): """ 获取消息中的图片 """ name = info.get("name") file_id = info.get("file_id") key = info.get("key") server = info.get("server") ip, port = server.split(":") gid = self.group_map.get(uin, {}).get("gid") url = "http://web2.qq.com/cgi-bin/get_group_pic" params = [("type", 0), ("gid", gid), ("uin", uin),("rip", ip), ("rport", port), ("fid", file_id), ("pic", name), ("vfwebqq", self.vfwebqq), ("t", time.time())] helper = HttpHelper(url, params) helper.add_header("Referer", "http://web2.qq.com/") return helper.open() def get_group_name(self, gcode): """ 根据gcode获取群名 """ return self.group_map.get(gcode, {}).get("name") def get_group_member_nick(self, gcode, uin): return self.group_m_map.get(gcode, {}).get(uin, {}).get("nick")
class WebQQ(object): """ WebQQ :param :qid QQ号 :param :event_queue pyxmpp2时间队列""" def __init__(self, qid, event_queue): self.logger = get_logger() self.qid = qid self.aid = 1003903 self.clientid = random.randrange(11111111, 99999999) self.msg_id = random.randrange(1111111, 99999999) self.group_map = {} # 群映射 self.group_m_map = {} # 群到群成员的映射 self.uin_qid_map = {} # uin 到 qq号的映射 self.check_code = None self.skey = None self.ptwebqq = None self.require_check = False self.QUIT = False self.last_msg = {} self.event_queue = event_queue self.check_data = None # CheckHanlder返回的数据 self.blogin_data = None # 登录前返回的数据 self.rc = 1 self.start_time = time.time() self.hb_last_time = self.start_time self.poll_last_time = self.start_time self._helper = HttpHelper() self.connected = False self.polled = False self.heartbeated = False self.group_lst_updated = False def event(self, event, delay=0): """ timeout可以延迟将事件放入事件队列 """ if delay: target = partial(self.put_delay_event, self.event_queue, event, delay) t = threading.Thread(target=target) t.setDaemon(True) t.start() else: self.event_queue.put(event) def put_delay_event(self, queue, event, delay): """ 应当放入线程中 """ time.sleep(delay) queue.put(event) def ptui_checkVC(self, r, vcode, uin): """ 处理检查的回调 返回三个值 """ if int(r) == 0: self.logger.info("Check Ok") self.check_code = vcode else: self.logger.warn("Check Error") self.check_code = self.get_check_img(vcode) self.require_check = True return r, self.check_code, uin def get_check_img(self, vcode): """ 获取验证图片 """ url = "https://ssl.captcha.qq.com/getimage" params = [("aid", self.aid), ("r", random.random()), ("uin", self.qid)] helper = HttpHelper(url, params, jar=http_sock.cookiejar) res = helper.open() path = tempfile.mktemp() fp = open(path, 'wb') fp.write(res.read()) fp.close() res = upload_file("check.jpg", path) print res.geturl() check_code = None while not check_code: check_code = raw_input("打开上面连接输出图片上的验证码: ") return check_code.strip() def handle_pwd(self, password): """ 根据检查返回结果,调用回调生成密码和保存验证码 """ r, self._vcode, huin = eval("self." + self.check_data.rstrip(";")) pwd = md5(md5(password).digest() + huin).hexdigest().upper() return md5(pwd + self._vcode).hexdigest().upper() def ptuiCB(self, scode, r, url, status, msg, nickname=None): """ 模拟JS登录之前的回调, 保存昵称 """ if int(scode) == 0: self.logger.info("Get ptwebqq Ok") self.skey = http_sock.cookie['.qq.com']['/']['skey'].value self.ptwebqq = http_sock.cookie['.qq.com']['/']['ptwebqq'].value self.logined = True else: self.logger.warn("Get ptwebqq Error") if nickname: self.nickname = nickname def get_qid_with_uin(self, uin): """ 根据uin获取QQ号 """ url = "http://s.web2.qq.com/api/get_friend_uin2" params = [("tuin", uin), ("verifysession", ""), ("type", 4), ("code", ""), ("vfwebqq", self.vfwebqq), ("t", time.time())] self._helper.change(url, params) self._helper.add_header( "Referer", "http://d.web2.qq.com/proxy." "html?v=20110331002&callback=1&id=3") res = self._helper.open() data = res.read() if data: info = json.loads(data) if info.get("retcode") == 0: return info.get("result", {}).get("account") def get_group_msg_img(self, uin, info): """ 获取消息中的图片 """ name = info.get("name") file_id = info.get("file_id") key = info.get("key") server = info.get("server") ip, port = server.split(":") gid = self.group_map.get(uin, {}).get("gid") url = "http://web2.qq.com/cgi-bin/get_group_pic" params = [("type", 0), ("gid", gid), ("uin", uin), ("rip", ip), ("rport", port), ("fid", file_id), ("pic", name), ("vfwebqq", self.vfwebqq), ("t", time.time())] helper = HttpHelper(url, params) helper.add_header("Referer", "http://web2.qq.com/") return helper.open() def get_group_name(self, gcode): """ 根据gcode获取群名 """ return self.group_map.get(gcode, {}).get("name") def get_group_member_nick(self, gcode, uin): return self.group_m_map.get(gcode, {}).get(uin, {}).get("nick")