python:想要什么资源,直接上去莽就完事了~

张春  金牌会员 | 2022-8-21 09:44:12 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 899|帖子 899|积分 2697

前言

嗨喽,大家好呀,这里是魔王~
我们空闲时都会听听音乐,放松一下自己的心情,每个人都会有自己喜欢的歌手或歌
但是通常一个平台不能完全找到,因为版权原因,经常需要几个软件跨着听,非常的麻烦
那么现在,我们直接来用代码全部下载下来用本地播放器播放,美滋滋!
 开发环境:


  • 版 本:python3.8
  • 编辑器:pycharm
所使用模块


  • requests
  • prettytable
这两个都是第三方模块,所以我们需要安装:

  • win + R 输入cmd 输入安装命令 pip install 模块名 如果出现爆红 可能是因为 网络连接超时 切换国内镜像源
  • 在pycharm中点击Terminal(终端) 输入安装命令
如何配置pycharm里面的python解释器?


  • 选择file(文件) >>> setting(设置) >>> Project(项目) >>> python interpreter(python解释器)
  • 点击齿轮, 选择add
  • 添加python安装路径
pycharm如何安装插件?


  • 选择file(文件) >>> setting(设置) >>> Plugins(插件)
  • 点击 Marketplace 输入想要安装的插件名字 比如:翻译插件 输入 translation / 汉化插件 输入 Chinese
  • 选择相应的插件点击 install(安装) 即可
  • 安装成功之后 是会弹出 重启pycharm的选项 点击确定, 重启即可生效
流程思路

本次主要实现


  • 搜索功能
  • 下载歌曲功能
搜索功能


  • 发送请求 向以前的搜索功能接口发送 请求
  • 获取数据 获取所有歌曲信息数据
  • 解析数据 歌曲 歌手名 专辑 歌曲mid(用来下载歌曲必须要的参数)
  • 格式化输出
  • 下载歌曲功能
通过获取的歌曲mid 拼接 需要的音频url


  • 发送网络请求 需要的音乐url
  • 获取数据 获取 里面生成的 部分音乐链接 合并 (mp3 数据所在的链接了)
  • 发送请求 (mp3 数据所在的链接了)
  • 获取数据 音乐二进制数据
  • 保存数据
代码
  1. import requests     # 发送网络请求
  2. import json
  3. import prettytable as pt
  4. headers = {
  5.     'cookie': 'pgv_pvid=7300130020; tvfe_boss_uuid=242c5295a1cb156d; RK=6izJ0rkfNn; ptcz=622f5bd082de70e3e6e9a077923b48f72600cafd5e4b1e585e5f418570fa30fe; ptui_loginuin=1321228067; luin=o3452264669; o_cookie=3452264669; ts_uid=5501087131; fqm_pvqid=89ea2cc7-6806-4091-989f-5bc2f2cdea5c; lskey=00010000d96bdb23303bc141246a5c2f9a02cf45acf079eaab6645fdc10923e7a0eaac09aa24533ab1299555; fqm_sessionid=d77623f3-4dd0-4709-8e50-a34986b17344; pgv_info=ssid=s4530794666; ts_last=y.qq.com/; ts_refer=ADTAGmyqq; _qpsvr_localtk=0.8458135546904957; euin=oK6kowEAoK4z7eclow6qoiSz7z**; psrf_qqrefresh_token=; psrf_qqaccess_token=; wxuin=1152921504872193707; psrf_qqopenid=; wxrefresh_token=53_FHlMDgGCCfOUCXRxCMGFGYHxwtDV0_rZANu84l_KrYtPYRVSWqpxoWqojdj1coj4CF_H4qNrXw0WrZtQdlsozcwYQbVp0SepI9Jmm_Pfhjk; qqmusic_key=W_X_3mJrl760n0lDWkgqqBhBMX2VPnH1PNwwUZjvNkmSnurNjTTap1J6gjetIU50hraK3AjHgw5T4ay2R3; qm_keyst=W_X_3mJrl760n0lDWkgqqBhBMX2VPnH1PNwwUZjvNkmSnurNjTTap1J6gjetIU50hraK3AjHgw5T4ay2R3; psrf_qqunionid=; tmeLoginType=1; wxunionid=oqFLxsgDOwYRnPDffuK5UINv958c; wxopenid=opCFJw5Vvcf24VLQSyNpKAX6gt3I; wxuin=1152921504872193707; qm_keyst=W_X_3mJrl760n0lDWkgqqBhBMX2VPnH1PNwwUZjvNkmSnurNjTTap1J6gjetIU50hraK3AjHgw5T4ay2R3; login_type=2'
  6. }
  7. name = input('请输入你想要下载的歌曲或者歌手名称:')
  8. # 1. 发送请求 向以前的搜索功能接口发送 请求
  9. 源码、资料、解答加Q裙:832157862领取~
  10. url = f'https://c.***/soso/fcgi-bin/client_search_cp?p=1&n=10&w={name}'
  11. response = requests.get(url)
  12. # print(response)
  13. # 2. 获取数据 获取所有歌曲信息数据
  14. json_str = response.text
  15. # 3. 解析数据 歌曲 歌手名 专辑 歌曲mid(用来下载歌曲必须要的参数)
  16. json_str = json_str[9: -1]
  17. json_dict = json.loads(json_str)
  18. song_list = json_dict['data']['song']['list']
  19. tb = pt.PrettyTable()
  20. tb.field_names = ['序号', '歌名', '歌手', '专辑']
  21. music_info_list = []
  22. count = 0
  23. # 4. 格式化输出
  24. for song in song_list:
  25.     songname = song['songname']
  26.     songmid = song['songmid']
  27.     singer = song['singer'][0]['name']
  28.     albumname = song['albumname']
  29.     tb.add_row([count, songname, singer, albumname])
  30.     music_info_list.append([songmid, songname, singer])
  31.     count += 1
  32. print(tb)
  33. while True:
  34.     input_index = eval(input('请输入你要下载的歌曲序号(-1)退出:'))
  35.     if input_index == -1:
  36.         break
  37.     download_info = music_info_list[input_index]
  38.     songmid = download_info[0]
  39.     # 1. 通过获取的歌曲mid 拼接 需要的音乐url
  40.     music_info_url = 'https://u.***/cgi-bin/musicu.fcg?data={"req":{"module":"CDN.SrfCdnDispatchServer","method":"GetCdnDispatch", "filename":"M800","param":{"guid":"8846039534","calltype":0,"userip":""}},"req_0":{"module":"vkey.GetVkeyServer","method":"CgiGetVkey","filename":"M800","param":{"guid":"8846039534","songmid":["%s"],"songtype":[0],"uin":"1152921504784213523","loginflag":1,"platform":"20"}},"comm":{"uin":"1152921504784213523","format":"json","ct":24,"cv":0}}' % songmid
  41.     # print(music_info_url)
  42.     # 2. 发送网络请求 需要的音乐url
  43.     json_data = requests.get(url=music_info_url, headers=headers).json()
  44.     # 3. 获取数据 获取 里面生成的 部分音乐链接 合并 (mp3 数据所在的链接了)
  45.     purl = json_data['req_0']['data']['midurlinfo'][0]['purl']
  46.     media_url = 'https://dl.stream.qqmusic.qq.com/' + purl
  47.     # 4. 发送请求 (mp3 数据所在的链接了)
  48.     # 5. 获取数据 音乐二进制数据
  49.     music_data = requests.get(media_url).content
  50.     # 6. 保存数据
  51.     with open(f'歌曲下载/{download_info[1]}-{download_info[2]}.mp3', mode='wb') as f:
  52.         f.write(music_data)
  53.     print(f'{download_info[1]}, 下载完成!')
复制代码
 
尾话

好啦,这篇文章就到这里啦~对你有帮助就点赞收藏一下吧!

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

张春

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表