钉钉更新后,钉钉回放视频python下载

 

前言

 


最近(2021.4.14)下载钉钉群的网课,发现以往使用的m3u8下载方式没法正常下载了,经过观察发现是钉钉对m3u8文件进行了改写,导致正常的下载器直接下载出错。

 

下载m3u8文件后进行编辑可使其符合下载格式。

 

需要的软件:Fiddler或Charles等抓包软件、m3u8下载器、支持正则表达式替换的文本编辑器

 

记录两个变量(用于python)

 

原文

一、m3u8文件的修改方式

 


经过查找,阿里文档中有提到如何改写文件,链接如下

 

M3U8标准加密改写

 

M3U8   介绍: 点击打开

 

二 、 Fiddler 抓包(其他抓包程序大同小异)

 

首先,打开Fiddler

 

 

 

保持捕获数据 即可,

 

也可以点击“任意进程”拖动想要抓包的程序上边,仅对此程序抓包

 

 

 

然后进行 Fiddler 过滤钉钉包,输入 .m3u8进行过滤

 

 

设置完成后,点击钉钉直播回放列表中的播放,开始播放视频 进行抓包

 

 

 

在Fiddler的窗口中,寻找

 

主机是***.**alicdn**.***.com(不是一个确定的值)、 url为 /live_hp/ 开头、 内容类型为 application/ 开头的数据。右键点击复制其URL(为后续的第一个变量)。

 

 

三、下载步骤

 


1.下载m3u8文件(就是第一个变量的那个url)
用抓包软件找到m3u8文件,双击进入,然后选择raw原始数据,复制其内容粘贴到本地的文档id-keys.txt中。

 

 

 

 

 

2.修改数据(大部分python自动修改,懒人代码的第17行需要手动修改,后续提及)
m3u8文件内容如下:

 

#EXTM3U
#EXT-X-VERSION:3
#EXT-X-MEDIA-SEQUENCE:1
#EXT-X-TARGETDURATION:31
#EXTINF:30.000,
1660f37e-27f9-47c2-b127-8bb1ab9f46d1/1.ts?auth_key=1619264900-0-0-acd81051b446c8f67c4145f63b084236
#EXTINF:30.000,
1660f37e-27f9-47c2-b127-8bb1ab9f46d1/2.ts?auth_key=1619264900-0-0-1f3054c64d055e66d185783186f73e33
#EXTINF:4.100,
1660f37e-27f9-47c2-b127-8bb1ab9f46d1/3.ts?auth_key=1619264900-0-0-f6d748622a6f9b14117a0e04e6125175
#EXT-X-ENDLIST


#有多少粘贴多少

 


而url链接为:

 

https://dtliving-sh.dingtalk.com/live_hp/1660f37e-27f9-47c2-b127-8bb1ab9f46d1_merge.m3u8?app_type=win&auth_key=1619264900-0-0-efc5f367241f273fa2be15a81f4a1815&cid=e8a46f2e2d280cc1edac93216d07fc80&token=de8b4bacfe754db86bd6560654c78434H4SrDtFFr6YNofy0GFbmrBCY-DVpp_k6UVFai0fFLqzNDxoASGiNgXspWGx4FitBB4I0x1PyKHUKKDeRJqhHSg6ues8RLZdGiDPHzb0I4Ds=&token2=b65e3bff05cc0fe88fe44d2f63b56030A3Bd1XMxB_C9hqAAhc7E3bkdedwT2Ri6U76rRVxnfjiotbRTL91iotoVF9IH-CGQYU7olJnAitKcWnbFDa6Zx9a6hMi9lhbIAjFfk9eUDyA&version=6.0.8-Release.3260387 

 

这里需要修改两个地方,一个是ts文件的相对地址改为绝对地址,一个是去掉?及后面的多余内容。其中ts文件的完整url是:

 

https://dtliving-sh.dingtalk.com/live_hp/1660f37e-27f9-47c2-b127-8bb1ab9f46d1/1.ts?auth_key=1619264900-0-0-acd81051b446c8f67c4145f63b084236

 

所以只要使用替换修改(手动修改 懒人代码的第17行 的 1660f37e )(每个人的都不一样)

 

1660f37e

 

 

https://dtliving-sh.dingtalk.com/live_hp/1660f37e

 

其中的开头url来自之前保存的url链接。

 

再用正则表达式匹配后面的auth_key内容并删除即可。

 

python自动完成修改的m3u8文件如下:

 

https://aliliving-pre.alicdn.com/live_hp/1660f37e-27f9-47c2-b127-8bb1ab9f46d1/1.ts?auth_key=1619264900-0-0-acd81051b446c8f67c4145f63b084236

https://aliliving-pre.alicdn.com/live_hp/1660f37e-27f9-47c2-b127-8bb1ab9f46d1/2.ts?auth_key=1619264900-0-0-1f3054c64d055e66d185783186f73e33

https://aliliving-pre.alicdn.com/live_hp/1660f37e-27f9-47c2-b127-8bb1ab9f46d1/3.ts?auth_key=1619264900-0-0-f6d748622a6f9b14117a0e04e6125175

 

更新python懒人一键代码:

 


import requests
import os
import re
import time
from natsort import natsorted
id_keys = []
headers = {
    'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36 dingtalk-win/1.0.0 nw(0.14.7) DingTalk(6.0.12-Release.4140363) Mojo/1.0.0 Native AppType(release) Channel/201200' # 自行添加
}
path = "dingding-movie"  # 文件夹名称
os.makedirs(path, exist_ok=True)  # 自动创建文件夹
url_input = input("m3u8地址为:")#第一个变量
output_name = input("最后合并文件名为:")
url = 'https://'+url_input.split('/')[2]+'/'+url_input.split('/')[3]+'/'
print("下载前缀为:" + url)
fileopen = open('id-keys.txt', encoding='utf-8')
all_id_keys = fileopen.readlines()
for all_id_key in all_id_keys:
    # print(all_id_key)
    all_id_key = re.match(r'1660f37e.*', all_id_key, re.M | re.I)#1660f37e需要手动根据当前获取的第二变量修改
    if all_id_key:
        #print(url + all_id_key.group())
        id_keys.append(url + all_id_key.group())
for id_key in id_keys:
    #print(id_key)
    id = id_key.split('/')[-1].strip()[:-57]
    print("正在下载:" + id)
    res = requests.get(id_key, headers=headers)
    with open(path + "/" + id, "wb")as f:
        f.write(res.content)
filepath = r"dingding-movie"
files = os.listdir(filepath)
files = natsorted(files)
current_path = os.path.abspath(filepath)
#print(files)
for file in files:
    line = "file '"+ str(file) +"'"
    with open('dingding-movie\\name.txt','a') as f:
        f.write(line+ '\n')
print("下载已完成")
time.sleep(3)
print("开始视频合并")
command = 'r"cd /d ' + current_path + '&&ffmpeg -f concat -safe 0 -i name.txt -c copy ' + output_name + '.mp4'
# popen返回文件对象,跟open操作一样
f = os.popen(command, "r")
d = f.read()  # 读文件
print(d)
print("视频合并完成!视频所在目录:" + current_path)
f.close()
print("如果合并失败,请自行执行CMD: " + command.strip()[2:])

 

#最后两行的cmd命令 已测试成功 代码不美观 将将就 我也是个小白!

 

 

 

 

 
  • 5
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值