优化代码

This commit is contained in:
binaryify 2017-08-17 15:08:49 +08:00
parent bf0057ba1d
commit 1d8b13de2f
25 changed files with 1774 additions and 2410 deletions

5
app.js
View File

@ -18,7 +18,7 @@ let cache = apicache.middleware
// next() // next()
// }) // })
app.use(cache('5 minutes')) // app.use(cache('2 minutes'))
app.use(express.static('public')) app.use(express.static('public'))
@ -166,9 +166,6 @@ app.use('/resource/like', require('./router/resource_like'))
// 搜索 // 搜索
app.use('/search', require('./router/search')) app.use('/search', require('./router/search'))
// 搜索 hot
app.use('/search/hot', require('./router/search_hot'))
//搜索 multimatch //搜索 multimatch
app.use('/search/multimatch', require('./router/search_multimatch')) app.use('/search/multimatch', require('./router/search_multimatch'))

View File

@ -163,6 +163,19 @@ $ set PORT=4000 && node app.js
**调用例子:** **调用例子:**
`/login/refresh` `/login/refresh`
### 获取用户详情
说明:登陆后调用此接口,传入用户 id, 可以获取用户详情
**必选参数:**
`uid` : 用户 id
**接口地址:**
`/user/detail`
**调用例子:**
`/user/detail?uid=32953014`
### 获取用户信息,歌单收藏mv, dj 数量 ### 获取用户信息,歌单收藏mv, dj 数量
说明:登陆后调用此接口,传入用户 id, 可以获取用户信息 说明:登陆后调用此接口,传入用户 id, 可以获取用户信息
@ -173,7 +186,7 @@ $ set PORT=4000 && node app.js
`/user/subcount` `/user/subcount`
**调用例子:** **调用例子:**
`/user/subcount` `/user/subcount?uid=32953014`
### 获取用户歌单 ### 获取用户歌单
@ -352,7 +365,7 @@ $ set PORT=4000 && node app.js
![搜索音乐](https://raw.githubusercontent.com/Binaryify/NeteaseCloudMusicApi/master/static/%E6%90%9C%E7%B4%A2.png) ![搜索音乐](https://raw.githubusercontent.com/Binaryify/NeteaseCloudMusicApi/master/static/%E6%90%9C%E7%B4%A2.png)
### 搜索建议 ### 搜索建议
说明:调用此接口,传入搜索关键词可获得搜索建议,搜索结果同时包含单曲,歌手,歌单,mv信息 说明:调用此接口,传入搜索关键词可获得搜索建议,搜索结果同时包含单曲,歌手,歌单,mv 信息
**必选参数:** **必选参数:**
`keywords` : 关键词 `keywords` : 关键词
@ -379,6 +392,18 @@ $ set PORT=4000 && node app.js
**调用例子:** **调用例子:**
`/search/suggest?keywords=海阔天空` `/search/suggest?keywords=海阔天空`
### 搜索多重匹配
说明:调用此接口,传入搜索关键词可获得搜索结果
**必选参数:**
`keywords` : 关键词
**接口地址:**
`/search/multimatch`
**调用例子:**
`/search/multimatch?keywords=海阔天空`
### 收藏单曲到歌单 ### 收藏单曲到歌单
说明:调用此接口,传入音乐 id和 limit 参数, 可获得该专辑的所有评论(需要登录) 说明:调用此接口,传入音乐 id和 limit 参数, 可获得该专辑的所有评论(需要登录)

2289
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -1,6 +1,6 @@
{ {
"name": "NeteaseCloudMusicApi", "name": "NeteaseCloudMusicApi",
"version": "2.6.6", "version": "2.6.7",
"description": "网易云音乐 NodeJS 版 API", "description": "网易云音乐 NodeJS 版 API",
"scripts": { "scripts": {
"start": "node app.js", "start": "node app.js",

View File

@ -1,16 +1,21 @@
const express = require('express') const express = require('express')
const router = express() const router = express()
const { createRequest } = require('../util/util') const { createWebAPIRequest } = require('../util/util')
router.get('/', (req, res) => { router.get('/', (req, res) => {
createRequest('/api/v2/banner/get', 'GET', null) const cookie = req.get('Cookie') ? req.get('Cookie') : ''
.then(result => { const data = {}
res.setHeader('Content-Type', 'application/json') createWebAPIRequest(
res.send(result) 'music.163.com',
}) '/weapi/v2/banner/get',
.catch(err => { 'POST',
res.status(502).send('fetch error') data,
}) cookie,
music_req => {
res.send(music_req)
},
err => res.status(502).send('fetch error')
)
}) })
module.exports = router module.exports = router

View File

@ -1,21 +1,22 @@
const express = require('express') const express = require('express')
const router = express() const router = express()
const { createRequest } = require('../util/util') const { createWebAPIRequest } = require('../util/util')
router.get('/', (req, res) => { router.get('/', (req, res) => {
const cookie = req.get('Cookie') ? req.get('Cookie') : ''
const data = {}
const id = req.query.id const id = req.query.id
createRequest( createWebAPIRequest(
'/api/song/lyric?os=osx&id=' + id + '&lv=-1&kv=-1&tv=-1', 'music.163.com',
'GET', '/weapi/song/lyric?os=osx&id=' + id + '&lv=-1&kv=-1&tv=-1',
null 'POST',
data,
cookie,
music_req => {
res.send(music_req)
},
err => res.status(502).send('fetch error')
) )
.then(result => {
res.setHeader('Content-Type', 'application/json')
res.send(result)
})
.catch(err => {
res.status(502).send('fetch error')
})
}) })
module.exports = router module.exports = router

View File

@ -1,17 +1,25 @@
const express = require('express') const express = require('express')
const router = express() const router = express()
const { createRequest } = require('../util/util') const { createWebAPIRequest } = require('../util/util')
const request = require('request')
router.get('/', (req, res) => { router.get('/', (req, res) => {
const cookie = req.get('Cookie') ? req.get('Cookie') : ''
const mvid = req.query.mvid const mvid = req.query.mvid
createRequest(`/api/mv/detail/?id=${mvid}&type=mp4`, 'GET', null) const data = {
.then(result => { id: mvid
res.setHeader('Content-Type', 'application/json') }
res.send(result)
}) createWebAPIRequest(
.catch(err => { 'music.163.com',
res.status(502).send('fetch error') `/weapi/mv/detail`,
}) 'POST',
data,
cookie,
music_req => {
res.send(music_req)
},
err => res.status(502).send('fetch error')
)
}) })
module.exports = router module.exports = router

View File

@ -7,7 +7,7 @@ router.get('/', (req, res) => {
const data = {} const data = {}
createWebAPIRequest( createWebAPIRequest(
'music.163.com', 'music.163.com',
'/api/personalized/playlist', '/weapi/personalized/playlist',
'POST', 'POST',
data, data,
cookie, cookie,

View File

@ -7,7 +7,7 @@ router.get('/', (req, res) => {
const data = {} const data = {}
createWebAPIRequest( createWebAPIRequest(
'music.163.com', 'music.163.com',
'/api/personalized/djprogram', '/weapi/personalized/djprogram',
'POST', 'POST',
data, data,
cookie, cookie,

View File

@ -7,7 +7,7 @@ router.get('/', (req, res) => {
const data = {} const data = {}
createWebAPIRequest( createWebAPIRequest(
'music.163.com', 'music.163.com',
'/api/personalized/mv', '/weapi/personalized/mv',
'POST', 'POST',
data, data,
cookie, cookie,

View File

@ -9,7 +9,7 @@ router.get('/', (req, res) => {
} }
createWebAPIRequest( createWebAPIRequest(
'music.163.com', 'music.163.com',
'/api/personalized/newsong', '/weapi/personalized/newsong',
'POST', 'POST',
data, data,
cookie, cookie,

View File

@ -7,7 +7,7 @@ router.get('/', (req, res) => {
const data = {} const data = {}
createWebAPIRequest( createWebAPIRequest(
'music.163.com', 'music.163.com',
'/api/personalized/privatecontent', '/weapi/personalized/privatecontent',
'POST', 'POST',
data, data,
cookie, cookie,

View File

@ -7,7 +7,7 @@ router.get('/', (req, res) => {
const data = {} const data = {}
createWebAPIRequest( createWebAPIRequest(
'music.163.com', 'music.163.com',
'/api/playlist/hottags', '/weapi/playlist/hottags',
'POST', 'POST',
data, data,
cookie, cookie,

View File

@ -1,23 +1,30 @@
const express = require('express') const express = require('express')
const router = express() const router = express()
const { createRequest } = require('../util/util') const { createWebAPIRequest } = require('../util/util')
router.get('/', (req, res) => { router.get('/', (req, res) => {
const cookie = req.get('Cookie') ? req.get('Cookie') : ''
const keywords = req.query.keywords const keywords = req.query.keywords
const type = req.query.type || 1 const type = req.query.type || 1
const limit = req.query.limit || 30 const limit = req.query.limit || 30
const offset = req.query.offset || 0 const offset = req.query.offset || 0
// 搜索单曲(1),歌手(100),专辑(10),歌单(1000),用户(1002) *(type)* // *(type)* 搜索单曲(1),歌手(100),专辑(10),歌单(1000),用户(1002)
const data = const data = {
's=' + keywords + '&limit=' + limit + '&type=' + type + '&offset=' + offset csrf_token: '',
createRequest('/api/search/pc/', 'POST', data) limit,
.then(result => { type,
res.setHeader('Content-Type', 'application/json') s: keywords
res.send(result) }
})
.catch(err => { createWebAPIRequest(
res.status(502).send('fetch error') 'music.163.com',
}) '/weapi/search/get',
'POST',
data,
cookie,
music_req => res.send(music_req),
err => res.status(502).send('fetch error')
)
}) })
module.exports = router module.exports = router

View File

@ -1,24 +0,0 @@
const express = require('express')
const router = express()
const { createWebAPIRequest } = require('../util/util')
router.get('/', (req, res) => {
const cookie = req.get('Cookie') ? req.get('Cookie') : ''
const data = {
csrf_token: '',
type: req.query.type || 1,
s: keywords || req.query.keywords || ''
}
createWebAPIRequest(
'music.163.com',
'/api/search/hot?type=1',
'POST',
data,
cookie,
music_req => res.send(music_req),
err => res.status(502).send('fetch error')
)
})
module.exports = router

View File

@ -7,7 +7,7 @@ router.get('/', (req, res) => {
const data = { const data = {
csrf_token: '', csrf_token: '',
type: req.query.type || 1, type: req.query.type || 1,
s: req.query.keywords || req.query.keywords || '' s: req.query.keywords || ''
} }
createWebAPIRequest( createWebAPIRequest(
@ -18,7 +18,6 @@ router.get('/', (req, res) => {
cookie, cookie,
music_req => { music_req => {
res.send(music_req) res.send(music_req)
console.log(Object.keys(JSON.parse(music_req).result))
}, },
err => res.status(502).send('fetch error') err => res.status(502).send('fetch error')
) )

View File

@ -6,7 +6,7 @@ router.get('/', (req, res) => {
const cookie = req.get('Cookie') ? req.get('Cookie') : '' const cookie = req.get('Cookie') ? req.get('Cookie') : ''
const data = { const data = {
csrf_token: '', csrf_token: '',
s: req.query.keywords || req.query.keywords || '' s: req.query.keywords || ''
} }
createWebAPIRequest( createWebAPIRequest(

View File

@ -11,7 +11,7 @@ router.get('/', (req, res) => {
} }
createWebAPIRequest( createWebAPIRequest(
'music.163.com', 'music.163.com',
`/api/v1/user/detail/${id}`, `/weapi/v1/user/detail/${id}`,
'POST', 'POST',
data, data,
cookie, cookie,

View File

@ -1,6 +1,6 @@
const assert = require('assert') const assert = require('assert')
const crypto = require('crypto') const crypto = require('crypto')
const { createRequest } = require("../util/util") const { createRequest } = require('../util/util')
describe('测试获取歌手专辑列表是否正常', () => { describe('测试获取歌手专辑列表是否正常', () => {
it('数据的 code 应该为200', done => { it('数据的 code 应该为200', done => {
@ -8,7 +8,7 @@ describe('测试获取歌手专辑列表是否正常', () => {
createRequest(`/api/album/${id}`, 'GET', null) createRequest(`/api/album/${id}`, 'GET', null)
.then(result => { .then(result => {
const code = JSON.parse(result).code const code = JSON.parse(result).code
console.log("code:" + code) console.log('code:' + code)
assert(code === 200) assert(code === 200)
done() done()
}) })

View File

@ -1,16 +1,16 @@
const assert = require('assert') const assert = require('assert')
const crypto = require('crypto') const crypto = require('crypto')
const { createWebAPIRequest } = require("../util/util") const { createWebAPIRequest } = require('../util/util')
describe('测试获取评论是否正常', () => { describe('测试获取评论是否正常', () => {
it('数据的 code 应该为200', done => { it('数据的 code 应该为200', done => {
const rid = 32311 const rid = 32311
const cookie = '' const cookie = ''
const data = { const data = {
"offset": 0, offset: 0,
"rid": rid, rid: rid,
"limit": 20, limit: 20,
"csrf_token": "" csrf_token: ''
} }
createWebAPIRequest( createWebAPIRequest(
'music.163.com', 'music.163.com',
@ -20,7 +20,7 @@ describe('测试获取评论是否正常', () => {
cookie, cookie,
music_req => { music_req => {
console.log({ console.log({
code:JSON.parse(music_req).code code: JSON.parse(music_req).code
}) })
assert(JSON.parse(music_req).code === 200) assert(JSON.parse(music_req).code === 200)
done() done()

View File

@ -1,20 +1,20 @@
const assert = require('assert') const assert = require('assert')
const crypto = require('crypto') const crypto = require('crypto')
const { createWebAPIRequest } = require("../util/util") const { createWebAPIRequest } = require('../util/util')
console.log("注意:测试登陆需要替换这里的账号密码!!!") console.log('注意:测试登陆需要替换这里的账号密码!!!')
describe('测试登录是否正常', () => { describe('测试登录是否正常', () => {
it('手机登录 code 应该等于200', done => { it('手机登录 code 应该等于200', done => {
const phone = "换成你的手机号" const phone = '换成你的手机号'
const password = "换成你的密码" const password = '换成你的密码'
let cookie = '' let cookie = ''
const md5sum = crypto.createHash('md5') const md5sum = crypto.createHash('md5')
md5sum.update(password) md5sum.update(password)
const data = { const data = {
'phone': phone, phone: phone,
'password': md5sum.digest('hex'), password: md5sum.digest('hex'),
'rememberLogin': 'true' rememberLogin: 'true'
} }
createWebAPIRequest( createWebAPIRequest(
@ -38,15 +38,15 @@ describe('测试登录是否正常', () => {
}) })
it('邮箱登录 code 应该等于200', done => { it('邮箱登录 code 应该等于200', done => {
const email = "换成你的163网易邮箱" const email = '换成你的163网易邮箱'
const password = "换成你的密码" const password = '换成你的密码'
const cookie = '' const cookie = ''
const md5sum = crypto.createHash('md5') const md5sum = crypto.createHash('md5')
md5sum.update(password) md5sum.update(password)
const data = { const data = {
'username': email, username: email,
'password': md5sum.digest('hex'), password: md5sum.digest('hex'),
'rememberLogin': 'true' rememberLogin: 'true'
} }
createWebAPIRequest( createWebAPIRequest(

View File

@ -1,14 +1,18 @@
const assert = require('assert') const assert = require('assert')
const crypto = require('crypto') const crypto = require('crypto')
const { createRequest } = require("../util/util") const { createRequest } = require('../util/util')
describe('测试获取歌词是否正常', () => { describe('测试获取歌词是否正常', () => {
it('数据应该有 lrc 字段', done => { it('数据应该有 lrc 字段', done => {
const id = 347230 const id = 347230
createRequest('/api/song/lyric?os=osx&id=' + id + '&lv=-1&kv=-1&tv=-1', 'GET', null) createRequest(
'/api/song/lyric?os=osx&id=' + id + '&lv=-1&kv=-1&tv=-1',
'GET',
null
)
.then(result => { .then(result => {
console.log(JSON.parse(result).lrc) // console.log(JSON.parse(result).lrc)
assert(typeof JSON.parse(result).lrc!=='undefined') assert(typeof JSON.parse(result).lrc !== 'undefined')
done() done()
}) })
.catch(err => { .catch(err => {

View File

@ -1,15 +1,15 @@
const assert = require('assert') const assert = require('assert')
const crypto = require('crypto') const crypto = require('crypto')
const { createWebAPIRequest } = require("../util/util") const { createWebAPIRequest } = require('../util/util')
describe('测试获取歌曲是否正常', () => { describe('测试获取歌曲是否正常', () => {
it('歌曲的 url 不应该为空', done => { it('歌曲的 url 不应该为空', done => {
const id = 347230 const id = 347230
const br = 999000 const br = 999000
const data = { const data = {
"ids": [id], ids: [id],
"br": br, br: br,
"csrf_token": "" csrf_token: ''
} }
const cookie = '' const cookie = ''

View File

@ -1,13 +1,14 @@
const assert = require('assert') const assert = require('assert')
const crypto = require('crypto') const crypto = require('crypto')
const { createRequest } = require("../util/util") const { createRequest } = require('../util/util')
describe('测试搜索是否正常', () => { describe('测试搜索是否正常', () => {
it('获取到的数据的 name 应该和搜索关键词一致', done => { it('获取到的数据的 name 应该和搜索关键词一致', done => {
const keywords = "海阔天空" const keywords = '海阔天空'
const type = 1 const type = 1
const limit = 30 const limit = 30
const data = 's=' + keywords + '&limit=' + limit + '&type=' + type + '&offset=0' const data =
's=' + keywords + '&limit=' + limit + '&type=' + type + '&offset=0'
createRequest('/api/search/pc/', 'POST', data) createRequest('/api/search/pc/', 'POST', data)
.then(result => { .then(result => {
console.log(JSON.parse(result).result.songs[0].mp3Url) console.log(JSON.parse(result).result.songs[0].mp3Url)

1630
yarn.lock Normal file

File diff suppressed because it is too large Load Diff