示例#1
0
文件: webqq.py 项目: sparderwee/qxbot
 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
示例#2
0
 def upload(self, datapath, tag = ""):
     (filepath, tempfilename) = os.path.split(datapath)
     (filename, extension) = os.path.splitext(tempfilename)
     extension = extension[1:len(extension)]
     files = {
         "file" : open(datapath, "rb")
     }
     path = "/file/upload/store_dataResource_files"
     data = None
     jsData = HttpHelper.Request_post_sync(self.ip, self.port, path, None, files)
     if jsData['code'] == 0:
         if jsData['data'] != '':
             dataId = jsData['data']
             formData = {
                 "author": self.userName,
                 "fileName": filename,
                 "sourceStoreId": dataId,
                 "suffix": extension,
                 "type": "OTHER"
             }
             dataUrl = "/dataResource"
             jsresult = HttpHelper.Request_post_sync(self.ip, self.port, dataUrl, formData)
             if jsresult['code'] == 0:
                 data = DCData(self.ip, self.port, dataId)
     return data
示例#3
0
 def testify(self, timeout=7200):
     path = "/modelser/testify/" + self.id
     jsData = HttpHelper.Request_get_sync(self.ip, self.port, path)
     if jsData["status"] == 1:
         title = None
         testifies = jsData["testifies"]
         for index, item in enumerate(testifies):
             title = item["title"]
             break
         if title == None:
             return -2  #! Error in read testify title
         jsData = HttpHelper.Request_put_sync(
             self.ip, self.port,
             "/modelser/testify/" + self.id + "?path=" + title)
         if jsData["status"] == 1:
             inputs = jsData["dataInputs"][0]['inputs']
             list_data = []
             for index, item in enumerate(inputs):
                 list_data.append(
                     DataConfigrationItem(item["StateId"], "",
                                          item["Event"], item["DataId"]))
             recordid = self.invoke(list_data)
             if recordid != -1:
                 jsData = HttpHelper.Request_get_sync(
                     self.ip, self.port, "/modelserrun/json/" + recordid)
                 msr = None
                 if jsData["result"] == "suc":
                     jsMsr = jsData["data"]
                     jsData = HttpHelper.Request_get_sync(
                         self.ip, self.port, "/modelins/json/" +
                         CommonMethod.getJsonValue(jsMsr, "msr_guid"))
                     mis = None
                     if jsData["result"] == "suc" and int(
                             jsData["code"]) == 1:
                         jsMis = jsData["data"]
                         mis = ModelServiceInstance(
                             self.ip, self.port,
                             str(CommonMethod.getJsonValue(jsMis, "state")),
                             str(CommonMethod.getJsonValue(jsMis, "event")),
                             str(CommonMethod.getJsonValue(jsMis, "guid")),
                             str(CommonMethod.getJsonValue(jsMis, "start")),
                             str(
                                 CommonMethod.getJsonValue(
                                     CommonMethod.getJsonValue(jsMis, "ms"),
                                     "_id")))
                         if mis.wait4Status(4, timeout) < 0:
                             mis.kill()
                             return -6  # Timeout
                         if mis.status == 4:
                             return 1
                         else:
                             return -5  #Error in running model service
                 return -4  #! Record can not be found
             return -3  #! Error in read testify files
     return -1  #! Error in read testify files
示例#4
0
文件: webqq.py 项目: DanyPlay/qxbot
 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()
示例#5
0
文件: webqq.py 项目: sparderwee/qxbot
 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()
示例#6
0
 def isExist(self):
     jsData = HttpHelper.Request_get_sync(self.ip, self.port, "/geodata/json/" + self.id)
     if CommonMethod.getJsonValue(jsData, "result") == "suc" :
         if CommonMethod.getJsonValue(jsData, "data") == "":
             return False
         return True
     return False
示例#7
0
 def getModelServiceByID(self, msid):
     jsData = HttpHelper.Request_get_sync(self.ip, self.port,
                                          "/modelser/json/" + msid)
     ms = None
     if CommonMethod.getJsonValue(jsData, "result") == "suc":
         jsMs = CommonMethod.getJsonValue(jsData, "data")
         model = CommonMethod.getJsonValue(jsMs, "ms_model")
         if model == "":
             return None
         user = CommonMethod.getJsonValue(jsMs, "ms_user")
         if user == "":
             user = {"u_name": "", "u_email": ""}
         ms = ModelService(
             self.ip, self.port, CommonMethod.getJsonValue(jsMs, "_id"),
             CommonMethod.getJsonValue(model, "m_name"),
             CommonMethod.getJsonValue(model, "m_type"),
             CommonMethod.getJsonValue(model, "m_url"),
             CommonMethod.getJsonValue(model, "p_id"),
             CommonMethod.getJsonValue(model, "m_id"),
             CommonMethod.getJsonValue(model, "m_register"),
             CommonMethod.getJsonValue(jsMs, "ms_des"),
             CommonMethod.getJsonValue(jsMs, "ms_xml"),
             CommonMethod.getJsonValue(jsMs, "mv_num"),
             int(CommonMethod.getJsonValue(jsMs, "ms_platform")),
             CommonMethod.getJsonValue(jsMs, "ms_update"),
             CommonMethod.getJsonValue(jsMs, "ms_img"),
             CommonMethod.getJsonValue(user, "u_name"),
             CommonMethod.getJsonValue(user, "u_email"),
             int(CommonMethod.getJsonValue(jsMs, "ms_status")),
             int(CommonMethod.getJsonValue(jsMs, "ms_limited")),
             int(CommonMethod.getJsonValue(jsMs, "ms_permission")))
     return ms
示例#8
0
文件: webqq.py 项目: sparderwee/qxbot
 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()
示例#9
0
文件: webqq.py 项目: DanyPlay/qxbot
 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 upload(self, datapath, tag="", security=False):
     md5 = CommonMethod.getFileMd5(datapath)
     path = "/data?md5=" + md5
     jsData = HttpHelper.Request_get_sync(self.ip, self.port, path)
     data = None
     if jsData['result'] == 'suc':
         if (jsData['data'] != ''):
             pwd = jsData['data']['d_pwd']
             pwd = CommonMethod.decryption(CommonMethod.decryption(pwd))
             data = ExData(self.ip, self.port, str(jsData['data']['id']),
                           pwd)
         else:
             data = {"datatag": tag, "pwd": "true"}
             files = {"datafile": open(datapath, "rb")}
             r = requests.post("http://" + self.ip + ":" + str(self.port) +
                               "/data",
                               data,
                               files=files)
             jsData = json.loads(r.text)
             if jsData['result'] == 'suc':
                 pwd = jsData['data']['d_pwd']
                 pwd = CommonMethod.decryption(CommonMethod.decryption(pwd))
                 data = ExData(self.ip, self.port,
                               str(jsData['data']['id']), pwd)
     return data
示例#11
0
文件: webqq.py 项目: DanyPlay/qxbot
 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()
示例#12
0
 def refresh(self):
     path = "/modelser/json" + self.id
     jsData = HttpHelper.Request_get_sync(self.ip, self.port, path)
     if jsData["result"] == "suc":
         jsMs = jsData["data"]
         self.status = int(CommonMethod.getJsonValue(jsMs, "ms_status"))
         self.limitation = int(CommonMethod.getJsonValue(
             jsMs, "ms_limited"))
         return 1
     return -1
 def createTask(self, pid, dxserver=None, username="******"):
     resJson = HttpHelper.Request_get_sync(self.ip, self.port,
                                           '/server?pid=' + pid)
     if resJson['result'] != 'suc' or resJson['code'] != 1:
         return None
     if dxserver == None:
         resJson = HttpHelper.Request_get_sync(self.ip, self.port,
                                               '/dxserver?ac=recommend')
         if resJson['result'] == 'suc' and len(resJson['data']) > 0:
             type = resJson['data']['type']
             if type == 1:
                 dxserver = GeoDataExServer(resJson['data']['ds_ip'],
                                            int(resJson['data']['ds_port']))
             else:
                 dxserver = GeoDataServiceServer(
                     resJson['data']['ds_ip'],
                     int(resJson['data']['ds_port']), username)
         else:
             return None
     return Task(self.ip, self.port, pid, dxserver, username)
示例#14
0
 def invoke(self, list_data):
     path = "/modelser/" + self.id + "?ac=run&inputdata=["
     for index, item in enumerate(list_data):
         path += "{\"StateId\":\"" + item.stateid + "\",\"StateName\":\"" + item.statename + "\",\"Event\":\"" + item.eventname + "\",\"DataId\":\"" + item.dataid + "\",\"Destoryed\":\"" + str(
             item.destoryed) + "\"},"
     path = path.rstrip(',')
     path += "]"
     jsData = HttpHelper.Request_get_sync(self.ip, self.port, path)
     recordid = -1
     if jsData["result"] == "suc":
         recordid = jsData["data"]
     return recordid
示例#15
0
 def getModelServiceRunningRecordByID(self, msrid):
     jsData = HttpHelper.Request_get_sync(self.ip, self.port,
                                          "/modelserrun/json/" + msrid)
     msr = None
     if jsData["result"] == "suc":
         jsMsr = jsData["data"]
         msr = ModelServiceRunningRecord(
             self.ip, self.port, CommonMethod.getJsonValue(jsMsr, "_id"),
             CommonMethod.getJsonValue(
                 CommonMethod.getJsonValue(jsMsr, "msr_ms"), "_id"),
             CommonMethod.getJsonValue(jsMsr, "msr_guid"),
             int(CommonMethod.getJsonValue(jsMsr, "msr_status")))
     return msr
示例#16
0
 def getDataByID(self, dataid):
     jsData = HttpHelper.Request_get_sync(self.ip, self.port,
                                          "/geodata/json/" + dataid)
     dat = None
     if jsData["result"] == "suc" and jsData["data"] != "":
         jsGData = jsData["data"]
         dat = Data(CommonMethod.getJsonValue(jsGData, "gd_id"),
                    CommonMethod.getJsonValue(jsGData, "gd_tag"),
                    CommonMethod.getJsonValue(jsGData, "gd_type"),
                    int(CommonMethod.getJsonValue(jsGData, "gd_size")),
                    CommonMethod.getJsonValue(jsGData, "gd_value"),
                    CommonMethod.getJsonValue(jsGData, "gd_datetime"),
                    self.ip, self.port)
     return dat
 def refresh(self):
     resJson = HttpHelper.Request_get_sync(self.ip, self.port,
                                           '/task/' + self.tid)
     if resJson['result'] == 'suc':
         self.status = resJson['data']['t_status']
         for item in resJson['data']['t_outputs']:
             dataItem = {
                 "StateName": item["StateName"],
                 "Event": item["Event"],
                 "Url": item["Url"],
                 "Tag": item["Tag"]
             }
             self.outputdata.append(dataItem)
     return self.status
 def subscribeTask(self, task):
     params = {
         "inputs": json.dumps(task.inputdata),
         "username": task.username,
         "pid": task.pid
     }
     resJson = HttpHelper.Request_post_sync(self.ip, self.port, '/task',
                                            params)
     if resJson != "Error":
         if resJson["result"] == "suc":
             task._bind(resJson["data"], "Inited")
             return 1
         return -2
     return -1
 def refresh(self):
     jsData = HttpHelper.Request_get_sync(self.ip, self.port,
                                          "/modelins/json/" + self.guid)
     if jsData["result"] == "suc":
         jsMis = jsData["data"]
         if jsMis != None:
             self.state = CommonMethod.getJsonValue(jsMis, "state")
             self.event = CommonMethod.getJsonValue(jsMis, "event")
             self.status = ModelServiceInstance.ConvertString2Status(
                 CommonMethod.getJsonValue(jsMis, "status"))
             RunningLog.AppendJson2Log(
                 self.logs, CommonMethod.getJsonValue(jsMis, "log"))
             self.statusDes = CommonMethod.getJsonValue(jsMis, "statusDes")
         else:
             self.status = INSTA_FINISHED
示例#20
0
 def getModelServiceInstanceByGUID(self, guid):
     jsData = HttpHelper.Request_get_sync(self.ip, self.port,
                                          "/modelins/json/" + guid)
     mis = None
     if jsData["result"] == "suc" and int(jsData["code"]) == 1:
         jsMis = jsData["data"]
         mis = ModelServiceInstance(
             self.ip, self.port,
             str(CommonMethod.getJsonValue(jsMis, "state")),
             str(CommonMethod.getJsonValue(jsMis, "event")),
             str(CommonMethod.getJsonValue(jsMis, "guid")),
             str(CommonMethod.getJsonValue(jsMis, "start")),
             str(
                 CommonMethod.getJsonValue(
                     CommonMethod.getJsonValue(jsMis, "ms"), "_id")))
     return mis
示例#21
0
 def getModelServicesList(self, start=0, count=-1):
     query = ''
     if count < 1:
         query = ''
     else:
         query = ("?start=" + str(start) + "&count=" + str(count))
     jsData = HttpHelper.Request_get_sync(self.ip, self.port,
                                          "/modelser/json/all" + query)
     mslist = []
     if CommonMethod.getJsonValue(jsData, "result") == "suc":
         jsMss = CommonMethod.getJsonValue(jsData, "data")
         for index, item in enumerate(jsMss):
             model = CommonMethod.getJsonValue(item, "ms_model")
             if model == "":
                 continue
             user = CommonMethod.getJsonValue(item, "ms_user")
             if user == "":
                 user = {"u_name": "", "u_email": ""}
             try:
                 if CommonMethod.getJsonValue(item, "ms_limited") == "":
                     item['ms_limited'] = u'0'
                 ms = ModelService(
                     self.ip, self.port,
                     CommonMethod.getJsonValue(item, "_id"),
                     CommonMethod.getJsonValue(model, "m_name"),
                     CommonMethod.getJsonValue(model, "m_type"),
                     CommonMethod.getJsonValue(model, "m_url"),
                     CommonMethod.getJsonValue(model, "p_id"),
                     CommonMethod.getJsonValue(model, "m_id"),
                     CommonMethod.getJsonValue(model, "m_register"),
                     CommonMethod.getJsonValue(item, "ms_des"),
                     CommonMethod.getJsonValue(item, "mv_xml"),
                     CommonMethod.getJsonValue(item, "mv_num"),
                     int(CommonMethod.getJsonValue(item, "ms_platform")),
                     CommonMethod.getJsonValue(item, "ms_update"),
                     CommonMethod.getJsonValue(item, "ms_img"),
                     CommonMethod.getJsonValue(user, "u_name"),
                     CommonMethod.getJsonValue(user, "u_email"),
                     int(CommonMethod.getJsonValue(item, "ms_status")),
                     int(CommonMethod.getJsonValue(item, "ms_limited")),
                     int(CommonMethod.getJsonValue(item, "ms_permission")))
                 mslist.append(ms)
             except ZeroDivisionError as ex:
                 print(str(ex))
     return mslist
示例#22
0
 def refresh(self):
     jsData = HttpHelper.Request_get_sync(self.ip, self.port,
                                          "/modelserrun/json/" + self.id)
     if jsData["result"] == "suc":
         msr = CommonMethod.getJsonValue(jsData, "data")
         self.status = int(CommonMethod.getJsonValue(msr, "msr_status"))
         self.timespan = float(CommonMethod.getJsonValue(msr, "msr_span"))
         self.standout = CommonMethod.getJsonValue(
             CommonMethod.getJsonValue(msr, "msr_runninginfo"), "StdErr")
         self.standerr = CommonMethod.getJsonValue(
             CommonMethod.getJsonValue(msr, "msr_runninginfo"), "StdOut")
         self.invokeerr = CommonMethod.getJsonValue(
             CommonMethod.getJsonValue(msr, "msr_runninginfo"), "InvokeErr")
         self.inputs = []
         for index, item in enumerate(
                 CommonMethod.getJsonValue(msr, "msr_input")):
             self.inputs.append(DataConfigrationItem.MakeUpDataItem(item))
         self.outputs = []
         for index, item in enumerate(
                 CommonMethod.getJsonValue(msr, "msr_output")):
             self.outputs.append(DataConfigrationItem.MakeUpDataItem(item))
示例#23
0
文件: webqq.py 项目: sparderwee/qxbot
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")
示例#24
0
 def connect(self):
     jsData = HttpHelper.Request_get_sync(self.ip, self.port, "/ping")
     if (jsData['data'] == 'OK'):
         return True
     else:
         return False
示例#25
0
 def start(self):
     jsData = HttpHelper.Request_put_sync(
         self.ip, self.port, '/modelser/' + self.id + '?ac=start')
     if CommonMethod.getJsonValue(jsData, 'result') == 'suc':
         return 1
     return -1
示例#26
0
文件: webqq.py 项目: DanyPlay/qxbot
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")
示例#27
0
 def connect(self):
     strData = HttpHelper.Request_get_str_sync(self.ip, self.port, "/ping")
     if strData == "OK":
         return True
     else:
         return False
 def restart(self):
     path = "/modelins/" + self.guid + "?ac=restart"
     jsData = HttpHelper.Request_put_sync(self.ip, self.port, path)
     if jsData["result"] == "suc":
         return True
     return False