鱼C论坛

 找回密码
 立即注册
查看: 7163|回复: 40

[作品展示] 一个能让你免登录下载酷我里的音乐的程序(有鱼币)

[复制链接]
发表于 2022-8-13 19:25:53 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 python爱好者. 于 2022-8-13 20:08 编辑

想必大家在制作作品时,都遇到过背景音乐无法下载,这件极度、极度气人的事吧?
所以,为了让大家(还有我 )能更快将所需的背景音乐下载下来
我就做了这个:不需要打开 "网页版酷我音乐" 即可快速下载所需音乐的程序

废话不多说,上代码:
  1. import urllib.request
  2. import urllib.parse
  3. import json
  4. import os

  5. def down_load_music(music_address,down_load_address,information_list): #下载歌曲
  6.     #创建文件
  7.     with open(f"{down_load_address}\\{information_list[0]}.mp3","w") as f:
  8.         pass
  9.    
  10.     #写入歌曲
  11.     with open(f"{down_load_address}\\{information_list[0]}.mp3","wb") as f:
  12.         music = urllib.request.urlopen(music_address).read()
  13.         f.write(music)

  14. def get_music_address(information_list,music_num,second_headrs_words): #获取音乐地址
  15.     #获取此歌信息
  16.     for i in range(len(information_list)):
  17.         if i + 1 == music_num: #序号匹配
  18.             information_list = information_list[i]

  19.     #初始变量
  20.     url = f"http://www.kuwo.cn/api/v1/www/music/playUrl?mid={information_list[-1]}&type=music&httpsStatus=1&reqId=d3546381-1ad6-11ed-aa38-519c66b4fe28" #歌曲网页地址
  21.     second_headers = get_headers(second_headrs_words) #请求头2

  22.     #获取数据
  23.     req = urllib.request.Request(url,headers = second_headers)
  24.     response = json.loads(urllib.request.urlopen(req).read().decode("utf8"))

  25.     #返回结果
  26.     if response["code"] == -1: #报错
  27.         #提示
  28.         print("抱歉,您选的歌曲为付费歌曲,无法下载!")

  29.         #下一轮
  30.         return -1,-1

  31.     else:
  32.         music_address = response["data"]["url"]
  33.         return music_address,information_list

  34. def print_music_information(music_information): #打印歌曲信息
  35.     information_list = [] #储存重要信息
  36.    
  37.     i = 0
  38.     for each in music_information["data"]["list"]:
  39.         #获取信息
  40.         name = each["name"] #作品名字
  41.         artist = each["artist"] #作者姓名
  42.         album = each["album"] #作品专辑
  43.         songTimeMinutes = each["songTimeMinutes"]
  44.         rid = each["rid"] #作品id

  45.         #储存信息
  46.         information_list.extend([[name,artist,album,songTimeMinutes,rid]])
  47.         
  48.         #打印信息
  49.         print(f"序号{i + 1}:/歌曲:{name}/,/歌手:{artist}/,/专辑:{album}/,/时长:{songTimeMinutes}/")
  50.         
  51.         i += 1

  52.     return information_list

  53. def get_music_information(music_name,music_page,first_headrs_words): #获取歌曲
  54.     #初始变量
  55.     url = f"http://www.kuwo.cn/api/www/search/searchMusicBykeyWord?key={urllib.parse.quote(music_name)}&pn={urllib.parse.quote(music_page)}&rn=30&httpsStatus=1&reqId=1947b511-1ac6-11ed-abe0-e348db15d8b3"
  56.     first_headers = get_headers(first_headrs_words) #请求头1

  57.     #获取数据
  58.     req = urllib.request.Request(url,headers = first_headers)
  59.     response = json.loads(urllib.request.urlopen(req).read().decode("utf8"))
  60.    
  61.     return response

  62. def get_headers(words): #生成请求头
  63.     headers = {each[0]:each[1] for each in [each.split(": ") for each in words.split("\n")]} #转换为字典
  64.    
  65.     return headers

  66. def first_try(music_name,music_page,first_headers_words):
  67.     try:
  68.         music_information = get_music_information(music_name,music_page,first_headers_words)
  69.         return music_information
  70.         
  71.     except urllib.error.HTTPError as reason:
  72.         if reason == "HTTP Error 504: Gateway Timeout": #暂时性网络连接失败
  73.             #提示
  74.             print("网络连接失败,正在重试中,请耐心等待!")

  75.             #重试
  76.             first_try()   

  77. def main():
  78.     #用户信息
  79.     music_name = input("请输入歌曲名称:")
  80.     music_page = input("请输入歌曲所在页数:")
  81.    
  82.     #初始变量
  83.     first_headers_words = """Accept: application/json, text/plain, */*
  84. Accept-Language: zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6
  85. Connection: keep-alive
  86. Cookie: _ga=GA1.2.38866944.1643424882; BusinessId={"std_plat":404,"std_dev":"d2b0d6c5-27ce-4b06-bf62-1e19b3ad6f84","std_imei":"d2b0d6c5-27ce-4b06-bf62-1e19b3ad6f84"}; _gid=GA1.2.432698325.1660354553; Hm_lvt_cdb524f42f0ce19b169a8071123a4797=1660254093,1660354553,1660356822,1660366722; Hm_lpvt_cdb524f42f0ce19b169a8071123a4797=1660367192; kw_token=UX6Z894LRHB; _gat=1
  87. Host: www.kuwo.cn
  88. Referer: http://www.kuwo.cn/search/list?key=%E5%AD%A4%E5%8B%87%E8%80%85
  89. User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.5112.81 Safari/537.36 Edg/104.0.1293.47
  90. csrf: UX6Z894LRHB""" #请求头1

  91.     second_headers_words = """Accept: application/json, text/plain, */*
  92. Accept-Language: zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6
  93. Connection: keep-alive
  94. Cookie: _ga=GA1.2.38866944.1643424882; BusinessId={"std_plat":404,"std_dev":"d2b0d6c5-27ce-4b06-bf62-1e19b3ad6f84","std_imei":"d2b0d6c5-27ce-4b06-bf62-1e19b3ad6f84"}; _gid=GA1.2.432698325.1660354553; Hm_lvt_cdb524f42f0ce19b169a8071123a4797=1660254093,1660354553,1660356822,1660366722; kw_token=DQ089P4PGZG; Hm_lpvt_cdb524f42f0ce19b169a8071123a4797=1660374530; _gat=1
  95. Host: www.kuwo.cn
  96. Referer: http://www.kuwo.cn/play_detail/198554068
  97. User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.5112.81 Safari/537.36 Edg/104.0.1293.47""" #请求头2

  98.     #获取歌曲信息(有概率报错)
  99.     music_information = first_try(music_name,music_page,first_headers_words)

  100.     #打印歌曲信息
  101.     information_list = print_music_information(music_information)

  102.     #让用户选择要下载的歌所对应的序列号
  103.     music_num = int(input("请输入歌曲序列号:"))

  104.     #获取歌曲地址(有概率报错)
  105.     try:
  106.         music_address,information_list = get_music_address(information_list,music_num,second_headers_words)
  107.         if music_address == -1: #需要跳一轮循环
  108.             return -1 #退出本轮循环
  109.         
  110.     except urllib.error.HTTPError as reason:
  111.         if reason == "HTTP Error 403: Forbidden": #无法访问
  112.             print("此歌无法访问,猜测原因应该是因为此歌的此版本为付费内容!")
  113.             return -1

  114.     #让用户选择要将歌曲下载在哪里
  115.     down_load_address = input(r"请输入存放歌曲的位置(文件夹),如:'C:\\test':")

  116.     #下载歌曲(有概率报错)
  117.     try:
  118.         down_load_music(music_address,down_load_address,information_list)

  119.     except PermissionError as reason:
  120.         if "[Errno 13] Permission denied:" in reason: #没有访问权限
  121.             print("抱歉,我们没有在此文件夹中创建文件的权力,请换个位置,如:'C:\\test':")


  122. if __name__ == "__main__":
  123.     #初始变量
  124.     running = True #程序是否继续执行

  125.     #主循环
  126.     while running:
  127.         main()


  128.         


复制代码


注意
1.此程序不可以下载付费歌曲
2.此程序并非与这个作品的交互过程相同,且原理也不一样
一个(大佬@青出于蓝 的)是需要:用户自己打开酷我并手动传入网页地址(url)参数的(注意:此处无贬义 ,因为一个追求的是小巧轻便;另一个则是"懒"),
一个(我的)是只需要在程序里操作的,
两者没有对比意义(因为原理不一样)
3.此程序创意来自大佬@青出于蓝  ,感谢!

最后附上一张程序效果展示图:
效果图.gif

评分

参与人数 3荣誉 +10 鱼币 +7 贡献 +6 收起 理由
Passepartout + 1 + 1 无条件支持楼主!
hveagle + 4 + 1 + 1
青出于蓝 + 5 + 5 + 5 鱼C有你更精彩^_^

查看全部评分

本帖被以下淘专辑推荐:

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2022-8-13 19:29:43 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-8-13 19:31:33 | 显示全部楼层
python爱好者. 发表于 2022-8-13 19:29
@isdkz @青出于蓝 @shiyouroc
来看看...

对了,抱歉,最近一直没更新,因为最近一直在听网课和写无尽的作业
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-8-13 19:33:17 | 显示全部楼层

回帖奖励 +4 鱼币

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2022-8-13 19:33:53 | 显示全部楼层

回帖奖励 +4 鱼币

感谢分享!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-8-13 19:45:41 | 显示全部楼层
感谢楼主的无私分享
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-8-13 19:46:18 | 显示全部楼层

回帖奖励 +4 鱼币

向大佬学习
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-8-13 19:47:06 | 显示全部楼层

回帖奖励 +4 鱼币

前来围观支持
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-8-13 20:04:26 | 显示全部楼层
学习一下

评分

参与人数 1荣誉 +5 鱼币 +5 贡献 +3 收起 理由
python爱好者. + 5 + 5 + 3 鱼C有你更精彩^_^

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-8-13 20:09:51 | 显示全部楼层
又稍微改了一下,提升了防报错的机制
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-8-13 21:05:21 | 显示全部楼层

回帖奖励 +4 鱼币

我也干这事,干一半,被你完成了。

评分

参与人数 1荣誉 +3 鱼币 +3 贡献 +3 收起 理由
python爱好者. + 3 + 3 + 3 鱼C有你更精彩^_^

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-8-13 21:15:22 | 显示全部楼层

回帖奖励 +4 鱼币

6666
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2022-8-13 21:17:01 | 显示全部楼层

回帖奖励 +4 鱼币

付费的无法下载吗??

评分

参与人数 1荣誉 +2 鱼币 +2 贡献 +2 收起 理由
python爱好者. + 2 + 2 + 2 是的

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-8-13 21:20:32 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2022-8-13 21:55:54 | 显示全部楼层

回帖奖励 +4 鱼币

厉害

评分

参与人数 1荣誉 +5 鱼币 +5 贡献 +3 收起 理由
python爱好者. + 5 + 5 + 3 鱼C有你更精彩^_^

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2022-8-13 22:48:30 | 显示全部楼层

回帖奖励 +4 鱼币

66666
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-8-13 22:50:54 | 显示全部楼层

回帖奖励 +4 鱼币

大佬6666666666666666666666
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-8-14 00:35:31 | 显示全部楼层

回帖奖励 +4 鱼币

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2022-8-14 08:56:55 | 显示全部楼层

回帖奖励 +4 鱼币

评分

参与人数 1荣誉 +3 鱼币 +3 贡献 +3 收起 理由
python爱好者. + 3 + 3 + 3 鱼C有你更精彩^_^

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2022-8-14 09:33:12 | 显示全部楼层

回帖奖励 +4 鱼币

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-5-6 04:44

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表