糖尿病康复,内容丰富有趣,生活中的好帮手!
糖尿病康复 > vue.js最新版获取QQ音乐播放源

vue.js最新版获取QQ音乐播放源

时间:2021-02-02 17:22:16

相关推荐

vue.js最新版获取QQ音乐播放源

最近在学习使用vue写一个播放器,一直获取不到正确的播放源,QQ对这块限制更加严格了.按照之前的写法,现在已经不能获取到播放源了.

首先,要去抓取QQ音乐的播放源

1.首先在QQ音乐任意播放页面

2.进入开发者模式按F12即可,选择network,按ctrl+R进行筛选多媒体文件,按照size倒序,最大的就是我们要找的音乐文件了

3.选择如下图的选项(open in new tab)即可进入歌曲播放页面

4.如下链接就是播放器链接:其中这是歌曲名称:C400001J5QJL1pRQYB.m4a

名称里面的C1代表歌曲的音质大小C1表示文件小,C4表示文件大。例如:C4L0001ApDs72gYqUk.m4a这就是大文件,如下图

http://dl.stream./C400001J5QJL1pRQYB.m4a?vkey=5D8FB6B328D845F93A92F881C0EC819D8F377AC72786615BCAB0E7913CFF1DF2C6AA98FA110D7496D1D4671392617555D68586536ACD9B7B&guid=7981028948&uin=393651460&fromtag=66

下面来分析一下正确的播放源地址

http://dl.stream./C400001J5QJL1pRQYB.m4a?vkey=39328742C4B3731730FA8FBF10622F8ED1EF66D68894482468410CD8D1535999A6AC1F4CA75118E7892EEAA1460E8C580628230C40C58AF3&guid=7981028948&uin=393651460&fromtag=66

由此我们可以推断出: http://dl.stream./C400001J5QJL1pRQYB.m4a?vkey=39328742C4B3731730FA8FBF10622F8ED1EF66D68894482468410CD8D1535999A6AC1F4CA75118E7892EEAA1460E8C580628230C40C58AF3&guid=7981028948&uin=393651460&fromtag=66

其实就是:

http://dl.stream./C400 $ {songmid}.m4a?vkey=39328742C4B3731730FA8FBF10622F8ED1EF66D68894482468410CD8D1535999A6AC1F4CA75118E7892EEAA1460E8C580628230C40C58AF3&guid=7981028948&uin=393651460&fromtag=66

需要通过反向代理的方式请求

在 配置build/webpack.dev.conf.js的devServer中

before(app){// 由于请求的referer和host不同,所以前端不能拿到数据,需要后端做一个代理// 后端向有数据的服务端发送请求,拿到数据,然后前端在向自己的服务器请求那数据// 这里使用axios实现ajax请求:axios是一个基于promise的HTTP库,可以用于浏览器和node.js// 在浏览器创建XMLHttpRequest对象,从node.js创建http请求app.get('/api/getDiscList', function (req, res) {//这里的路径是给前端发送请求的urlconst url = 'https://c./splcloud/fcgi-bin/fcg_get_diss_by_tag.fcg'// axios发送get请求,可以自己配置configaxios.get(url, {headers: {referer: 'https://c./',host: 'c.'},// params是即将与请求一起发送的url参数,无格式对象/URLSearchParams对象params: req.query}).then((response) => {res.json(response.data)}).catch((e) => {console.log(e)})})app.get('/api/music', function (req, res) {//这里的路径是给前端发送请求的urlconst url = 'https://c./base/fcgi-bin/fcg_music_express_mobile3.fcg'// axios发送get请求,可以自己配置configaxios.get(url, {headers: {referer: 'https://c./',host: 'c.'},// params是即将与请求一起发送的url参数,无格式对象/URLSearchParams对象params: req.query}).then((response) => {res.json(response.data)}).catch((e) => {console.log(e)})})

然后:在src/api/ singer.js 定义getMusic方法

注意:guid是会变化的,以自己抓取的实际值为准

export function getMusic(songmid) {const url = '/api/music'const data = Object.assign({}, commonParams, {songmid: songmid,filename: 'C400' + songmid + '.m4a',guid: 7981028948,platform: 'yqq',loginUin: 0,hostUin: 0,needNewCode: 0,cid: 205361747,uid: 0,g_tk: 1928111839})return axios.get(url, {params: data}).then((res) => {return Promise.resolve(res.data)})}

在src/common/song.js定义createSong方法

export function createSong(musicData, songVkey) {return new Song({id: musicData.songid,mid: musicData.songmid,singer: filterSinger(musicData.singer),name: musicData.songname,album: musicData.albumname,duration: musicData.interval,image: `/music/photo_new/T002R300x300M000${musicData.albummid}.jpg?max_age=2592000`,// url: `http://ws.stream./${musicData.songid}.m4a?fromtag=46`url: `http://dl.stream./C400${musicData.songmid}.m4a?vkey=${songVkey}&guid=7981028948&uin=0&fromtag=66`})}

最后应用到组件上src/components/singer-detail/singer-detail.vue

_normalizeSongs(list) {console.log(list)let ret = []list.forEach((item) => {let {musicData} = itemif (musicData.songid && musicData.albummid) {getMusic(musicData.songmid).then((res) => {const svley = res.data.itemsconst songVkey = svley[0].vkeyret.push(createSong(musicData, songVkey))})}})console.log(ret)}

注意:guid是可变的

如果觉得《vue.js最新版获取QQ音乐播放源》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。