选用的音乐下载自网易云音乐,播放类代码如下:
class music(object):
def __init__(self, dic="sec_s",name="01"):
self.player = QMediaPlayer()
url = QtCore.QUrl.fromLocalFile(
r"sec_s/mus/003.mp3")
content = QMediaContent(url)
self.player.setMedia(content)
self.player.setVolume(25.0)
self.player.play()
self.volflag=-1
def playMusic(self,URL):
try:
#正常音量切换
if(self.volflag==0):
content = QMediaContent(QtCore.QUrl.fromLocalFile(URL))
self.player.setMedia(content)
self.player.setVolume(25.0)
self.player.play()
#前曲减弱
elif(self.volflag==-1):
for i in range(25,0,-5):
time.sleep(0.5)
print(i)
self.player.setVolume(i)
content = QMediaContent(QtCore.QUrl.fromLocalFile(URL))
self.player.setMedia(content)
self.player.setVolume(25.0)
self.player.play()
except:
print("播放失败")
出现的十分令人迷惑的问题是,这个代码对2017年以前下载的音乐有效,对2018年及以后下载的音乐无效,没有声音,也不报错。经过本机音乐播放器能够检测每个音乐都是能播放的,不存在下载失败问题,而且音乐也都不是付费歌曲,是没有会员也能下载的那种。
狒狒挠头.jpg
怀疑是网易云音乐的格式进行了改变
解决方案:
(爬虫用的好,监狱进的早)划掉,音乐不听话,那就自己下。
音乐下载代码如下,代码存在直接复制,但好几年前粘的了,如果有人知道是哪个大佬的博客我把链接补上。。。
song_id='32223222'
print(1);
url = "https://music.163.com/song/media/outer/url?id={}.mp3".format(song_id)
root ="D://PY工程//birth//"
path = root + url.split('?')[-1]
try:
if not os.path.exists(root):
os.mkdir(root)
if not os.path.exists(path):
kv = {'user-agent': '23332333'}
r = requests.get(url,headers=kv)
r.raise_for_status()
with open(path,'wb') as f:
f.write(r.content)
f.close()
print("保存成功")
else:
print("文件已存在")
except:
print("保存失败")
song_id是音乐的id,获取方法是右键,点击复制链接,会获得这样一串链接:
http://music.163.com/playlist?id=2313935583&userid=414587962
其中id就是歌曲id,userid是你的用户标签,填在下面这行代码的数字上
‘user-agent’: ‘23332333’
root是你要存音乐的位置路径
目前测试来看,这个方法下载非付费音乐是没有问题的,扔进音乐播放类里也能用了。