一:在已经通过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