一:在已经通过axios和vue-cli本地服express通过地址获取到songmid这个参数
在js里面地址和参数如下:
// 获取歌手和歌曲的详细信息
export function getSingerDetail (singermid) {
const url2 = '/api/getSingerDetail'
const data2 = Object.assign({}, commonPramas, {
platform: 'yqq',
needNewCode: 0,
order: 'listen',
begin: 0,
num: 30,
songstatus: 1,
singermid: singermid })
return Axios.get(url2, { params: data2 }).then(response => {
return Promise.resolve(response.data)
})
}
在本地请求,偏于用伪头获取导数据,在webpack.dev.conf.js里面的 devServer 对象 里面的 before(app){ } 方法里面加,具体如下:
// 歌手页面的详情页面。获取歌手的详细信息数据
app.get('/api/getSingerDetail', function (req, res) {
const url = 'https://c.y.qq.com/v8/fcg-bin/fcg_v8_singer_track_cp.fcg?'
axios.get(url, {
headers: {
referer: 'https://c.y.qq.com/',
host: 'c.y.qq.com'
},
params: req.query
}).then((response) => {
res.json(response.data)
}).catch((e) => {
res.json({
ERR_OK: 1,
data: e
})
})
})
二 , 获取到歌手和歌曲的一些基本信息后,利用里面的songmid来获取vkey
封装的获取方法,具体如下:
// 通过songmid来获取vkey,拼接歌曲地址
// http://dl.stream.qqmusic.qq.com/{filename}?vkey={vkey}&fromtag=66
export function getVkey (songmid) {
const url3 = '/api/getSongVkey'
const data3 = Object.assign({}, commonPramas, {
g_tk: '678733985',
'hostUin': '0',
'format': 'json',
'inCharset': 'utf8',
'notice': '0',
'platform': 'yqq',
'needNewCode': '0',
'cid': '205361747',
'songmid': songmid,
'filename': 'C100' + songmid + '.m4a',
'guid': '1674273789'
})
return Axios.get(url3, { params: data3 }).then(response => {
return Promise.resolve(response.data)
})
}
还是在webpack.dev.conf.js中来创造请求,代码如下:
// 获取歌曲的vkey
app.get('/api/getSongVkey', function (req, res) {
const url = 'https://c.y.qq.com/base/fcgi-bin/fcg_music_express_mobile3.fcg?'
axios.get(url, {
headers: {
referer: 'https://c.y.qq.com/',
host: 'c.y.qq.com'
},
params: req.query
}).then((response) => {
res.json(response.data)
}).catch((e) => {
res.json({
ERR_OK: 1,
data: e
})
})
})
三:个去的播放地址,用刚请求的数据进行拼接:
http://dl.stream.qqmusic.qq.com/{filename}?vkey={vkey}&fromtag=66