前言
众所周知,网易云音乐是有一个外链音乐播放器的,但是很丑不能满足自定义样式的需求
但是要自己写音乐播放器,首当其冲的就是要拿到音乐的外链
步骤
从网页端入手
进入网易云网页端,随便找一首歌,打开开发者工具,选择网络监视器,过滤到媒体,然后开始播放
得到音乐的链接,例如
https://m10.music.126.net/20220817212854/fedae95b089bd54b2d268799c6d77509/ymusic/obj/w5zDlMODwrDDiGjCn8Ky/17242547712/c2e5/5632/bf80/e46176bd31a234f765838a94227e228f.mp3
一看到URL开头有日期就知道它不久就会过期,很显然得到的不是永久链接
百度
当你觉得烦心的时候,就上搜索引擎去搜搜吧
幸运的是,已经有人探过这条路了
网易云音乐歌曲的永久链接为
https://music.163.com/song/media/outer/url?id=${id}.mp3
将其中${id}
替换为歌曲网址里面的id,例如,某首歌曲的网址为
https://music.163.com/#/song?id=1403528956
则其外链为
https://music.163.com/song/media/outer/url?id=1403528956.mp3
访问该外链后会跳转到类似上一步的链接
然而,电台节目的外链并不符合此规律
审查元素
随便找一首电台曲目,审查元素发现
<tr id="songlist-1972051611">
...
<a href="/program?id=2509681727"></a>
...
</tr>
后者正是显示在地址栏的id,所以猜测前者是这首歌的文件名id
代入上一步的链接中,发现确实如此
批量处理
一个电台的曲目太多了,总不能每个都这么处理吧
想要批量处理,可以自己写爬虫
还有一个方法是RSS(其实一开始就看RSSHub就没那么麻烦了)
在RSSHub中有网易云音乐电台的接口,例如
https://rsshub.app/ncm/djradio/347317067
数字部分即为电台的id
RSS实际上是一个xml文档,但里面东西太多了,只需要id和歌名就行
写了个python来处理
from xml.etree import ElementTree as ET
import json
tree = ET.parse('./bgm.xml')
root = tree.getroot()
list = []
for i in root[0].findall('item'):
name = i.find('title').text
id = i.find('description').text.split('id=')[1].split('.mp3')[0]
list.append([int(id), name])
with open('./bgm.json', 'w') as f:
json.dump(list, f)
而你,我的朋友,你才是真正的英雄
6