今天的目标就是要获取央视的直播源,地址是这个:https://www.yangshipin.cn/#/tv/home?pid=600001859
,如图,我们就是要获取播放这个电视的源,我通过F12大法已经找到了对应的api地址:
图 0
这个接口的响应中有playurl字段就是播放源
按照在今日头条上看到的文章,这个东西最麻烦的就是获取的这个cKey,那么怎么通过编程获取呢?
- 首先在源代码界面点击左侧的页面,在对应的网站上右键,点击在所有文件中搜索:
图 1
然后找一找具体在哪发送的这个cKey,一般都能找到,在图片上我已经标出来了。应该就是下面这地方:
图 2
给它打上断点,刷新界面:
图 3
可以看到进了断点,也计算出了cKey值,点击继续执行,看看网络里对应的请求是不是一致。
由此,我们知道了这是在chunk-vendors.52bd03a6.js文件中执行的,同时,这是webpack打包的项目,肯定需要加载器来进行加载执行,一般来说就是第一个app.xxxxx.js:
图 4
然后,将app.xxxxx.js+chunk-vendors.52bd03a6.js的文件内容复制粘贴放在一个自己建的js文件中,将app.xxxx.js的对应位置改一下:
图 5
chunk-vendors.52bd03a6.js的话,我们可以从打断点的地方往上找,发现它属于fb15模块
图 6
最终这个fb15模块会属于ed4d模块
图 7
因此在chunk-vendors.52bd03a6.js后面加上,这些rs的函数是通过断点处执行时复制的,一帮都是生成的,使用的时候按照其规则传入即可
图 8
中间将生成cKey的函数绑定到window上
图 9
最后需要在顶部补上浏览器的环境,不然无法生成:
/**
* 有关https://www.yangshipin.cn/#/tv/home中
* https://player-api.yangshipin.cn/v1/player/get_live_info请求的cKey生成记录
*/
window = global
Object.defineProperty(window, "yspLogin", {
value: {
default: {}
}
})
Object.defineProperty(window, "location", {
value: {}
})
Object.defineProperty(window.location, "href", {
value: 'https://www.yangshipin.cn/#/tv/home'
})
Object.defineProperty(window, "navigator", {
value: {
appName: "Netscape",
appCodeName: "Mozilla",
platform: "Win32",
}
})
Object.defineProperty(window.navigator, "userAgent", {
value: 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36 Edg/122.0.0.0'
})
Object.defineProperty(window, "document", {
value: {
URL: "https://www.yangshipin.cn/#/tv/home",
referrer: "",
createElement: ()=>({
setAttribute:()=>{},
pathname: "/",
href: "https://www.yangshipin.cn/#/tv/home",
hostname: 'www.yangshipin.cn',
hash: '#/tv/home',
host: 'www.yangshipin.cn',
search: '',
port: '',
protocol: "https"
})
}
})
Object.defineProperty(window.document, "currentScript", {
value: {
src: 'https://www.yangshipin.cn/js/app.4160532d.js'
}
})
这样的话应该就大功告成了,获取到了cKey。