def all(): play_list_r = ncmbot.user_play_list(289073091) print("用户歌单信息:" + play_list_r.content) play_list_json = play_list_r.json() play_list_dict = {} play_list_list = [] for play_list in play_list_json['playlist']: print(str(play_list)) id = str(play_list['id']); print("id:" + id) play_list_detail = ncmbot.play_list_detail(id, limit=20) print(str(play_list_detail.content)) play_detail_json = play_list_detail.json() for tracks in play_detail_json['playlist']['trackIds']: play_list_list.append(tracks['id']) print("长度" + str(play_list_list.__len__())) song_detail_r = ncmbot.song_detail(play_list_list) song_detail_r_json = song_detail_r.json(); print(song_detail_r.content) for song in song_detail_r_json['songs']: play_list_dict[song['id']] = song['name'] music_url_r = ncmbot.music_url(ids=play_list_list) music_url_r_json = music_url_r.json(); print(music_url_r.content) url_list = {} print(play_list_dict) for data in music_url_r_json['data']: name = play_list_dict.get(data['id']) print(name + "|" + str(data['url'])) url_list[name] = data['url'] return url_list
def get_albums(user_id): import ncmbot import json import random print 'vistor IP: ' + request.remote_addr rows = int(request.args.get('rows')) columns = int(request.args.get('columns')) play_lists = ncmbot.user_play_list(uid=user_id) pl_content = play_lists.content love_play_list = json.loads(pl_content)["playlist"][0] love_play_list_id = love_play_list['id'] love_play_list_details = ncmbot.play_list_detail(id=love_play_list_id, limit=1000) lpld_content = love_play_list_details.content love_song_id_list = json.loads(lpld_content)["playlist"]["trackIds"] love_song_id_list = [x["id"] for x in love_song_id_list] # print str(love_song_id_list) list_size = min(len(love_play_list), 50) request_song_id_list = random.sample(love_song_id_list, list_size) song_detail = ncmbot.song_detail(request_song_id_list) song_detail = song_detail.json() songs_list = song_detail["songs"] song_base_url = "http://music.163.com/#/album?id=" ret = {"data": []} for song in songs_list: pic_url = song["al"]["picUrl"] + "?param=130y130" album_name = song["al"]["name"] album_id = song["al"]["id"] album_url = song_base_url + str(album_id) # print album_url, album_name, pic_url song_dict = { "song_url": album_url, "album_name": album_name, "pic_url": pic_url } ret["data"].append(song_dict) result_size = rows * columns album_id_set = set() count = 0 while len(album_id_set) != result_size and count < 5: ret["data"] = random.sample(ret["data"], result_size) album_id_set = set(x["pic_url"] for x in ret["data"]) count += 1 return jsonify(ret)
def getLyric(listid): pl = ncmbot.play_list_detail(id=str(listid)).json() trks = pl['playlist']['trackIds'] #print(len(trks)) while 1: ran_trk = random.choice(trks) lyricl = ncmbot.lyric(id=ran_trk['id']).json() if 'lrc' in lyricl: break song_id = ran_trk['id'] try: lyricstr = lyricl['lrc']['lyric'] tlyricstr = lyricl['tlyric']['lyric'] #klyricstr = lyricl['klyric']['lyric']#??? lyric = list(filter(Line.valid, map(Line, lyricstr.split('[')))) #print lyric if tlyricstr is not None: try: tlyric = list( filter(Line.valid, map(Line, tlyricstr.split('[')))) liter = iter(lyric) titer = iter(tlyric) try: line = next(liter) tl = next(titer) while 1: if line.time == tl.time: line.addTrans(tl.content) elif line.time < tl.time: line = next(liter) continue else: raise LyricTransErr(song_id, tl.time) line = next(liter) tl = next(titer) except StopIteration: pass except LyricTransErr: for line in lyric: line.clearTrans() blocks = [] t = () for line in lyric: if line.empty(): if t != (): if len(t) == 1 and len(blocks) != 0: blocks[-1] += t else: blocks.append(t) t = () else: t += (line, ) if t != (): if len(t) == 1 and len(blocks) != 0: blocks[-1] += t else: blocks.append(t) #print(blocks) def _f(blocks): for block in blocks: b = len(block) >= 6 def _v(string): return '作词' not in string.content and '作曲' not in string.content and '编曲' not in string.content and u'词:' not in string.content and u'曲:' not in string.content if not b: b = all(map(_v, block)) else: block = list(filter(_v, block)) if b: for i in range(len(block)): #print block[i].content.encode('utf-8') if len(block[i].content) >= 25: yield (block[i], ) elif len(block[i].content) >= 8 and i < len(block) - 1: yield (block[i], block[i + 1]) elif len(block[i].content) < 8 and i < len(block) - 2: yield (block[i], block[i + 1], block[i + 2]) pool = tuple(_f(blocks)) #print len(pool) #print(pool) t = random.choice(pool) lyricrstr = '\n'.join(map(lambda x: x.content, t)) tlyricrstr = '\n'.join( filter(lambda x: x is not None, map(lambda x: x.trans, t))) r = ncmbot.song_detail([ran_trk['id']]).json() #print r['songs']#.encode('utf-8') #print repr(r['songs'])#.encode('utf-8') trk_name = r['songs'][0]['name'] trk_ar = ', '.join(map(lambda x: x['name'], r['songs'][0]['ar'])) return { 'lyric': lyricrstr, 'translated': tlyricrstr, 'name': trk_name, 'artists': trk_ar } except Exception as err: raise anyErrWithId(err, song_id, traceback.format_exc())
songCount = result['songCount'] songs = result['songs'] for song in songs: id = song['id'] name = song['name'] # size = ncmbot.music_url(ids=[id]).json()['data'][0]['size'] singers = ' '.join(singer['name'] for singer in song['artists']) # singer if len(singers) > 30 and ' ' in singers: singers = u'群星' album = song['album']['name'] duration = song['duration'] m, s = divmod(round(int(duration)/1000.0), 60) duration = "%02d:%02d" % (m, s) download_name = singers + ' - ' + name + '.mp3' yield {'id': id, 'name': name, 'singers': singers, 'album': album, 'duration': duration, 'download_name': download_name} if __name__ == '__main__': # for i in searchMusic(): # print i # print '-'*100 print ncmbot.song_detail([186016]).json()['songs'][0]['m']['size']
def test_SONG_DETAIL(self): r = ncmbot.song_detail([ 68302, 30500857, ]) print 'test_SONG_DETAIL', r.json()
name = song['name'] # size = ncmbot.music_url(ids=[id]).json()['data'][0]['size'] singers = ' '.join(singer['name'] for singer in song['artists']) # singer if len(singers) > 30 and ' ' in singers: singers = u'群星' album = song['album']['name'] duration = song['duration'] m, s = divmod(round(int(duration) / 1000.0), 60) duration = "%02d:%02d" % (m, s) download_name = singers + ' - ' + name + '.mp3' yield { 'id': id, 'name': name, 'singers': singers, 'album': album, 'duration': duration, 'download_name': download_name } if __name__ == '__main__': # for i in searchMusic(): # print i # print '-'*100 print ncmbot.song_detail([186016]).json()['songs'][0]['m']['size']