获取网易云音乐永久外链

@Pelom  August 17, 2022

前言

众所周知,网易云音乐是有一个外链音乐播放器的,但是很丑不能满足自定义样式的需求
但是要自己写音乐播放器,首当其冲的就是要拿到音乐的外链

步骤

从网页端入手

进入网易云网页端,随便找一首歌,打开开发者工具,选择网络监视器,过滤到媒体,然后开始播放
得到音乐的链接,例如

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)

引用


添加新评论