def set_action(self, uid, sid, like, unlike, audition, download): ret = ConnectMysql.set_action(self.conn, uid, sid, like, unlike, audition, download) if ret: rate = Rate() rate.score(uid, sid, like, unlike, audition, download) return ret
def login(self, userName, userPwd): userPwd = hashlib.md5(userPwd.encode()).hexdigest() ret = ConnectMysql.user_login(self.conn, userName, userPwd) if ret != -1: cookie = {'user_id': ret, 'user_name': userName} else: cookie = None return cookie
def get_all_music(self, query: int, offset: int): start = (query - 1) * 16 ret = {} data = ConnectMysql.get_all_music(self.conn, start, offset) ret['data'] = data page = Pages() page = page.check_and_ret(query, offset) ret['page'] = page return json.dumps(ret, ensure_ascii=False)
def get_recommend(self, uid, offset=0, limit=50, topk=RECOMMEND_NUM): #TODO 推荐算法 if (self.recommend == None): StdError.error("MusicManager模块没有传入recommend对象") return None start = offset * limit end = (offset + 1) * limit if end > topk: StdError.error("请求推荐超出限制!end={},topk={}".format(limit, topk)) return None # 获取真实推荐歌曲 sidlist = self.recommend.get_top_n(uid, start, end) ret = [] songSet = set() for i in sidlist: data = ConnectMysql.get_song_by_id(self.conn, i) if data != None: songSet.add(data[0]) ret.append(data) topk -= len(sidlist) # 获取相似类型歌曲 if topk > 0: tagsList = ConnectMysql.get_user_tags(self.conn, uid) if tagsList != None: songsList = ConnectMysql.get_songs_by_tags( self.conn, tagsList, topk) for songInfo in songsList: songId = songInfo[0] if not self.is_in_set(songId, songSet): ret.append(songInfo) topk -= len(songsList) # 获取随即推荐歌曲 if topk > 0: songsList = ConnectMysql.get_songs_by_random( self.conn, RECOMMEND_NUM * 2) for songInfo in songsList: songId = songInfo[0] if not self.is_in_set(songId, songSet): ret.append(songInfo) ret = json.dumps(list(ret), ensure_ascii=False) return ret
def upload_music(self, data): # 将歌单的标签加入到歌曲的属性当中 songTags = ConnectMysql.get_tags_from_list(self.conn, data['song_id']) if songTags != '': data['song_tags'] = songTags # 导入进数据库 keys, vals = '', '' for kv in data.items(): key = str(kv[0]) keys += key + ',' if key in ['song_id', 'song_comment']: vals += str(kv[1]).replace('\'', r'\'') + ',' else: vals += '\'' + str(kv[1]).replace('\'', r'\'') + '\',' keys = keys[:-1] vals = vals[:-1] vals = vals.replace("\n", r'\n') vals = vals.replace("\t", r'\t') return ConnectMysql.upload_song(self.conn, keys, vals, data['song_id'])
def __score_similar(self, uid, sid): # 标签类似 userLike = ConnectMysql.get_user_tags(self.conn, uid) songTags = ConnectMysql.get_song_tags(self.conn, sid) if userLike == None: return 0 elif songTags == None: return 0 else: uLikeSet = set() for i in userLike: uLikeSet.add(i) sLikeSet = set() for i in songTags: sLikeSet.add(i) if sLikeSet.issubset(uLikeSet): return 2 else: return -2
def register(self, userName, userPwd, userSUPER, userEmail, userLikes=[]): # 创建用户信息 userPwd = userPwd.encode('utf-8') userPwd = hashlib.md5(userPwd).hexdigest() # 验证管理员密钥 if userSUPER == self.superpwd: userSUPER = 1 else: userSUPER = 0 return ConnectMysql.user_register(self.conn, userName, userPwd, userSUPER, userEmail, userLikes)
def dump_from_db(self): actions = ConnectMysql.get_actions(self.conn) if actions != None and len(actions) > 0: os.remove(RATE_PATH) with open(RATE_PATH, 'w') as f: for aid, uid, sid, like, unlike, audition, download in actions: sAction = self.__score_action(like, unlike, audition, download) sSimilar = self.__score_similar(uid, sid) sComment = self.__score_comment(sid) score = sAction + sSimilar + sComment f.write("{},{},{},{}\n".format(uid, sid, score, time.time())) f.flush()
def upload_list(self, data): keys, vals = '', '' for kv in data.items(): key = str(kv[0]) keys += key + ',' if key in [ 'list_id', 'list_amount', 'list_collection', 'list_forward', 'list_comment' ]: vals += str(kv[1]).replace('\'', r'\'') + ',' else: vals += '\'' + str(kv[1]).replace('\'', r'\'') + '\',' keys = keys[:-1] vals = vals[:-1] vals = vals.replace("\n", r'\n') vals = vals.replace("\t", r'\t') return ConnectMysql.upload_list(self.conn, keys, vals, data['list_id'])
def __init__(self): self.MusicsearchAPI = 'http://music.163.com/api/search/get' self.headers = { 'Accept': '*/*', 'Accept-Encoding': 'gzip,deflate,sdch', 'Accept-Language': 'zh-CN,zh;q=0.8,gl;q=0.6,zh-TW;q=0.4', 'Connection': 'keep-alive', 'Content-Type': 'application/x-www-form-urlencoded', 'Host': 'music.163.com', 'Referer': 'http://music.163.com/search/', 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.152 Safari/537.36' } self.conn = ConnectMysql.new_connect()
def download(self, sid): if sid == '': StdError.error('歌曲下载出错\t没有正确的歌曲id') return None # 加入MySQL里面的支持,查找到对应的name songName = ConnectMysql.get_song_by_id(self.conn, sid)[1] if not os.path.isfile(MUSIC_PATH.format(songName)): StdError.info("下载链接:" + self.DownloadAPI.format(sid)) headers = { 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3', 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.75 Safari/537.36' } r = requests.get(self.DownloadAPI.format(sid), headers=headers, allow_redirects=False) src = r.headers['location'] res = requests.get(src) with open(MUSIC_PATH.format(songName), 'wb') as f: f.write(res.content) return songName
def get_music_num(self): data = ConnectMysql.get_music_number(self.conn) data = json.dumps({'number': data}) return data
def __init__(self): self.conn = ConnectMysql.new_connect()
def forget_passwd(self, userName, userEmail, userNewPwd): userNewPwd = hashlib.md5(userNewPwd.encode()).hexdigest() return ConnectMysql.user_forget_passwd(self.conn, userName, userEmail, userNewPwd)
def __score_comment(self, sid): comment = ConnectMysql.get_song_comment(self.conn, sid) return comment / SCORE['comment_base'] * SCORE['comments']
def get_action(self, uid, sid): data = ConnectMysql.get_actions(self.conn, uid, sid) if data == None: return json.dumps((0, 0, 0, 0)) else: return json.dumps(data, ensure_ascii=False)
def __init__(self): self.DownloadAPI = 'http://music.163.com/song/media/outer/url?id={}' self.conn = ConnectMysql.new_connect() self.SongURL = 'http://music.163.com'
def __init__(self): self.conn = ConnectMysql.new_connect() self.superpwd = 'cdq'
def get_music_info(self, sid): data = ConnectMysql.get_song_info(self.conn, sid) data = json.dumps(list(data), ensure_ascii=False) return data
def is_super(self, uid: int): ret = ConnectMysql.is_user_super(self.conn, uid) return ret
def get_music_by_text(self, text): ret = ConnectMysql.get_songs_by_search(self.conn, text) return json.dumps(ret)