import os
import pandas as pd
import sqlite3
import json
import sys
from collections import defaultdict
# %localappdata%/Netease/CloudMusic/Library
def get_file_path():
dir_path = os.getenv('localappdata')
child_path = '/Netease/CloudMusic/Library'.split('/')
file_name = 'webdb.dat'
file_path = os.path.join(dir_path, *child_path, file_name)
return file_path
def get_result(file_path, pid='373649554'):
conn = sqlite3.connect(file_path)
sql_result = conn.execute(f"""select b.track from web_playlist_track a
left join web_track b
on a.tid = b.tid
where a.pid = '{pid}'""")
data = sql_result.fetchall()
json_data = [json.loads(i[0]) for i in data if i[0]]
result2 = defaultdict(list)
for i in json_data:
music_name = i['name']
for j in i['artists']:
people_name = j['name']
result2[people_name].append(music_name)
result_num = [(i, len(j)) for i, j in result2.items()]
t = sorted(result_num, key=lambda x: x[1], reverse=True)
return t
def main(num):
file_path = get_file_path()
result = get_result(file_path)
print(result[:num])
def get_num():
num_ = 30 if len(sys.argv) == 1 else int(sys.argv[1])
return num_
if __name__ == '__main__':
num = get_num()
main(num=num)
最後大致輸出如下:
In [42]: print(t[:30])
[('林俊杰', 18), ('張學友', 16), ('Alan Walker', 16), ('Backstreet Boys', 13), (
'趙雷', 13), ('許嵩', 12), ('陳奕迅', 11), ('張國榮', 10), ('周華健', 9), ('Char
lie Puth', 9), ('王力宏', 9), ('Westlife', 9), ('Maroon 5', 9), ('Two Steps From
Hell', 9), ('Beyond', 8), ('孫燕姿', 8), ('Various Artists', 8), ('姫神', 8), (
'莫文蔚', 7), ('王菲', 7), ('陳慧琳', 7), ('任賢齊', 7), ('July', 7), ('花粥', 7
), ('G.E.M.鄧紫棋', 6), ('Aimer', 6), ('Lenka', 6), ('Sia', 6), ('F.I.R.', 6), (
'Coldplay', 6)]
說明:
其中pid是歌單id,打開相應歌單,並複製鏈接,鏈接中的id就是歌單id,替換代碼中的id即可