예제 #1
0
    def getMusic(self, musicName="", fromName=""):
        tool.line()
        res = []
        self.out("歌曲名字[" + musicName + "] from:" + fromName)
        responce = self.http.do("http://music.163.com/api/search/get/web?csrf_token=", {
           "hlpretag":"",
           "hlposttag":"",
           "s":musicName,
           "type":1,
           "offset":0,
           "total":"true",
           "limit":5,
        })
        obj = tool.toJson(responce.read())
        songs = obj.get("result", {}).get("songs", [])
        self.out("抓取到音乐:")
        for item in songs:
            id = item.get("id", "")
            name = item.get("name", "")
            url = "http://link.hhtjim.com/163/" + str(id) + ".mp3"
            duration = item.get("duration", 0)
            music = {"url":url, "name":name, "fromName":fromName, "duration":duration}
            self.out("url:" + url + " name:" + name)
            res.append(music)

        return res
예제 #2
0
 def shutdown(self):
     self.outRoom()
     self.out("3秒后关闭程序")
     # time.sleep(2)
     tool.line()
     # sys.exit()
     # os.kill()
     os._exit(0)
예제 #3
0
 def restart(self):
     # self.shutdown()
     # self.login()
     self.outRoom()
     tool.line()
     self.out("3秒后重启程序")
     # time.sleep(3)
     #重启程序
     python = sys.executable
     os.execl(python, python, * sys.argv)
예제 #4
0
 def doGet(self, url):
     response = "error"
     try:
         response = self.opener.open(url)
         # self.show(response)
     except Exception as e:
         tool.line()
         self.out(str(url))
         print(traceback.format_exc())
     return response
예제 #5
0
    def send(self, type, data, callback=None):
        if (self.socket == None):
            self.connect()
        tool.line()
        self.out("send:")
        self.out("type:" + type)
        self.out("data:" + str(data))

        self.socket.emit(type, data, callback)
        tool.line()
        return
예제 #6
0
 def showAllRoom(self):
     if(self.roomIndex is None or self.roomIndex == "" or self.roomIndex == {}):
         self.getRooms()
     tool.line()
     self.out("展示所有房间信息")
     i = 0
     for key in self.roomIndex:
         # room = self.roomIndex[key]
         self.showRoom(key, True, i)
         i = i+1
     tool.line()
예제 #7
0
 def goRoomName(self, roomName):
     if(self.roomIndex is None or self.roomIndex == "" or self.roomIndex == {}):
         self.getRooms()
     tool.line()
     self.out("查找房间名字加入" + roomName)
     i = 0
     for key in self.roomIndex:
         room = self.roomIndex[key]
         name = room.get("name", "")
         if(re.search(roomName, name) != None):
             self.goRoom(key)
             break
         i = i+1
     tool.line()
예제 #8
0
    def show(self, response):
        tool.line()
        try:
            self.out("Cookie:")
            for item in self.cookie:
                self.out( '##' + item.name + ':' + item.value)

            self.out("Code: " + str(response.getcode()))
            self.out("Res : " + str(response.msg))
            self.out("Headers : ")
            self.out(str(response.headers))
        except Exception as e:
            print(traceback.format_exc())
        tool.line()
        return
예제 #9
0
 def doPost(self, url=None, postData=None):
     response = "error"
     try:
         if (postData != None):
             postData = urllib.urlencode(postData)
             response = self.opener.open(url, postData)
         else:
             response = self.opener.open(url)
         # self.show(response)
     except Exception as e:
         tool.line()
         self.out(str(url))
         self.out(str(postData))
         print(traceback.format_exc())
     return response
예제 #10
0
    def showUser(self):
        tool.line()
        obj = self.loginUser
        user = obj.get("ORG_VARS", {})
        self.out(user.get("@USER_NAME@", ""))
        self.out(user.get("@USER_POST@", ""))
        self.out(user.get("@LOGIN_NAME@", ""))
        self.out("USER_CODE:" + obj.get("USER_CODE", ""))
        self.out("USER_TOKEN:" + user.get("UESR_TOKEN", ""))
        self.out("socketServerUrl:" + self.socketServerUrl)
        self.out("to url:" + self.socketUrl)
        self.out("to port:" + str(self.socketPort))

        tool.line()
        return
예제 #11
0
    def turnMusic(self, playType):
        music = {}
        if (playType == -1 and len(self.palyHistoryMusic) > 1):  #上一曲
            music = self.palyHistoryMusic.pop()  #弹出顶 取末
            music = self.palyHistoryMusic[-1]
        else:
            cc = 0
            while (music.get("url", "") == ""):
                size = self.db.getCount("select * from music ")
                if (size <= 0):
                    break
                num = 5
                page = int(1.0 * size / num)
                page = tool.getRandom(0, page)
                (size,
                 listRes) = self.db.executeQueryPage("select * from music",
                                                     page, num)

                getSize = len(listRes)
                count = tool.getRandom(0, getSize)
                music = listRes[count]
                tool.line()
                self.out("随机找到歌曲页 " + "size:" + str(size) + "  page:" +
                         str(page) + " num:" + str(num) + " listResSize:" +
                         str(getSize))
                for item in listRes:
                    self.out("url:" + item.get("url") + " name:" +
                             item.get("name") + " fromName:" +
                             item.get("fromName") + " time:" +
                             str(tool.calcTime(item.get("duration", 0))))
                self.out("选中了" + str(count))
                tool.line()
                url = music.get("url", "")
                if (self.http.existAudio(url)):
                    break
                else:
                    self.out("访问音乐文件失败" + url)
                    self.removeMusic(url)
                    music = {}
                if (cc > 20):
                    break
                cc = cc + 1
        return music
예제 #12
0
 def login(self):
     tool.line()
     self.out("百度接口token获取")
     res = False
     obj = self.http.doJson(
         "https://openapi.baidu.com/oauth/2.0/token?grant_type=client_credentials&client_id="
         + self.appKey + "&client_secret=" + self.appSecret)
     token = obj.get("access_token", "")
     # scope中含有audio_tts_post 表示有语音合成能力,
     # 没有该audio_tts_post 的token调用接口会返回502错误。
     # 在结果中可以看见 token = 1.a6b7dbd428f731035f771b8d********.86400
     # .1292922000-2346678-124328,在2592000秒(30天)后过期。
     if (token != ""):
         self.access_token = token
         self.loginRes = obj
         res = True
     else:
         self.out("接口认证失败")
         self.out(str(obj))
         res = False
     return res
예제 #13
0
 def getUserRoom(self, userName="******", userId="8f1b61e25098b0427f01d724716b70cb"):
     i=0
     res = []
     for key in self.roomIndex:
         room = self.roomIndex[key]
         users = room.get("users", [])
         for user in users:
             if(user.get("name", "") == userName):
                 # self.showRoom(key, True, i)
                 res.append(room)
             if(user.get("id", "") == userId):
                 self.showRoom(key, True, i)
         i = i+1
     if(len(res) <= 0):
         self.out("用户不在线"+userName)
     if(len(res) >= 2):
         self.out("该用户多次出现?????")
         for item in res:
             self.out(item)
         tool.line()
     return res
예제 #14
0
    def getRooms(self, detail=False):
        tool.line()
        self.out("获取房间列表")
        responce=self.http.doGet("http://drrr.com/lounge?api=json")
        jsonObj = tool.makeObj(json.loads(responce.read()))
        rooms = jsonObj["rooms"]
        makeRooms = []
        if(len(rooms) > 0):
            self.roomIndex.clear()
            i = 0
            count = 0
            userCount = 0
            for room in rooms:
                id = room.get("id","")
                if(room.get("language","") == "zh-CN"):
                    # root.showRoom(id, show=True, i=i)
                    makeRooms.append(room)
                    self.roomIndex[room["id"]] = room
                    count = count + 1
                    userCount = userCount + int(room.get("total", 0))
                    self.out("#" + tool.fill(str(i),' ',4) + "" + room["id"] + " " + str(room["total"]) + "/" + str(room["limit"]) + "\t " + room["name"])

                    # for item in room.get("users", []):
                    #     if(item.get("id", "") != ""):
                    #         self.userIndex[item.get("name", "")] = item.get("id", "")
                    #         self.userIndexRe[item.get("id")] = item.get("name", "")

            i = i + 1

            self.out("共计房间" + tool.fill(str(count), ' ', 5) + " 用户" + tool.fill(str(userCount), ' ', 5) )
        self.out("解析完毕")
        roomId = self.roomId
        room = self.roomIndex.get(roomId, {})
        if(room.get("host", {}).get("name", "") == self.name):
            self.ifHost = True
        else:
            self.ifHost = False

        self.initRoom()
        return makeRooms
예제 #15
0
    def getHeader(self, url):
    # meta = req.info()
    # file_size = int(meta.getheaders("Content-Length")[0])
    # content_type = meta.getheaders('Content-Type')[0].split(';')[0]
    # print file_size, content_type
# Date: Tue, 15 May 2018 13:23:07 GMT
# Server: openresty/1.11.2.5
# Content-Type: audio/mpeg
# Content-Length: 2949164
# x-nos-request-id: 1698868f-ee9b-4b01-bbae-f127b961dcea
# x-nos-owner-productid: 177408e1ca784c08b4cb35ef81d304ee
# ETag: 2c10ad1f64bdfc097785b0ca1b32fdbd
# Content-Disposition: inline; filename="97c4%2Fac9d%2Fd676%2F2c10ad1f64bdfc097785b0ca1b32fdbd.mp3"
# Last-Modified: Thu, 02 Nov 2017 12:16:57 Asia/Shanghai
# Age: 6187682
# X-Via: 1.1 ingdianxin173:9 (Cdn Cache Server V2.0)[22 200 0], 1.1 PSfjfzdx2go80:2 (Cdn Cache Server V2.0)[0 200 0], 1.1 PSshqzdx4dp241:3 (Cdn Cache Server V2.0)[0 200 0]
# X-Ws-Request-Id: 5b5949dd_PSshqzdx4ny239_22865-38924
# Connection: close
# cdn-user-ip: 101.225.89.253
# cdn-ip: 101.227.97.241
# cdn-source: chinanetcenter
# Access-Control-Allow-Credentials: true
# Access-Control-Allow-Headers: DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type
# Access-Control-Allow-Methods: GET,POST,OPTIONS
# Access-Control-Allow-Origin: *

        res = {}
        try:
            response = self.opener.open(url)
            header = response.headers
            res = header
            # self.show(response)
        except Exception as e:
            tool.line()
            self.out(str(url))
            print(traceback.format_exc())
        return res
예제 #16
0
    def goARoom(self):
        # self.out("#" + str(i) + "\t" + room["id"] + " " + str(room["total"]) + "/" + str(room["limit"]) + "\t " + room["name"])
        lastRoomId = self.roomId
        nowRoom = self.roomIndex.get(self.roomId, {})
        if(nowRoom.get("total", 0) > 1): #当前房间人数 还有其他人
            # self.send(self.name + "也无法忍受这样的寂静了 债见了各位" + self.tail)
            pass
        if(self.roomId != ""):
            self.outRoom()

        self.getRooms()
        self.out("选择最活跃房间")
        i = 0
        maxNum = 0
        maxKey = ""
        for key in self.roomIndex:
            exist = True
            room = self.roomIndex[key]
            total = room.get("total", 0)
            limit = room.get("limit", 0)
            music = room.get("music", False)
            for item in room.get("users", []):
                if(item.get("name", "") == self.name):
                    tool.line()
                    self.out("异常! 该房间存在同名用户 无法加入 ")
                    self.showRoom(room.get("id", ""))
                    exist = False
                    break
                if(item.get("name", "") == self.flowName): #跟随
                    self.out("跟随触发 增大权重选中")
                    maxNum = 99 + int(total)
                    maxKey = key
            i = i+1
        if(maxKey != ""):
            self.out("选中房间:")
            self.showRoom(maxKey)
            tool.line()
            self.goRoom(maxKey)
        else:
            tool.line()
            self.out("异常!!!!!!!!! 居然无可用房间?")
            time.sleep(2)
        return
예제 #17
0
    def show(self, response=""):
        if (response != ""):
            tool.line()
            self.out("Code: " + str(response.getcode()))
            self.out("Res : " + str(response.msg))
            self.out("Headers : ")
            print(response.headers)
        
    
        tool.line()
        try:
            for item in self.cookie:
                self.out("Cookie: ", item.name, item.value)

            self.out("Headers Add : ")
            header = self.opener.addheaders
            for key, value in header:
                self.out("Headers Add ", key, value)
        except Exception as e:
            print(traceback.format_exc())
        tool.line()
        return
예제 #18
0
 def onException(self, *args):
     tool.line()
     self.out("onexception")
     print(args)
예제 #19
0
    def message(self, *args): # 普通消息
        try:
            # print("收到message ")
            # print(args)
            # tool.line()
            # print("转换")
            args = self.turnArray(args)
            # print(args[0])
            # print(args[1])
            if(len(args) <= 1):
                return

            data = args[1] #{}
            mtype = args[0] #message null fun
            if(mtype == 'message'):
                data = tool.toJson(data)
                fro = data.get("from", {})
                to = data.get("to", {})
                contact = data.get("contact", {})
                msg = data.get("body")
                fullId = contact.get("fullId")
                sessionName = contact.get("nickName", "")

                uid = self.data.get("uuid")
                tTag = data.get("timeMillis", tool.getNowTime())
                tool.line()
                self.out("Msg:" + fro.get("nickName","from") + ">>" + msg + ">>" + to.get("nickName","to") + " time:" + data.get("time"))
                # self.out(msg);

                # 自发消息不需要处理
                if(fro.get("nickName","from").find(self.loginUser.get("ORG_VARS", {}).get("@USER_NAME@", "")) >= 0):
                    return

                ttt = self.detaTime
                reg = re.match(r'^\d+$', str(msg))
                if(reg is not None):
                    ttt = int(msg) * 1000


                self.send("updateConversationStatus", {
                    'contactFullId': fullId,
                    'clientId': uid,
                    'timeTag': tTag
                }, ttt)
                self.send("updateMsgStatus", {
                    "messages":data.get("id","")
                }, ttt)


                # 自发言 且 只有自己auto回复
                if(self.id != "18408249138"):
                    return
                # 过滤
                ff = sessionName.find("陈鹏辉")
                hh = fro.get("nickName","from").find("许欢")
                zz = fro.get("nickName","from").find("赵振国")
                cdf = fro.get("nickName","from").find("迪")
                d1 = sessionName.find("迪")
                d2 = sessionName.find("祝")
                d3 = sessionName.find("纯")
                if(ff < 0 or d1 >= 0 or d2 >= 0 or d3 >= 0):
                    self.out("未命中自己title 命中特殊 不回复")
                    return
                point = 76
                if(hh >= 0 or zz >= 0):
                    point = 33
                    self.sendTrue("updateMsgStatus", {
                        "messages":data.get("id","")
                    })
                if(tool.getRandom(0,100) < point):
                    self.out("概率不自动回复" + str(point))
                    return

                # data["body"] = str(data["body"]) + "."
                # self.send("message", data)

                obj = {}
                # if(contact.get("type") == "GROUP"):
                # unicode(self.robot.do(msg, fro.get("nickName")))
                msg = self.robot.do(msg, fro.get("nickName"))
                msg = msg.get("text", '');
                if(msg == ''):
                    return
                obj["body"] = msg #"666" + str(tool.getNowTime())
                obj["bodyType"] = "text"
                obj["clientId"] = str(uuid.uuid1())
                obj["retry"] = 1
                obj["from"] = {}
                obj["from"]["fullId"] = "u__" + self.data.get("userName")
                obj["from"]["id"] = self.data.get("userName")
                obj["from"]["nickName"] = "fromnickname"
                obj["to"] = {}

                if(contact.get("type") == "GROUP"):
                    obj["to"]["fullId"] = contact.get("fullId")
                else:
                    obj["to"]["fullId"] = fro.get("fullId")
                obj["to"]["nickName"] = "tonickname"

                obj["from"]["nickName"] = self.loginUser["ORG_VARS"]["@USER_NAME@"]   # "from-nickName"
                obj["to"]["nickName"] = "to-nickName"

                self.sendTrue("message", obj)
            elif(str(mtype) == 'fun'):
                pass
            elif(str(mtype) == 'event'):
                pass
            else:
                self.out("其他:" + str(mtype))
                print(data)
                # print(args)
                # tool.line()
        except Exception as e:
            self.out(traceback.format_exc())

        return