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
def shutdown(self): self.outRoom() self.out("3秒后关闭程序") # time.sleep(2) tool.line() # sys.exit() # os.kill() os._exit(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)
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
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
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()
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()
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
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
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
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
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
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
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
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
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
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
def onException(self, *args): tool.line() self.out("onexception") print(args)
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