优化代码

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()
// })
app.use(cache('5 minutes'))
// app.use(cache('2 minutes'))
app.use(express.static('public'))
@ -166,9 +166,6 @@ app.use('/resource/like', require('./router/resource_like'))
// 搜索
app.use('/search', require('./router/search'))
// 搜索 hot
app.use('/search/hot', require('./router/search_hot'))
//搜索 multimatch
app.use('/search/multimatch', require('./router/search_multimatch'))

View File

@ -163,6 +163,19 @@ $ set PORT=4000 && node app.js
**调用例子:**
`/login/refresh`
### 获取用户详情
说明:登陆后调用此接口,传入用户 id, 可以获取用户详情
**必选参数:**
`uid` : 用户 id
**接口地址:**
`/user/detail`
**调用例子:**
`/user/detail?uid=32953014`
### 获取用户信息,歌单收藏mv, dj 数量
说明:登陆后调用此接口,传入用户 id, 可以获取用户信息
@ -173,7 +186,7 @@ $ set PORT=4000 && node app.js
`/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)
### 搜索建议
说明:调用此接口,传入搜索关键词可获得搜索建议,搜索结果同时包含单曲,歌手,歌单,mv信息
说明:调用此接口,传入搜索关键词可获得搜索建议,搜索结果同时包含单曲,歌手,歌单,mv 信息
**必选参数:**
`keywords` : 关键词
@ -379,6 +392,18 @@ $ set PORT=4000 && node app.js
**调用例子:**
`/search/suggest?keywords=海阔天空`
### 搜索多重匹配
说明:调用此接口,传入搜索关键词可获得搜索结果
**必选参数:**
`keywords` : 关键词
**接口地址:**
`/search/multimatch`
**调用例子:**
`/search/multimatch?keywords=海阔天空`
### 收藏单曲到歌单
说明:调用此接口,传入音乐 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",
"version": "2.6.6",
"version": "2.6.7",
"description": "网易云音乐 NodeJS 版 API",
"scripts": {
"start": "node app.js",

View File

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

View File

@ -1,21 +1,22 @@
const express = require('express')
const router = express()
const { createRequest } = require('../util/util')
const { createWebAPIRequest } = require('../util/util')
router.get('/', (req, res) => {
const cookie = req.get('Cookie') ? req.get('Cookie') : ''
const data = {}
const id = req.query.id
createRequest(
'/api/song/lyric?os=osx&id=' + id + '&lv=-1&kv=-1&tv=-1',
'GET',
null
createWebAPIRequest(
'music.163.com',
'/weapi/song/lyric?os=osx&id=' + id + '&lv=-1&kv=-1&tv=-1',
'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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

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

View File

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

View File

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

View File

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

View File

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

View File

@ -1,18 +1,22 @@
const assert = require('assert')
const crypto = require('crypto')
const { createRequest } = require("../util/util")
const { createRequest } = require('../util/util')
describe('测试获取歌词是否正常', () => {
it('数据应该有 lrc 字段', done => {
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 => {
console.log(JSON.parse(result).lrc)
assert(typeof JSON.parse(result).lrc!=='undefined')
// console.log(JSON.parse(result).lrc)
assert(typeof JSON.parse(result).lrc !== 'undefined')
done()
})
.catch(err => {
done(err)
})
})
})
})

View File

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

View File

@ -1,13 +1,14 @@
const assert = require('assert')
const crypto = require('crypto')
const { createRequest } = require("../util/util")
const { createRequest } = require('../util/util')
describe('测试搜索是否正常', () => {
it('获取到的数据的 name 应该和搜索关键词一致', done => {
const keywords = "海阔天空"
const keywords = '海阔天空'
const type = 1
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)
.then(result => {
console.log(JSON.parse(result).result.songs[0].mp3Url)
@ -18,4 +19,4 @@ describe('测试搜索是否正常', () => {
done(err)
})
})
})
})

1630
yarn.lock Normal file

File diff suppressed because it is too large Load Diff