清风DJ网在线播放地址JS解密转MP3方法

查看 175|回复 11
作者:paxj168   
前面看到@ehepls 兄弟发布的易语言版,我来发一个python版的
准备工作:
1、网址:https://www.vvvdj.com/play/221250.html
2、python3.9
3、发条JS工具
4、格式工厂
1、抓包
              1-1、谷妹儿浏览器,F12  
              1-2、具体内看@ehepls 兄弟发布的方法


抓包01.jpg (276.43 KB, 下载次数: 0)
下载附件
2021-10-26 18:47 上传

经过分析发现,他的JS并不是独立的,而是在播放页面里面先执行,取得吗m3u8播放地址 + upt的值 + news
[HTML] 纯文本查看 复制代码https://tspc.vvvdj.com/c1/2021/10/221250-bf40bf/221250.m3u8?upt=d75e43361637855999&news


抓包02.jpg (240.33 KB, 下载次数: 0)
下载附件
2021-10-26 18:56 上传

2、解密
[JavaScript] 纯文本查看 复制代码    function DeCode() {
        this.OO0O00OO00OO = function (a, b) {
            return b > 0 ? a.substring(0, b) : null;
        }, this.OO00OO0O00O0 = function (a, b) {
            return a.length - b >= 0 && a.length >= 0 && a.length - b  10; ) {
                k = (parseInt(k.substring(0, 10)) + parseInt(k.substring(10, k.length))).toString();
            }
            for (k = (e * k + f) % g, i = "", j = "", c = 0; c = 0 ? a.substr(b, c) : null;
        }, this.O0O000000O0O0 = function (a) {
            return a.length;
        }, this.O000O0OO0O0OO = function (a,b) {           
            var h, i, j, k, l, m, n, o, p, c = b, d = this.O0O000000O0O0(c), e = d, f = new Array(), g = new Array();
            for (l = 1; d >= l; l++) {
                f[l] = this.O0000OO0OO00O(c, l - 1, 1).charCodeAt(0), g[e] = f[l], e -= 1;
            }
            for (h = "", i = a, m = this.OO0O00OO00OO(i, 2), i = this.OO00OO0O00O0(i, this.O0O000000O0O0(i) - 2),
                     l = 0; l 187Q190q193k196Q202N208?214m220W223_226M229o232I235j238[250k2591262J268R271C277:280>283D292A295?298I3012304C31053193325A3281331K3379343C346K355k358
这上面的就是他的加密代码,具体是干了些啥,反正我也不需要理解,主要是理解不了,但不影响我们
我们只知道他的加密入口及解密参数就行了
[JavaScript] 纯文本查看 复制代码var x=new DeCode();
playurl=x.O000O0OO0O0OO(参数1,参数2)
先请求页面获取参数1,参数2,然后得到在带上参数请求m3u8视频流列表,知道参数怎么来的就好办了
2、python3.9获取参数
需要加载几个模块
[color=]import
asyncio  //这个协助
[color=]import
aiohttp   //这个是下载
[color=]import
os   
[color=]import
requests  
[color=]import
re
[color=]import
execjs  //这个是执行JS的
[JavaScript] 纯文本查看 复制代码function DeCode() {
this.OO0O00OO00OO = function(a, b) {
    return b > 0 ? a.substring(0, b) : null;
},
this.OO00OO0O00O0 = function(a, b) {
    return a.length - b >= 0 && a.length >= 0 && a.length - b  10;) {
        k = (parseInt(k.substring(0, 10)) + parseInt(k.substring(10, k.length))).toString();
    }
    for (k = (e * k + f) % g, i = "", j = "", c = 0; c = 0 ? a.substr(b, c) : null;
},
this.O0O000000O0O0 = function(a) {
    return a.length;
},
this.O000O0OO0O0OO = function(a, b) {
    var h, i, j, k, l, m, n, o, p, c = b,
    d = this.O0O000000O0O0(c),
    e = d,
    f = new Array(),
    g = new Array();
    for (l = 1; d >= l; l++) {
        f[l] = this.O0000OO0OO00O(c, l - 1, 1).charCodeAt(0),
        g[e] = f[l],
        e -= 1;
    }
    for (h = "", i = a, m = this.OO0O00OO00OO(i, 2), i = this.OO00OO0O00O0(i, this.O0O000000O0O0(i) - 2), l = 0; l


python01.jpg (242.06 KB, 下载次数: 0)
下载附件
2021-10-26 19:14 上传

哈哈哈,可以得到我们想要的参数,请求时候记得一定要带上 headers
带上参数请求m3u8视频流列表信息
[Python] 纯文本查看 复制代码def htmlm3u8list(htmls, headers):
    # 创建一个node对象
    node = execjs.get()
    # js源文件编译
    ctx = node.compile(open('./1-01.js', encoding='utf-8').read())
    # 执行JS涵数
    funcname = 'playurl("{0}","{1}")'.format(htmls[0], htmls[1])
    pwd = 'https:' + ctx.eval(funcname)
    tsurl = pwd.split(".m3u8")[0]
    numbeid = tsurl.split('/')[-1]
    data = requests.get(url=pwd, headers=headers).text
    name = numbeid + "-" + htmls[2].replace("(", "").replace(")", "")
    print(name)
    isExists = os.path.exists(name)
    if not isExists:
        os.makedirs(name)
    tslist = re.findall(r'-\d+.ts\?upt=[a-zA-Z0-9]+', data)
    urllist = []
    for ts in tslist:
        sss = tsurl + ts
        urllist.append(sss)
    urllists = [urllist, [name]]
    return urllists
到了这里就完成了兄弟前面的效果,但是我想把这个在加深一些,下载
下载有个问题就是,因为一个音频文件他会分成几百个流文件,如果单线程下载的话,会比较慢,然后我就用协程的方法这样快一些


python02.jpg (290.2 KB, 下载次数: 0)
下载附件
2021-10-26 19:24 上传

[Python] 纯文本查看 复制代码async def downs(hj):
    async with aiohttp.ClientSession() as session:
        url_list = hj
        name = url_list[1][0]
        print(url_list)
        print(name)
        tasks = [asyncio.create_task(fetch(session, urls, name)) for urls in url_list[0]]
        await asyncio.wait(tasks)
async def fetch(session, urls, name):
    async with session.get(urls, verify_ssl=False) as response:
        content = await response.content.read()
        tslist = re.findall(r'-\d+.ts\?upt=[a-zA-Z0-9]+', urls)
        for ts in tslist:
            filename = ts.replace("-", "").split("?")[0]
            print(filename)
        path = './' + name + './' + filename
        with open(path, "wb") as f:
            f.write(content)
下载的时候把ID号和文件名建一个文件夹这样方便管理
例如:221250 + 四会DJ清扬-国粤语Club抖音DjHs华少秋风吹飘来好消息串烧
好,现在流文件下载下来了,就是解决文件合并和转MP3格式了
看到一个兄弟在说在线的视频流文件很小,音质达不到要求,我们把这个问题一起解决了


音质.jpg (65.05 KB, 下载次数: 0)
下载附件
2021-10-26 19:32 上传



音质1.jpg (217.44 KB, 下载次数: 0)
下载附件
2021-10-26 19:32 上传

网站显示的是 147.2MB   而我们下载下来的只有32.4MB,这个问题只要我们设置一下转换值就可以了
然后就是等几分钟转换好了


01.jpg (127.13 KB, 下载次数: 0)
下载附件
2021-10-26 19:37 上传



02.jpg (154.24 KB, 下载次数: 0)
下载附件
2021-10-26 19:37 上传

格式工厂比特率选择320,然后我们看一下转换后的文件是否与网站一致


03.jpg (227.06 KB, 下载次数: 0)
下载附件
2021-10-26 19:43 上传

一毛一样
这个是全代码

清风DJ.zip
(2.13 KB, 下载次数: 369)
2021-10-26 19:40 上传
点击文件名下载附件
下载积分: 吾爱币 -1 CB

https://tspc.vvvdj.com/c1/2021/10/221250-bf40bf/221250.m3u8?upt=d75e43361637855999&news"
https://tspc.vvvdj.com/c1/2021/10/221250-bf40bf/221250.m3u8?upt=d75e43361637855999&news

微软, 下载次数

Yo丨Se7ven   

一个idm批量嗅探就解决了,JS解析出来的只是128k低音质的。
paxj168
OP
  


yang586lin 发表于 2021-10-26 21:20
大神,请问https://m.i275.com/可以做个批量下载的工具出来吗?

我们只讨论技术,不做工具
https://audiopay.cos.tx.xmcdn.com/download/1.0.0/group3/M04/BF/F5/wKgMdl4xIwnADzZaADCdnSpb3VE778.m4a?buy_key=aed65595bbd6d943057c57973f8b5b93&sign=4783c36c8d75615f8f124930695b2139&timestamp=1635295239206000&token=5360&duration=1800
wuti90   

就字母看得懂···
igood   

优秀,非常不错的解析方法
A913830   

谢谢分享 thanks
yang586lin   

大神,请问https://m.i275.com/可以做个批量下载的工具出来吗?
liuyanqu929   

清风DJ网是我一直在用的网站,应该有十几年了。
吾爱有你更美   

播放的时候还是本音乐来着某某某网址
SDU123   

pycharm 社区版是不支持调用js文件吗?
您需要登录后才可以回帖 登录 | 立即注册

返回顶部