一个音乐搜索模块~ 用的网易云音乐PC端API
发布于 10 年前 作者 zvenshy 41720 次浏览 最后一次编辑是 8 年前 来自 分享

学弟想要做一个WEB电台,需要搜索功能,然后就想封装一个node模块专门用来干这个(后面还会做JSONP API)。 本人喜欢用网易云音乐听歌,所以抓包分析了一下它的API(逼我下客户端 = = ) 这是链接 下面贴代码,作为一枚纯正的node新人,虚心接受大家的批评教育!

var request = require('request');
var qs = require('querystring');
//我的一个辅助函数库(未完成)
var v = require('vutils');
//Default config
var origin = 'http://music.163.com';
var defaultConfig = {
	headers: {
		'Origin': origin,
		'Referer': origin,
		'Content-Type': 'application/x-www-form-urlencoded'
	}
};
//获取URL
var _get163Url = {
	search: function () {
		return origin + '/api/search/suggest/web';
	},
	artist: function (key) {
		return origin + '/api/artist/' + key;
	},
	album: function (key) {
		return origin + '/api/album/' + key;
	},
	song: function () {
		return origin + '/api/song/detail';
	},
	mv: function () {
		return origin + '/api/mv/detail';
	},
	lyc: function () {
		return origin + '/api/song/lyric';
	}
};
//参数配置
var setConfig = function (c) {
	c = v.extend(v.clone(defaultConfig), c);
	var method  = c.method,
		resType = c.resType,
		body    = c.body;
	c.uri = _get163Url[resType](c.key);
	c.body = body ? qs.encode(body) : '';
	if (method === 'GET') {
		if (resType === 'song') c.body = c.body.replace('=', '=%5B') + '%5D';
		c.uri += '?' + c.body;
		delete c.body;
	}
	if (c.key) delete c.key;
	delete c.resType;
	console.log(c);
	return c;
};
//request music.163.com API
var api = function (c, callback) {
	request(setConfig(c), callback);
};

//module exports extend
v.extend(exports, {
	search: function (key, callback,args) {
		if (!key || !v.isFunction(callback)) return false;
		args = args ?
			v.extend(args, {s: key}) :
			{s: key, limit: 3};
		return api({
			resType: 'search',
			method: 'POST',
			body: args
		}, callback);
	},
	id: function (key, resType, callback, args) {
		if (!key || !v.isFunction(callback)) return false;
		if (resType === 'song' || resType === 'mv' || resType === 'lyc') {
			var idObj = resType === 'song' ? {ids: key } : {id: key};
			args = args ? v.extend(args, idObj) : idObj;
		}
		return api({
			resType: resType,
			key: key,
			method: 'GET',
			body: args || undefined
		}, callback);
	}
});
12 回复

抓包分析?用wireshark么?

@chapgaga 是用的这个~

@AdamsMao 欢迎使用我的模块丰富功能啊!

@zvenshy 抓包很难吧,亲:)

@chapgaga 不难啊 配合postman测试API 用不了多少时间的

@zvenshy 呵呵,为何不用firebug分析呢?

@chapgaga 我分析的客户端呀

@zvenshy wireshark抓到的数据太多,分析起来太麻烦了吧:(

@chapgaga 有筛选功能 足以快速找到所需的数据 完全不会麻烦 而且它的信息会更全 应用场景也更多 当然如果是一般网页的request浏览器插件早够用了

楼主是怎么抓取数据包的?我用fiddle2怎么截取不到网易云音乐pc客户端的数据

楼主,我正在试图自己抓包分析网易云音乐的API,请问楼主最近有没有时间指点一二?

回到顶部