コード例 #1
0
 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
コード例 #2
0
 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
コード例 #3
0
 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)
コード例 #4
0
 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
コード例 #5
0
 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'])
コード例 #6
0
 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
コード例 #7
0
 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)
コード例 #8
0
 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()
コード例 #9
0
 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'])
コード例 #10
0
 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()
コード例 #11
0
 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
コード例 #12
0
 def get_music_num(self):
     data = ConnectMysql.get_music_number(self.conn)
     data = json.dumps({'number': data})
     return data
コード例 #13
0
 def __init__(self):
     self.conn = ConnectMysql.new_connect()
コード例 #14
0
 def forget_passwd(self, userName, userEmail, userNewPwd):
     userNewPwd = hashlib.md5(userNewPwd.encode()).hexdigest()
     return ConnectMysql.user_forget_passwd(self.conn, userName, userEmail,
                                            userNewPwd)
コード例 #15
0
 def __score_comment(self, sid):
     comment = ConnectMysql.get_song_comment(self.conn, sid)
     return comment / SCORE['comment_base'] * SCORE['comments']
コード例 #16
0
 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)
コード例 #17
0
 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'
コード例 #18
0
 def __init__(self):
     self.conn = ConnectMysql.new_connect()
     self.superpwd = 'cdq'
コード例 #19
0
 def get_music_info(self, sid):
     data = ConnectMysql.get_song_info(self.conn, sid)
     data = json.dumps(list(data), ensure_ascii=False)
     return data
コード例 #20
0
 def is_super(self, uid: int):
     ret = ConnectMysql.is_user_super(self.conn, uid)
     return ret
コード例 #21
0
 def get_music_by_text(self, text):
     ret = ConnectMysql.get_songs_by_search(self.conn, text)
     return json.dumps(ret)