理想下载站 手游攻略 新游动态 练习:通过nodejs实现网易云音乐批量下载或单次下载

练习:通过nodejs实现网易云音乐批量下载或单次下载

时间:2025 12 11 20:44:13 来源: 浏览:18

其实练习:通过nodejs实现网易云音乐批量下载或单次下载的问题并不复杂,但是又很多的朋友都不太了解,因此呢,今天小编就来为大家分享练习:通过nodejs实现网易云音乐批量下载或单次下载的一些知识,希望可以帮助到大家,下面我们一起来看看这个问题的分析吧!

如果您只是想下载某首歌曲,实际上不需要编写代码。毕竟浏览器有很多获取文件的功能。但如果要大量下载,这种重复性的工作就需要程序来完成。

如果是客户端,可以右键获取单个链接,然后在浏览器中打开。如下:

打开浏览器并按F12打开控制台

在浏览器中输入链接后,进入页面,然后按F12,打开控制台,然后点击网络,进入TAB页面。

寻找网络

然后点击播放按钮,检查网络即可看到音乐的播放地址。

底部播放地址

音乐链接地址

通过以上操作即可下载单个音乐文件。如果你不怕麻烦,也可以按照这个操作下载整个播放列表的所有歌曲文件。

当然,作为一名程序员,你绝对不会允许这样的劳动浪费。

通过程序批量下载

下面是专业知识,至少需要了解js、nodejs以及少量的代码编写操作。

准备

后端API服务

下载音乐的客户端

nodejs环境(如何安装就不详细说了,网上还有很多)

第1 步- 构建后端API

github上有网易云音乐的API接口服务,地址如下:https://github.com/chrunlee/netmusic-node

通过git下载到本地后,启动它,然后将其作为API服务器来请求调用获取数据。

我将提供一个我在这里使用的。使用时请注意克制。我不想IP被封后就无法使用了。希望不要用来自动爬取下载程序。它只能由您自己用来下载播放列表。 http://music.byyui.com/

第2步-构建本地客户端下载工具

由于这个工具只是我自己用的,没有发布到github上,所以这里只发布几个核心代码供大家参考。

//api.js

//var api='http://localhost:3000'; var api='http://music.byyui.com'; //获取歌曲列表var superagent=require('superagent'); function MusicLoad ( opt ) { var _default={ isSingle : false, getListUrl : api+'/v1/playlist/detail', getSingleInfo : api+'/v1//music/detail', getUrl : api+'/v1/music/url' , fs : require('fs'), url require('url'), http : require('http'), async require('async') }; this.opt=Object.assign(_default,opt); this.init();}MusicLoad.prototype.init=function (){ var that=this,opt=that.opt; if(opt.isSingle){ that.getUrl(that.opt.id,null,function(){ console.log('下载完成。'); }) ; }其他{ that.getList(); }}MusicLoad.prototype.getList=function( ){ var that=this; superagent.get(that.opt.getListUrl+'?id='+that.opt.id+'limit=300').end(function(err,res){ if(err){ console.log('无法获取播放列表') return; } var txt=res.text; var data=JSON.parse(txt); var list=data.playlist.tracks; console.log(list.length); '+data.playlist.creator.nickname+',共:首歌曲'+list.length+'song'); if(list.length 0){ //循环,获取一首歌曲,下载一首歌曲var data=list. map(function(item){ return { id : item.id, name : item.name }; }); //开始判断if(that.opt.start !==0){ data=data.slice(that. opt.start,data.length); console.log('从'+that.opt.start+' 下载,总计'+(data.length - that.opt.start)); } that.list=data;startLoad(); }else{ console.log('抱歉,此播放列表中没有可供下载的歌曲。

'); } });}MusicLoad.prototype.startLoad=function(){ var that=this; var list=that.list,async=that.opt.async; async.mapLimit(list,1,function(item, cb){ that.getUrl(item.id,item.name,cb); },function(){ console.log('全部下载完成;'); }) ;}MusicLoad.prototype.getUrl=function(id, name,cb){ var that=this; var target=that.opt.getUrl+'?id='+id+'br=320000';控制台.log(目标); superagent.get(target).end(function(err ,res){ if(err){ console.log(err); cb(err,null); return; } var data=JSON.parse(res.text); var url=data.data[0].url; if(typeof url=='string'){ that.download({id : id,name : 名称,url : url},cb); ('未获取歌曲的URL'); cb (null,null);}MusicLoad.prototype.download=function(item,callback){ var download=this.opt.download,fs=this .opt.fs,url=this.opt.url,http=this.opt.http; var href=item.url, myHref=url.parse(href); var 主机=myHref.host,路径名=myHref.pathname; var http_client=http.request({ hostname: 主机, method: 'GET ', path: 路径名, headers: { '接受': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8', '接受语言': 'zh-CN,zh;q=0.8,gl;q=0.6,zh-TW;q=0.4', '连接': '保持- alive', //'Content-Type': 'application/x-www-form-urlencoded', //'Referer': 'http://music.163.com', 'Pragma':'no-cache', 'Host' : host, 'User-Agent': 'Mozilla/5.0 ( iPhone; CPU iPhone OS 9_1 like Mac OS err) { //回调,错误报告callback(err,null) }); var 文件缓冲区=[]; res.on('data',function(chunk){ fileBuffer.push(new Buffer(chunk)); }) ; res.on('end',function(){ var Total=Buffer.concat(fileBuffer); fs.appendFile(download+'/'+(item.name || item.id) +'.mp3',total, function (err){ console.log('歌曲下载完成:'+item.name); }); http_client.end();}var Down=function (opt){ new MusicLoad(opt);}module.exports=Down;

上面的api.js是调用API服务的工具类,包括下载和获取数据。以下是调用api.js的。。函数://app.js

//引入api.js文件let api=require('./api'); //调用api({ isSingle : false, //是否是单曲ID : '87950133', //单曲ID还是歌单ID start : 0,//从哪个号码开始下载download : 'f:/redmusic/'//歌曲保存位置});console.log('开始下载歌曲,成功率不高');

保存后,执行节点应用程序。

执行效果图

用户评论

烟花巷陌

这个真不错!我一直想找一个方法批量下载网易云音乐歌曲,现在终于找到了!

    有16位网友表示赞同!

龙吟凤

看了下代码,感觉有点复杂了,需要学习一下 Node.js。我英语不太好,能不能有人把博客里的代码翻译一下?

    有6位网友表示赞同!

凉凉凉”凉但是人心

哇塞,太厉害了!直接秒杀了我的小笔记本里那些下载软件!这个方法简单又实用,终于可以摆脱手机的限制了,轻松听完整首歌!

    有9位网友表示赞同!

何年何念

我曾经也在网上找过类似的方法,很多都是乱七八糟的代码,或者需要付费才能使用。这次竟然免费开源真是太好了!一定要试试看!

    有6位网友表示赞同!

凉笙墨染

这个方法可以用在其他平台吗?比如QQ音乐或虾米音乐?感觉很厉害。

    有14位网友表示赞同!

绝版女子

虽然有单曲下载,但我更想要一个能够批量下载歌单的功能,这样可以一次性下载完整播放列表就更方便了!

    有17位网友表示赞同!

为爱放弃

赞!终于不用担心网易云音乐更新之后,原来收藏的歌曲就不再可以在线听了!这个方法太棒了!

    有17位网友表示赞同!

挽手余生ら

我试了一下,发现下载速度比我常用的软件要慢很多。不知道有什么办法可以加快下载速度吗?另外,有没有办法只下载需要文件格式转换的文件?

    有9位网友表示赞同!

﹏櫻之舞﹏

虽然这篇文章写的很不错,但是代码确实有点复杂,对于新手来说可能不太友好。希望作者能加上一些更详细的解释和教程!

    有10位网友表示赞同!

古巷青灯

这个方法太赞了,我现在收藏的所有网易云音乐的歌单都可以轻松下载,再也不怕断网了!

    有8位网友表示赞同!

日久见人心

我担心使用这种程序下载音乐可能会侵犯版权。有没大神可以澄清一下这个问题? 还是应该优先选择正版的音乐平台支持创作者?

    有15位网友表示赞同!

漫长の人生

这个方法对我来说很完美啊!现在我可以随时随地听我最喜欢的网易云音乐播放列表了!

    有5位网友表示赞同!

爱情的过失

感觉这篇文章有点过于简略,很多细节都没有讲解清楚,比如如何设置下载路径或选择下载格式等等。希望作者能补充一些更详细的内容!

    有13位网友表示赞同!

别伤我i

如果可以支持多种下载引擎就好了,例如aria2c,这样速度会更快一些。

    有17位网友表示赞同!

念旧是个瘾。

网易云音乐的用户体验一直都比较差劲,我经常遇到歌曲无法播放或者页面卡顿的情况。幸好有这个工具解救我了!感谢作者!

    有7位网友表示赞同!

你的眸中有星辰

这篇文章非常有帮助,让我终于可以不用再使用那些臃肿且不稳定的第三方软件下载网易云音乐的歌曲了.

    有18位网友表示赞同!

汐颜兮梦ヘ

我希望作者能开发一个更完善的版本,支持更多功能,例如,批量下载用户喜欢的歌手歌曲、生成MP3合集等等

    有6位网友表示赞同!

巷口酒肆

这个方法太棒了!我现在可以把我所有喜欢的歌都保存下来了,再也不用担心断网听不了音乐了!

    有16位网友表示赞同!

标题:练习:通过nodejs实现网易云音乐批量下载或单次下载
链接:https://www.ltthb.com/news/xydt/125365.html
版权:文章转载自网络,如有侵权,请联系删除!
资讯推荐
更多
三角洲行动11月19日密码是什么

三角洲行动每个地图里的密码门每天都会按时更新密码。你要收集各种线索串联起来再去密码门输入正确的密码才

2025-11-19
心动小镇11月19日溜溜橡木和无暇荧石采集位置在哪

心动小镇溜溜橡木和无暇荧石可是每日必采的稀有资源,不过要是想收集它们的话,得先完成【寻找星灵】主线任务解

2025-11-19
星际战甲伤害值查看方法攻略-伤害值在哪看

星际战甲里打出伤害后有很多小伙伴都还找不到查看具体数值的地方,不过毕竟要了解自己的输出数据,才能更好规划

2025-11-19
荒原曙光战宠图文详情介绍

荒原曙光一份实力实用又强力的战宠名单给大家,输出辅助等等系别的战宠全都有,轻轻松松帮你根据不同的战斗场景

2025-11-19
[!--temp. The end of the content page--]