From 24ea3f3bf0a4b33c8d3f8c89cb1ae14ec31c6783 Mon Sep 17 00:00:00 2001 From: Tyhoo Wu Date: Tue, 18 Jul 2023 16:34:23 +0800 Subject: [PATCH] =?UTF-8?q?=E9=A6=96=E6=AC=A1=E6=8F=90=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../README.md" | 36 +++++++++ .../music.py" | 81 +++++++++++++++++++ 2 files changed, 117 insertions(+) create mode 100644 "\345\220\264\345\220\214\345\255\246\347\232\204\351\237\263\344\271\220\347\233\222/README.md" create mode 100644 "\345\220\264\345\220\214\345\255\246\347\232\204\351\237\263\344\271\220\347\233\222/music.py" diff --git "a/\345\220\264\345\220\214\345\255\246\347\232\204\351\237\263\344\271\220\347\233\222/README.md" "b/\345\220\264\345\220\214\345\255\246\347\232\204\351\237\263\344\271\220\347\233\222/README.md" new file mode 100644 index 0000000..c6d9a84 --- /dev/null +++ "b/\345\220\264\345\220\214\345\255\246\347\232\204\351\237\263\344\271\220\347\233\222/README.md" @@ -0,0 +1,36 @@ +# 吴同学的音乐盒 + +1. 模糊查询 + + ``` + API: + + https://songsearch.kugou.com/song_search_v2?keyword=歌曲名或歌手名&page=1&pagesize=10&userid=0&clientver=&platform=WebFilter&filter=2&iscorrection=1&privilege_filter=0 + ``` + + > 注:keyword 传入的是你要搜索的歌曲名或者歌手名 + + 解析 json,拿到 `FileName`、`FileHash`、`AlbumID` + +--- + +2. 歌曲信息 + + ``` + API: + + https://wwwapi.kugou.com/yy/index.php?r=play/getdata&hash=上一个json的FileHash&album_id=上一个json的AlbumID&mid=1 + ``` + + > 注:hash 的 value 是 FileHash,album_id 的 value 是 AlbumID + + 解析 json,拿到 `play_backup_url`,这个 `play_backup_url` 就是歌曲的下载地址。 + +--- + +3. 打包成 .exe + ``` + pyinstaller --onefile music.py + ``` + +4. 效果图 \ No newline at end of file diff --git "a/\345\220\264\345\220\214\345\255\246\347\232\204\351\237\263\344\271\220\347\233\222/music.py" "b/\345\220\264\345\220\214\345\255\246\347\232\204\351\237\263\344\271\220\347\233\222/music.py" new file mode 100644 index 0000000..dae49c7 --- /dev/null +++ "b/\345\220\264\345\220\214\345\255\246\347\232\204\351\237\263\344\271\220\347\233\222/music.py" @@ -0,0 +1,81 @@ +import requests +import json +import time +import sys +import os + + +def show_progress_bar(): + for i in range(1, 51): + sys.stdout.write(f'\r{i * 2}% |{"■" * i}') + sys.stdout.flush() + time.sleep(0.125) + sys.stdout.write('\n') + + +def kugou_music_download(): + while True: + keyword = input('请输入歌曲名或歌手名(输入"exit"退出程序):') + keyword = keyword.strip() + + if keyword.lower() == 'exit': + print('谢谢使用吴同学的音乐盒,程序已退出!') + sys.exit() + + # 获取搜索结果gequxinxi + url = f'https://songsearch.kugou.com/song_search_v2?keyword={keyword}&page=1&pagesize=10&userid=0&clientver=&platform=WebFilter&filter=2&iscorrection=1&privilege_filter=0' + response = requests.get(url) + search_json_data = json.loads(response.text) + music_hash = {} + music_id = {} + for search_data in search_json_data['data']['lists']: + music_hash[search_data['FileName']] = search_data['FileHash'] + music_id[search_data['FileName']] = search_data['AlbumID'] + + # 歌曲列表 + music_list = list(music_hash.keys()) + + # 打印搜索结果 + for i in range(len(music_list)): + print("{}-:{}".format(i + 1, music_list[i])) + + # 用户选择下载歌曲序号 + music_serial_number = int(input('请输入你想下载的歌曲序号:')) + + # 获取歌曲下载链接 + url = f'https://wwwapi.kugou.com/yy/index.php?r=play/getdata&hash={music_hash[music_list[music_serial_number - 1]]}&album_id={music_id[music_list[music_serial_number - 1]]}&mid=1' + response = requests.get(url) + music_json_data = json.loads(response.text) + + try: + # 获取歌曲备用下载链接 + music_href = music_json_data['data']['play_backup_url'] + music_response = requests.get(music_href) + music_content = music_response.content + + try: + # 创建保存文件夹 + os.makedirs('D:/吴同学的音乐盒', exist_ok=True) + except Exception as e: + print(e) + finally: + # 下载歌曲并保存 + music_path = f'D:/吴同学的音乐盒/{music_list[music_serial_number - 1]}.mp3' + with open(music_path, 'wb') as f: + print('正在下载中...') + f.write(music_content) + show_progress_bar() + print(f'{music_list[music_serial_number - 1]}.mp3 下载成功!') + + # 输出下载路径给用户 + print(f'歌曲下载路径:{music_path}') + + except: + print('对不起,没有该歌曲的版权!') + + +if __name__ == '__main__': + print('欢迎使用吴同学的音乐盒!') + print('GitHub: https://github.com/cnwutianhao') + kugou_music_download() + input()