예제 #1
0
def process(local_song_path, save_path="/Users/zhangzhenhu/Music/mymusic"):
    global g_log_file
    net = NetEase()
    local_song = taglib.File(local_song_path)
    print("")
    print("========本地歌曲=======")
    # pprint.pprint(local_song.tags)
    if 'TITLE' not in local_song.tags or 'ARTIST' not in local_song.tags:
        return
    print(local_song.tags['TITLE'], local_song.tags['ARTIST'],
          local_song.tags.get('ALBUM', ""))
    title = local_song.tags['TITLE'][0]

    song_result = net.search(keywords=title, stype=1)
    if song_result is None or 'songs' not in song_result:
        print("net_song_not_found", local_song_path, file=g_log_file)
        return

    net_song = get_match_song(local_song, song_result['songs'])

    # pprint.pprint(net_song)

    if net_song is None:
        print("net_song_not_match", local_song_path, file=g_log_file)
        return
    print("----------网易歌曲--------")
    print(net_song['id'], net_song['name'], net_song['album']['name'],
          ','.join([x['name'] for x in net_song['artists']]))
    g_song_db[net_song['id']] = net_song
    # 歌手id,只选取第一个
    artist_id = net_song['artists'][0]['id']
    artist_name = net_song['artists'][0]['name']

    # 获取歌手信息
    artist_json = net.get_artist_desc(artist_id)

    # print(artist_desc)
    if artist_json and artist_json['code'] == 200:
        artist_info = artist_json['artist']
        g_artist_db[artist_id] = artist_info
        artist_img = artist_info['img1v1Url']
        artist_pic = artist_info['picUrl']
    else:
        print("artist_not_found", local_song_path, file=g_log_file)
        return

    # 歌曲所属专辑
    album_info = net_song['album']  # 包括字段 id name size artist
    album_name = album_info['name']
    # print(album)
    # 获取歌曲信息
    # print("========歌曲信息=======")
    song_info = net.songs_detail([net_song['id']])[0]
    album_pic = song_info['al']['picUrl']  # 专辑的图片

    # print(song_lyric)

    # 获取专辑信息
    album_tracks = net.album(album_info['id'])
    g_album_db[album_info['id']] = album_tracks

    #
    net_tags = {
        "ALBUM": album_info['name'],
    }
    if artist_info['briefDesc']:
        net_tags['comment'] = artist_info['briefDesc']
    # 专辑发布时间
    if 'publishTime' in album_info:
        publish_time = datetime.fromtimestamp(album_info['publishTime'] //
                                              1000)
        net_tags['date'] = publish_time.strftime("%Y-%m-%d")
        net_tags['year'] = publish_time.strftime("%Y")
        album_year = publish_time.strftime("%Y")
    else:
        album_year = None

    # 专辑歌曲数量,以及本歌曲在第几
    if len(album_tracks):
        net_tags['TRACKTOTAL'] = str(len(album_tracks))
        track_number = get_track_number_from_album(net_song['id'],
                                                   album_tracks)
        if track_number is not None:
            net_tags['TRACKNUMBER'] = str(track_number)

    # 获取歌词
    song_lyric = net.song_lyric(net_song['id'])

    net_tags['Lyrics'] = '\n'.join(song_lyric),
    net_tags['wangyi'] = [
        json.dumps({
            'song_id': net_song['id'],
            'artist_id': artist_id,
            'ablum_id': album_info['id'],
        })
    ]

    new_artist_path = os.path.join(save_path, artist_name)
    if album_name is not None:
        new_album_path = os.path.join(new_artist_path, album_name)
    else:
        new_album_path = new_artist_path
    if album_year is not None:
        new_album_path = new_album_path
    # if not os.path.exists(new_album_path):
    os.makedirs(new_album_path, exist_ok=True)

    new_song_path = os.path.join(new_album_path,
                                 os.path.split(local_song_path)[-1])
    # print(new_song_path)
    # 保存歌词
    save_lrc(new_song_path, song_lyric)

    # 复制音频文件
    if not os.path.exists(new_song_path):
        # copy_file(local_song_path, new_song_path)
        shutil.move(local_song_path, new_song_path)

    download_img(artist_pic, new_artist_path, 'folder')
    download_img(artist_pic, new_artist_path, 'fanart')
    download_img(album_pic, new_album_path, 'cover')

    save_tag(new_song_path, net_tags)

    # 生成nfo文件
    album_nfo = {
        'title': album_info['name'],
        'artistdesc': artist_info['briefDesc'],
        'year': album_year,
        'tracks': album_tracks
    }
    save_album_nfo(new_album_path, album_nfo)
    # pprint.pprint(net.search(keywords="那英", stype=100))
    # pprint.pprint(album_desc[0])
    print("")