软件和源码

前言

之前写过一片文章: 关于突破咪咕视频付费限制的研究, 但是后来我发现评论说已经不能用了,我知道肯定是api修改了,写这种东西就是这样,不一定什么时候就变化了,然后就用不了了,我懒得继续维护了,但是为啥我现在又发了这篇文章呢?因为我用到了我之前写的软件(也是想水一片文章),所以花点时间研究了一下这次更新后的api
这次我会详细说明过程,有兴趣的可以研究研究。

这次修改后除了付费的看不了,其它功能和原来的软件功能一样,付费的看不了可能是因为后台加入cookie认证,因为我发现访问是404。

接口

接口还是和之前的一样 https://webapi.miguvideo.com/gateway/playurl/v3/play/playurl?contId=608807416&rateType=3&startPlay=true
返回:

urlInfo": {
"urlType": "tourist",
"url": "http://h5live.gslb.cmvideo.cn/migu/kailu/20200324/cctv4meihd/50/index.m3u8?msisdn=202107310205404d3783e723ed4d848d9320848e0d6def&mdspid=&spid=699004&netType=0&sid=2200179344&pid=2028597139&timestamp=20210731020540&Channel_ID=0116_25000000-99000-100300010010001&ProgramID=608807416&ParentNodeID=-99&assertID=2200179344&client_ip=60.17.111.77&SecurityKey=20210731020540&mvid=2200179344&mcid=500020&mpid=&playurlVersion=SJ-A1-4.7.1&userid=&jmhm=&videocodec=h264&bean=mgsph5&puData=30420c934501c1ee12542c78a90a8e16",
"mediaType": "12",
"usageCode": "50",
"codeRate": "75",
"mediaSize": 0,
"rateDesc": "标清 540P",
"contId": null,

访问这个 url 发现返回的是空白,所有问题就是出在这里,正常的情况下这里应该返回一个 m3u8链接地址(在加入crossdomain=www参数后,不是标准m3u8串流格式,而是以文本形式返回的,我原来的软件中加入了crossdomain=www)。
所以关键就是解决这个问题

用浏览器打开https://www.miguvideo.com/mgs/website/prd/detail.html?cid=608807416 通过 浏览器的 开发者工具 抓包这个url 应该为 https://gslbmgsplive.miguvideo.com/migu/kailu/20200324/cctv4meihd/51/index.m3u8?msisdn=0a4020443d8d2dc2a981f89b864a9eba&mdspid=&spid=699004&netType=0&sid=2200179344&pid=2028597139&timestamp=20210731020939&Channel_ID=0132_10010001005&ProgramID=608807416&ParentNodeID=-99&assertID=2200179344&client_ip=60.17.111.77&SecurityKey=20210731020939&mvid=2200179344&mcid=500020&mpid=&playurlVersion=SJ-A1-4.7.1&userid=&jmhm=&videocodec=h264&bean=mgspwww&puData=f9178e1694798e5c9aaf409e856cdad8&ddCalcu=8fd9ea13d78c816e5186e9940749f8aea59c&crossdomain=www

我采用在其他浏览器打开这个 url 发现依然可以返回m3u8链接地址,这就说明不是 cookie 验证,那么就应该检查请求头中的差距或者请求参数上的差距。

将浏览器抓包的这个 url 与我们通过接口获得的 url 参数进行对比发现:我们抓包得到的 url 多了一个参数 ddCalcu, 我们需要知道这个是如何产生的:

遇到这种情况,肯定选择 pcPlayer.js, 而不选 带 vue(vue是js的一个框架),这种逻辑不可能在框架里。 进入后格式化js(点击左下角的**{}**),然后搜索 ddCalcu :

一下子就找到了这个函数,简单阅读其逻辑得知 参数ddCalcu 是由其它几个参数 经过这个算法得到的,到此问题几乎已经解决了,剩下的就是用 python 仿写这部分逻辑了。

python 仿写:

from urllib import parse

def ddCalcu(url):
new_url = parse.urlparse(url)
para = dict(parse.parse_qsl(new_url.query))
userid = para.get("userid","")
timestamp = para.get("timestamp","")
ProgramID = para.get("ProgramID","")
Channel_ID = para.get("Channel_ID","")
puData = para.get("puData","")
t = userid if userid else "eeeeeeeee"
r = timestamp if timestamp else "tttttttttttttt"
n = ProgramID if ProgramID else "ccccccccc"
a = Channel_ID if Channel_ID else "nnnnnnnnnnnnnnnn"
o = puData if puData else ""
if not o:
return url
s = list("2624")
u = list(t)[int(s[0])] or "e"
l = list(r)[int(s[1])] or "t"
c = list(n)[int(s[2])] or "c"
f = list(a)[len(a)-int(s[3])] or "n"
d = list(o)
h = []
p = 0
while p*2 < len(d):
h.append(d[len(d)-p-1])
if p < len(d) - p -1:
h.append(o[p])
if p == 1:
h.append(u)
if p == 2:
h.append(l)
if p == 3:
h.append(c)
if p == 4:
h.append(f)
p += 1
v = "".join(h)
return url + "&ddCalcu=" + v if __name__ == '__main__':
url = "http://h5live.gslb.cmvideo.cn/migu/kailu/20200324/cctv4meihd/50/index.m3u8?msisdn=20210731022935c8b943821c7c432faed138160dd0b77f&mdspid=&spid=699004&netType=0&sid=2200179344&pid=2028597139&timestamp=20210731022935&Channel_ID=0116_25000000-99000-100300010010001&ProgramID=608807416&ParentNodeID=-99&assertID=2200179344&client_ip=60.17.111.77&SecurityKey=20210731022935&mvid=2200179344&mcid=500020&mpid=&playurlVersion=SJ-A1-4.7.1&userid=&jmhm=&videocodec=h264&bean=mgsph5&puData=4484cda45d696504453b9dc809dd5599"
new_url = ddCalcu(url)
print(new_url)

将从接口获得的 url地址 付给这个 url变量, 然后执行python 脚本,返回新的url, 用postman 测试一下:


发现已经可以正常返回 m3u8 url 了,问题解决, 剩下的就是将这部分逻辑整合回我原先写的软件里面,我就不详细说了。

其它

python 仿写部分:

a = Channel_ID if Channel_ID else "nnnnnnnnnnnnnnnn"

也可以这样写:

a = Channel_ID or "nnnnnnnnnnnnnnnn"

只不过我之前发现了 python 中有所谓的等价三元运算符的if else这种写法,所以想用这种写法练练手。

关于咪咕视频的m3u8再次解析的更多相关文章

  1. 将视频插入视频:CVPR2019论文解析

    将视频插入视频:CVPR2019论文解析 Inserting Videos into Videos 论文链接: http://openaccess.thecvf.com/content_CVPR_20 ...

  2. python爬取视频网站m3u8视频,下载.ts后缀文件,合并成整视频

    最近发现一些网站,可以解析各大视频网站的vip.仔细想了想,这也算是爬虫呀,爬的是视频数据. 首先选取一个视频网站,我选的是 影视大全 ,然后选择上映不久的电影 “一出好戏” . 分析页面 我用的是c ...

  3. .ts 视频文件 .m3u8视频文件合并 转换为mp4

    1. 先把 .m3u8.zip 格式文件解压到文件夹D:\a. 2. 将文件夹内的 .ts文件名处理好. 一般均为按顺序排列. (殊情况需要根据.m3u8文件记录处理.) 举例,根据实际情况处理. ( ...

  4. HLS -- m3u8档案格式解析

    1. Playlist file 一个M3U的 Playlist 就是一个由多个独立行组成的文本文件,每行由回车/换行区分.每一行可以是一个URI.空白行或 是以”#“号开头的字符串,并且空格只能存在 ...

  5. FastJson将json解析成含有泛型对象,内部泛型对象再次解析出错的解决办法(Android)

    折腾小半天的问题,这里先感谢一下深圳的小伙子,远程帮我搞,虽然也没有搞出来==========FUCK 声明:Android开发下发生此异常,Java开发下并不会有这个问题 异常重现 简单说一下抛出异 ...

  6. CrackMe005-下篇 | 逆向破解分析 | 160个CrackMe(视频+图文)深度解析系列

    作者:逆向驿站微信公众号:逆向驿站知乎:逆向驿站 CrackMe005,上篇说了具体方法,下篇来发逆向分析过程,看看老夫是如何得到上篇的具体方法的! 准备 [环境和工具] win7/xp虚拟机环境 C ...

  7. 利用selenium和ffmpeg爬取m3u8 ts视频《进击的巨人》

    需求 想看下动漫<进击的巨人>,发现到处被和谐,找不到资源,但是在一个视频网站找到了在线播放,https://www.55cc.cc/dongman/17890/player-2-1.ht ...

  8. 打造m3u8视频(流视频)下载解密合并器(kotlin)

    本文是对我原创工具m3u8视频下载合并器关键代码解析及软件实现的思路的讲解,想要工具的请跳转链接 1.思路说明 思路挺简单,具体步骤如下: 下载m3u8文件 解析m3u8文件获得ts文件列表 根据文件 ...

  9. iiiLab提供的视频解析接口如何使用?转发个简单的使用教程

    iiiLab除了提供免费的在线视频解析下载工具,还提供了视频解析接口供有需要的个人和公司调用. iiiLab目前已支持解析下载今日头条.西瓜视频.内涵段子.微博.秒拍.小咖秀.晃咖.火山.快手.抖音. ...

  10. 【视频】ffmpeg mov mp4 m3u8 ts

    1.https://ffmpeg.zeranoe.com/builds/ 2.https://blog.csdn.net/psh18513234633/article/details/79312607 ...

随机推荐

  1. 阿色全息脑图,及制作软件AHMM

    阿色全息脑图 AHMM 全息脑图是按照大系统观原理开发的新型思维工具,用于升维思考. 让您以系统的观点看待世界,专注系统的结构信息--全息,抓住事物的本质,透过表象和数据发现规律. 世间每项事物都是一 ...

  2. 配置联想IMM使用AD账户登录

    IMM是联想(IBM)服务器的管理卡Integrated Management Module的缩写,现在是第二个版本.通过它可以远程管理服务器,就像你在服务器面前操作一样.可以修改BIOS设置,可以重 ...

  3. 在Windows Server 2019上安装edge浏览器

    在Windows 2016和2019的正式版本中是不带Edge浏览器的.有些工具.网站也不支持IE浏览器了.对于偶尔需要在服务器上访问这些站点的管理员来说有些不方便.不过可以通过安装三方浏览器或者Ed ...

  4. 使用Vite快速构建Vue3+ts+pinia脚手架

    一.前言 vue3的快速更新,很多IT发展快的地区在22开始都已经提上日程,小编所在的青岛好像最近才有点风波.vue3的人才在青岛还是比较稀缺的哈,纯属小编自己的看法,可能小编是个井底之蛙!! vue ...

  5. 举例:Network Policies

    本文描述了如何在 Kubernetes 集群中通过创建 NetworkPolicy 的方式来声明网络策略,以管理 Pod 之间的网络通信流量. 前提条件 创建一个Deployment并配置Servic ...

  6. Node.js(四)json

    npm init -y(初始化项目) npm install express(引入express) npx express-generator -e(自动生成模板.添加对 ejs 模板引擎的支持) n ...

  7. Spring笔记三

    Spring-03 1. AOP 1.1 概念 ​ AOP为Aspect Oriented Programming的缩写,意为:面向切面编程.他是一种可以在不修改原来的核心代码的情况下给程序动态统一进 ...

  8. POJ1985 Cow Marathon (树的直径)

    用两次dfs求出树的直径,这两次dfs可以写在一起,当然为了方便理解,这里是分开写的. 1 //两次dfs求树的重心 2 #include<cstdio> 3 #include<cs ...

  9. 两将军问题和TCP三次握手

    两将军问题,又被称为两将军悖论.两军问题, 是一个经典的计算机思想实验. 首先, 为避免混淆,我们需要认识到两将军问题虽然与拜占庭将军问题相关,但两者不是一个东西.拜占庭将军问题是一个更通用的两将军问 ...

  10. [Android开发学iOS系列] 快速上手UIKit

    快速上手iOS UIKit UIKit是苹果官方的framework, 其中包含了各种UI组件, window和view, 事件处理, 交互, 动画, 资源管理等基础设施支持. 按照前面的介绍, 用U ...