a级 久久,99里面有精品,亚洲av一级免费在线观看,成人免费中文字幕

練習(xí):通過nodejs實(shí)現(xiàn)網(wǎng)易云音樂批量下載或者單下載

從豆瓣轉(zhuǎn)到網(wǎng)易云后,發(fā)現(xiàn)了不少好聽的歌曲,然鵝.如果是客戶端的話,可以右鍵拿到單曲鏈接,然后在瀏覽器打開。以上操作即可將單曲音樂的文件下載下來,如果不怕麻煩,也可以按照如此的操作,將整個(gè)歌單的歌曲文件全部下載下來。通過程序進(jìn)行批量下載上有一個(gè)網(wǎng)易云音樂的API接口服務(wù),地址如下:為調(diào)用API服務(wù)的工具類,包括下載以及獲取數(shù)據(jù),下面的是調(diào)用api....

2020-5-8更新:在線下載網(wǎng)易云VIP音樂,直接復(fù)制地址(去掉#),或者從客戶端復(fù)制鏈接。

從豆瓣切換到網(wǎng)易云后,發(fā)現(xiàn)好多好聽的歌mac用什么軟件下載音樂,但是鵝。。當(dāng)我想把這些歌拿下來扔到車?yán)锏臅r(shí)候,發(fā)現(xiàn)下載是不允許的。我可以聽還是不聽?這是不科學(xué)的。作為程序員,你必須迎接挑戰(zhàn)。

單打下載

如果你只想下載某首歌,你不需要寫代碼。畢竟瀏覽器獲取文件的功能很多,但是如果想要很多下載,這種重復(fù)性的工作就需要扔到程序里面去做。

如果是客戶端,可以右鍵獲取單個(gè)鏈接,然后在瀏覽器中打開。如下:

練習(xí):通過nodejs實(shí)現(xiàn)網(wǎng)易云音樂批量下載或單曲下載

打開瀏覽器按F12打開控制臺(tái)

在瀏覽器中輸入鏈接后,進(jìn)入頁(yè)面,然后按F12,打開控制臺(tái),點(diǎn)擊進(jìn)入TAB頁(yè)面。

練習(xí):通過nodejs實(shí)現(xiàn)網(wǎng)易云音樂批量下載或單曲下載

找到

然后點(diǎn)擊播放按鈕,音樂的播放地址會(huì)顯示在視圖中。

練習(xí):通過nodejs實(shí)現(xiàn)網(wǎng)易云音樂批量下載或單曲下載

底部播放地址

點(diǎn)擊鏈接,打開,復(fù)制mp3的播放地址,在另一個(gè)窗口輸入播放,右鍵保存到本地。

練習(xí):通過nodejs實(shí)現(xiàn)網(wǎng)易云音樂批量下載或單曲下載

音樂鏈接

以上操作可以下載下載單曲音樂文件。如果你不怕麻煩,也可以按照這個(gè)操作下載下載整個(gè)播放列表的所有歌曲文件。

當(dāng)然,作為程序員,這樣的浪費(fèi)勞動(dòng)是絕對(duì)不允許的。

按程序批處理下載

以下是專業(yè)知識(shí)mac用什么軟件下載音樂,至少需要js相關(guān)知識(shí)和少量代碼編寫操作。

初步步驟 1 - 設(shè)置后端 API

網(wǎng)易云音樂有一個(gè)API接口服務(wù),地址如下:

將 git下載 傳遞到本地后,啟動(dòng)它,然后將其作為 API 服務(wù)器來請(qǐng)求調(diào)用以獲取數(shù)據(jù)。

我在這里提供一個(gè)我使用的。請(qǐng)適度使用。我也不希望IP被封后無法使用。希望不要在自動(dòng)爬取下載的程序中使用,自己使用下載播放列表即可。

第 2 步 - 構(gòu)建本地客戶端下載工具

由于這個(gè)工具僅供我自己使用,并沒有放在上面,這里只是幾個(gè)核心代碼供大家參考。

// 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('下載完畢.');
        });
    }else{
        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);
        console.log('獲得'+data.playlist.creator.nickname+'的歌單,共計(jì)歌曲:'+list.length+'首');
        if(list.length > 0){
            //循環(huán),獲得一首,下載一首
            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+'處開始下載,共計(jì)'+(data.length - that.opt.start));
            }
            that.list = data;
            that.startLoad();
        }else{
            console.log('對(duì)不起,這個(gè)歌單沒有歌曲下載。');
        }
    });
}
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';
    console.log(target);
    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 : name,url : url},cb);
        }else{
            console.log('沒有獲得該歌曲的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 host = myHref.host,pathname = myHref.pathname;
    var http_client = http.request({
        hostname: host,
        method: 'GET',
        path: pathname,
        headers: {
            'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',
            'Accept-Language': 'zh-CN,zh;q=0.8,gl;q=0.6,zh-TW;q=0.4',
            'Connection': 'keep-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 X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1'
        }
    }, function(res) {
        res.on('error', function(err) {
            //回調(diào),報(bào)錯(cuò)
            callback(err,null);
        });
        var fileBuffer = [];
        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);
                callback(null,'over');
            });
        });
    });
    http_client.end();
}
var Down = function( opt ){
    new MusicLoad(opt);
}
module.exports = Down;

上面的api.js是調(diào)用API服務(wù)的工具類,包括下載和獲取數(shù)據(jù)。下面是調(diào)用api.js的入口函數(shù): //app.js

//引入api.js文件
let api = require('./api');
//調(diào)用
api({
    isSingle : false,//是否是單曲
    id : '87950133',//單曲ID或者歌單ID
    start : 0,//從第幾個(gè)開始下載
    download : 'f:/redmusic/'//歌曲保存位置
});
console.log('開始下載歌曲..成功率不高');

保存后,執(zhí)行node app。

練習(xí):通過nodejs實(shí)現(xiàn)網(wǎng)易云音樂批量下載或單曲下載

執(zhí)行效果圖

以上僅用于研究和學(xué)習(xí)。

發(fā)表評(píng)論

日本熟女一区| 国产免费私拍一区二区三区| 国产69精品久久久久久妇女迅雷| 色一情一伦一区二区三| 欧美性69无毒| 国产精品免费观看久久蜜芽| 哈尔滨市| 草民久久| 日韩欧无码一区二区三区免费不卡| 亚洲国产AV天堂永久无码 | 久久久久国产精品无码久久久久| 国产欧美精品一区二区色综合挤奶 | 91精品无码专区一区二区| 一道本在线视频色欲| 国产欧美亚洲日韩日韩| 亚洲AV无码成h人动漫电影按摩| 波多野结衣久久久中文字幕| 中文字幕无码在线播放| 蜜桃vs大香蕉| 日韩欧美一区二区国产精品| 视频思思久久免费国产| 美国香蕉福利导航| 激情久久九九| 人妻久久久久区二区三区| 日韩无码第一区二区三区四区| 日韩久久久无码毛片| 亚洲综合小说电影QVOD| 欧美黄在线播放| 中国少妇多毛BBWBBW高潮| 91亚洲国产精品一区二区| 精品亚亚洲成AV无码专区| 国产综合88| 欧美毛茸茸一区| 在线看片免费人成视频电影| 亚洲人人妻片| 国产亚洲品久久久久久久无码| 中文字幕 人妻 久久| 六十五路熟妇无码| 亚洲精品人成网线在线va| 久久网站黄| 精品久久久久久久|