예제 #1
0
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
예제 #2
0
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)
예제 #3
0
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())
예제 #4
0
파일: music.py 프로젝트: wikizero/techblog
	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']


	
예제 #5
0
 def test_SONG_DETAIL(self):
     r = ncmbot.song_detail([
         68302,
         30500857,
     ])
     print 'test_SONG_DETAIL', r.json()
예제 #6
0
        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']