Vue音乐--排行榜页面07_抓取详情页数据

大概步骤:

Vue音乐--排行榜页面07_抓取详情页数据

目标效果

Vue音乐--排行榜页面07_抓取详情页数据


七、抓取排行榜详情页数据

  • 要点
    • 进入QQ音乐移动端,查找Network中的排行榜首页数据,在XHR中找到
    • 使用之前写好的jsonp解析数据的方法,传入处理好的url
    • 点击事件传入点击的排行榜id

Vue音乐--排行榜页面07_抓取详情页数据
jsonp数据
Vue音乐--排行榜页面07_抓取详情页数据
url数据

  • 相关代码
import jsonp from '@/common/js/jsonp'	//引入jsonp模块
import {commonParams,object} from './config'

//获取排行榜歌曲列表数据
export function getRankList(topid){
	//自己判断截取出url前半段
	const urlfront = 'https://c.y.qq.com/v8/fcg-bin/fcg_v8_toplist_cp.fcg'
	//把hash做成对象,es6创建对象并赋值,
	//固定的hash写在变量js模块里, config.js
	const thehash = Object.assign({},commonParams,{
		notice: 0,
		platform: 'h5',
		needNewCode: 1,
		uin:0,
		tpl: 3,
		page: 'detail',
		type: 'top',
		topid: topid,
	})
	//执行jsonp模块
	//console.log(jsonp(urlfront,thehash,object))
	return jsonp(urlfront,thehash,object)
}

^ rank.js定义获取数据的方法

import {getRankList} from '@/api/rank'	//引入获取数据方法的

getRankList(this.topList.id).then((res)=>{
	if(res.code === ERR_OK){
		console.log(res.songlist)	//数据很冗余,需要提取
	}
 })

^ 在组件中调用获取数据的方法

  • 获取到的歌曲列表数据很冗余,需要提取需要的数据
  • 而前面有自己封装提取数据形成性对象的方法
  • 引用封装方法即可
import {createSong} from '@/common/js/song.js'  //引入歌曲列表数据提取数据的方法

methods:{
	//提取歌曲列表数据
	_normalizeSongs(list){
		let ret =[]
		list.forEach((item)=>{
			const musicData = item.data       
			if(musicData.songid && musicData.albumid){
            	ret.push(createSong(musicData)) //不需要一个一个new传值 
       		}
      })
      return ret
    },
    //获取数据
    getRankList(this.topList.id).then((res)=>{
	if(res.code === ERR_OK){
		console.log(res.songlist)	//数据很冗余,需要提取
		this.songs = this._normalizeSongs(res.songlist)
	}
 })
 }
  • 把数据应用到组件中

  • :songs="songs"
    Vue音乐--排行榜页面07_抓取详情页数据

  • 另外还要通过axios获取歌曲的url

  • 利用写过的获取数据方法,在提取数据的时候,把url额外提取进去


import {createSong} from '@/common/js/song.js'  //引入歌曲列表数据提取数据的方法

methods:{
	//提取歌曲列表数据
	_normalizeSongs(list){
		let ret =[]
		list.forEach((item)=>{
			const musicData = item.data       
			if(musicData.songid && musicData.albumid){
				//遍历循环获取歌曲源url
				let songUrl = ''
				getSongs(musicData.songmid).then((res)=>{
					songUrl = res.req_0.data.midurlinfo[0].purl  //获取到数据url,提取存入到对象中即可
					ret.push(createSong(musicData,songUrl)) 
				})
			}
		})
		return ret
	},
  • 即可进行播放
    Vue音乐--排行榜页面07_抓取详情页数据

项目来源:慕课网
如有建议和疑问可联系
QQ:1017386624
邮箱:[email protected]