今年因为疫情的原因不能开学,所以很多学校都使用钉钉进行在线授课,但是在钉钉里面点击下载群直播回放的时候却发现:

真好,管理员设置了不允许下载回放。

这就完了吗?NoNoNo!既然正常途径下载不了,那么我们就通过程序来进行下载。

环境准备

fiddler抓包软件,钉钉PC客户端,格式工厂软件,python环境以及requests,moviepy库。

新建一个python文件dingding.py,在python文件所在位置新建一个‘钉钉’文件夹来存放数据。

桌面新建一个文件夹,名称默认‘新建文件夹’就好,然后在新建文件夹里面新建一个‘video’文件夹以及video_add.py文件。

抓取思路

我们在网站观看视频的时候,并不是一次性的将所有视频内容全部请求完,而是把它分为了很多小段视频,每次请求一小段。这一规则,几乎所有的视频网站以及视频软件都是如此,所以这就导致了我们在爬取视频的时候,并不能一次性爬取到视频的全部,而爬取下来的视频是一小节一小节的分开的ts文件;所以我们在抓取视频的时候,首先得获取到每一个小节视频的URL地址,然后去请求它,将所有小节的ts文件保存下来,然后再使用格式工厂将所有ts文件转换成MP4格式,最后再将所有的MP4文件合并为一个MP4文件。那么按照这个思路,我们开始实际的操作。

抓取分析

首先我们需要先获取到每个小节视频的URL地址,由于不是在浏览器当中,所以我们会用到fiddler来对软件的数据包进行抓取;打开fiddler抓包软件,然后登陆钉钉PC客户端,找到你想要下载的群直播回放视频:

然后打开第一个视频并播放,我们就可以在fiddler软件当中看到抓取到的数据包:

在图中我标记的1号数据包下面的那个数据包,就是当前视频所有小节的URL地址;大家可以选中这条数据,然后在右边Inspectors中的Raw当中打开GET后面的链接,会提示你下载一个文件,将这个文件下载到本地,然后使用记事本打开,就可以看到当前视频每一个小节的URL地址(图中红色边框选中,并且所有类似选框内的皆是):

当然,这些URL地址是不完整的,因为他们前面省略了“https://dtliving-pre.alicdn.com/live/”这些;如何得知呢?

点击刚才标记1号数据包下面紧挨着的2号视频数据包,然后注意观察他们在右边Inspectors中的Raw当中打开GET后面的链接,刚好省略了前面的一部分内容。当然你也可以多找几组作以对比。

代码书写

接下来,我们就可以进行到代码书写的环节:

打开我们创建的dingding.py文件,导入requests库,然后将我们刚才获取到的1号数据包里面的下载URL地址写入,再写入请求头,由于我们暂时不知道它需要哪些请求头的参数,所以我们索性将fiddler上所有的请求头参数都写上,然后我们先打印一下状态码,看是否可以请求成功:

import requests

def dingding():

url='https://dtliving-pre.alicdn.com/live/bd82384b-883e-444b-8499-2b60bfc244e0_merge.m3u8?app_type=win&auth_key=1590309873-0-0-745e015e4c7a1580895c875450c97d7c&cid=5977ad6e9da132f335b2d62203b7beed&token=bd58052a744b52e78d01bc9328bbf2f52n6pZZhOITKrfmA40UASVqOs0tbqts1jxM7u0Hoef9hPqAHJMoaeWYXB01SjavnoT5Ke3pM1VC3IKxt9b1MxXh540meiaUNU-m_nzJFKHN4=&token2=3b5453fbca3841e11d534ac7ecc7d9a5fNFEc-4e5ZTb8k6SKy22dqh7fq5krVqHURw0pJx8hU6YOhtP5aKSXdHODZCvmwFdMSxtREtJJF03LntnCpvzvSx_g4OBfmcSnSDin-Peyk4&version=5.0.15-Release.26'

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(5.0.15-Release.26) Mojo/1.0.0 Native AppType(release)',

'Accept-Language':'zh-CN,zh;q=0.9',

'Accept-Encoding':'gzip, deflate, br',

'Accept':'*/*',

'Referer':'https://h5.m.taobao.com/tblive/dingtalk/pc-playback.html?cid=31664625310&uuid=bd82384b-883e-444b-8499-2b60bfc244e0&anchorId=275440629',

'Origin':'https://h5.m.taobao.com',

'Connection':'keep-alive',

'Host':'dtliving-pre.alicdn.com'

}

response=requests.get(url,headers=headers)

print(response)

if __name__ == '__main__':

dingding()

运行程序之后,我们会看到一个SSL的报错,这是因为我们请求的是HTTPS请求,所以会出现这种情况,解决它,我们一般只需要在requests.get的参数里面加上“verify=False”即可,意思就是不验证SSL证书;这时我们再运行程序,就发现我们的报错没有了,而是多了一个Warning警告,这个警告我们可以不用理它,因为它并不会使我们的程序无法运行,或者也可以使用下面的代码忽略warning:

import warnings

warnings.filterwarnings('ignore')

再运行程序,我们就看不到刚才的Warning警告了。

接下来,我们的思路就是请求这个URL地址,然后将该地址里面的文件保存成txt文件存放在本地,然后再读取这个txt文件里面的内容,利用正则表达式将我们所需要的每小节视频的URL地址提取出来,再将缺少的部分拼接上,然后请求即可。

有了这个思路,我们的代码书写起来就很容易了;下面是完整代码展示:

import requests

import re

import warnings

# 忽略警告

warnings.filterwarnings('ignore')

i=1

def dingding():

url = 'https://dtliving-pre.alicdn.com/live/bd82384b-883e-444b-8499-2b60bfc244e0_merge.m3u8?app_type=win&auth_key=1590309873-0-0-745e015e4c7a1580895c875450c97d7c&cid=5977ad6e9da132f335b2d62203b7beed&token=bd58052a744b52e78d01bc9328bbf2f52n6pZZhOITKrfmA40UASVqOs0tbqts1jxM7u0Hoef9hPqAHJMoaeWYXB01SjavnoT5Ke3pM1VC3IKxt9b1MxXh540meiaUNU-m_nzJFKHN4=&token2=3b5453fbca3841e11d534ac7ecc7d9a5fNFEc-4e5ZTb8k6SKy22dqh7fq5krVqHURw0pJx8hU6YOhtP5aKSXdHODZCvmwFdMSxtREtJJF03LntnCpvzvSx_g4OBfmcSnSDin-Peyk4&version=5.0.15-Release.26'

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(5.0.15-Release.26) Mojo/1.0.0 Native AppType(release)',

'Accept-Language': 'zh-CN,zh;q=0.9',

'Accept-Encoding': 'gzip, deflate, br',

'Accept': '*/*',

'Referer': 'https://h5.m.taobao.com/tblive/dingtalk/pc-playback.html?cid=31664625310&uuid=bd82384b-883e-444b-8499-2b60bfc244e0&anchorId=275440629',

'Origin': 'https://h5.m.taobao.com',

'Connection': 'keep-alive',

'Host': 'dtliving-pre.alicdn.com'

}

# 获取二进制数据

response = requests.get(url, headers=headers, verify=False).content

# 将.content二进制转换为str数据类型,否则会报数据类型错误

wenjian = response.decode('utf-8')

# 保存txt文件

with open('钉钉/1.txt', 'w')as f:

f.write(wenjian)

# 读取txt文件

with open('钉钉/1.txt', 'r')as f:

wenben = f.read()

# 使用正则表达式进行数据匹配

url1 = re.findall(r'.*?-.*?-.*?-\d+-.*?/\d+\.ts\?auth_key=\d+-0-0-.*', wenben)

global i

for url_video in url1:

# 将匹配到的数据拼接完整

url_video_all = 'https://dtliving-pre.alicdn.com/live/' + url_video

# 请求所有小节视频的URL链接

video_response = requests.get(url_video_all, headers=headers, verify=False).content

# 将所有小节的ts文件存放到新建的‘钉钉’文件夹

with open('钉钉/{}.ts'.format(i), 'wb')as f:

f.write(video_response)

i += 1

# 显示正在保存的内容

print('正在保存{}.ts'.format(i))

if __name__ == '__main__':

dingding()

视频整合

然后我们在钉钉文件夹当中就可以看到我们保存的所有ts文件:

然后我们使用格式工厂软件,将所有的文件转换为MP4格式:

点击添加文件夹,将存储所有ts文件的文件夹添加进来,然后转换成MP4格式,存放在指定文件夹(在输出文件夹指定)。这里我们将输出文件放在桌面新建文件夹中的video。

视频整合我们所用到的库叫做moviepy,这个库可以对视频进行整合、裁剪以及一些剪辑操作,我们目前只会使用合并视频的功能,所以对其他功能不做介绍。

打开之前创建的video_add.py文件,写入下列代码:

from natsort import natsorted

from moviepy.editor import *

import os

# 定义一个空列表存放数据

L=[]

# 将video文件夹中的视频导入

for root,dirs,files in os.walk('./video'):

# 按照1,2,3,4……的顺序排列视频

files = natsorted(files)

# files.sort()

for file in files:

# 进行if判断,如果文件后缀名是MP4,那么就将其添加至列表

if os.path.splitext(file)[1]=='.mp4':

filePath=os.path.join(root,file)

video=VideoFileClip(filePath)

L.append(video)

# 将列表视频合并

final_clip=concatenate_videoclips(L)

# 将合并好的视频输出为target.mp4文件,帧率24

final_clip.to_videofile('./target.mp4',fps=24)

等待程序运行完成,就可以在新建文件夹当中就可以看到已经合并好的视频target.mp4文件。

这样就完成了对群直播回放视频的保存工作。

原创不易,未经作者授权,请勿转载或用于任何商业用途,谢谢合作。

python脚本下载钉钉的文件_利用python下载钉钉群直播视频相关推荐

  1. python 钉钉机器人发送图片_利用Python自动发送钉钉数据消息

    现在大部分公司都使用钉钉作为内部的主要沟通工具,钉钉消息基本都上都能快速有效的被阅读,打开率会比邮件高上不少.所以准备使用钉钉来播报平台每日的成交额,并附上一些鼓励的话和图片.起到一个激励团队的作用 ...

  2. python下载网页上的文件_用Python下载一个网页保存为本地的HTML文件实例

    Python打开网页并另存为静态html怎么实现 如何用python把网页上的文本内容保存下来那一世的长情,谱一首长相思,冷了多少凄凉,漫了多少青丝,化作多少烟雨,吹散多少世间情!徒悲,奈何,这一世, ...

  3. python使用ttf文件_利用python工具生成彩色字体ttf

    之前研究过字体文件ttf的python脚本化生成方法,主要是利用fontforge的支持python脚本这一功能.现在最近手机市场上出现了几种彩色字体,这是怎么做到的呢?研究了一下,发现还是利用Pyt ...

  4. python用什么处理文件_利用Python如何快速处理文件

    利用Python如何快速处理文件 我之前要合并将近1000个CSV表格 每个表格共370列,约360行不等,列名相同 三个方案瞬间浮现在我眼前: 1.Ctrl C + Ctrl V--可以睡公司了: ...

  5. python处理word或者pdf文件_利用python程序生成word和PDF文档的方法

    一.程序导出word文档的方法 将web/html内容导出为world文档,再java中有很多解决方案,比如使用Jacob.Apache POI.Java2Word.iText等各种方式,以及使用fr ...

  6. python分析pcap文件_利用Python库Scapy解析pcap文件的方法

    每次写博客都是源于纳闷,python解析pcap这么常用的例子网上竟然没有,全是一堆命令行执行的python,能用吗?玩呢? pip安装scapy,然后解析pcap: import scapy fro ...

  7. abaqus python 读取文件_利用Python修改Abaqus的inp文件(关键字)

    利用Python修改Abaqus的inp文件(关键字) Abaqus的关键字可以直接打开inp文件或者在Abaqus的key word里面直接修改,当然除了这个,还可以利用Python语言进行修改,也 ...

  8. python通过内置的什么函数打开一个文件_利用python进行文件操作

    这篇文章主要介绍了如何利用python进行文件操作,帮助大家更好的理解和使用python,感兴趣的朋友可以了解下 什么是文件 文件是系统存储区域的一个命名位置,用来存储一些信息,便于后续访问.能够在非 ...

  9. python中颜色介意用数字表示_利用Python实现颜色色值转换的小工具

    先看看Zeplin 的颜色色值显示示例 原有处理方式 因为我会 Python (仅限于终端输入 python 然后当做计算器算,或者用 hex() 函数把十进制转换成十六进制),所以遇到这样的问题我当 ...

最新文章

  1. 考研规划计算机科学与技术,【图片】2020考研,老学长教你如何规划!【计算机考研吧】_百度贴吧...
  2. 考前多熟记的知识点(1)~(3)《系统集成项目管理工程师软考辅导》
  3. SQL 2005 全文索引
  4. python自动化测试-D6-学习笔记之一(常用模块补充datetime模块)
  5. python 环境常用指令(updating...)
  6. C++11 并发指南五(std::condition_variable 详解)
  7. 鹿晗都有 AI 粉了,为什么 AI 换脸剧的效果还这么渣?
  8. 天坑-安装salt-api安装的正确姿势
  9. qgraphicsview鼠标移动图片_QGraphicsView中的QGraphicsItem鼠标拖动
  10. 轻松搞定对容器实例日志设置定期清理和回卷 1
  11. Parallels Desktop 安装Win 10提示“安全启动功能防止操作系统启动”该如何操作?
  12. 移动通信原理B-------例题解答2
  13. 华为手机计算机快捷,快速让华为手机变成一台电脑,INNOCN便携显示器的更多玩法...
  14. data后缀文件解码_对任何格式的文件实现加密与解密软件
  15. 【3D游戏建模全流程教学】使用3dsmax与UE4制作世界末日地铁场景
  16. github 下载慢下载失败?不存在的!!!
  17. 打印机乱码不停打印_性价比高的打印机推荐【2020年9月】-十大高性价比家用/办公打印机...
  18. 牛客练习赛68 A.牛牛的mex
  19. 浅谈网站导航设计经验
  20. 在keil 4中添加stc系列芯片的方法--【sky原创】

热门文章

  1. JavaScript -- array类型
  2. The Simpsons第一季简要总结
  3. 解决win系统点击右键时鼠标一直不停转圈操作
  4. ACL 2016 会议论文全集
  5. pycharm使用-venv环境创建
  6. 闭环检测数据集_闭环:收集配置管理数据的秘诀
  7. PyPI 推送自己的
  8. 租赁小程序|人车网租赁系统|电动车租赁系统包含哪些功能?
  9. 计算机原理与设计实验,计算机组成原理实验四:基本模型机设计与实现
  10. 中国花几亿制造一根内存 究竟为什么?