我正在尝试下载已上传到云中的视频,并且正在使用API提取数据。
python脚本似乎可以很好地下载文件,但是当我打开视频时,它将引发此错误:
我尝试使用其他选项(VLC,Windows Media Player等)播放视频,但没有运气。有人可以帮忙吗?
if res.status_code == 200:
body = res.json()
for meeting in body["meetings"]:
try:
password = requests.get(
f"{root}meetings/{meeting['uuid']}/recordings/settings?access_token={token}").json()["password"]
url = f"https://api.zoom.us/v2/meetings/{meeting['uuid']}/recordings/settings?access_token={token}"
res = requests.patch(
url,
data=json.dumps({"password": ""}),
headers=sess_headers)
except:
pass
topic = meeting["topic"]
try:
os.makedirs("downloads")
except:
pass
for i, recording in enumerate(meeting["recording_files"]):
#os.makedirs(topic)
download_url = recording["download_url"]
name = recording["recording_start"] + \
"-" + meeting["topic"]
ext = recording["file_type"]
filename = f"{name}.{ext}"
path = f'./downloads/{filename}'.replace(":", ".")
res = requests.get(download_url, headers=sess_headers)
with open(Path(path), 'wb') as f:
f.write(res.content)
else:
print(res.text)
接下来一个可能的问题是:
完成每个步骤后,res = requests.get(...)
您需要插入line res.raise_for_status()
。
这是检查状态码是否为200所必需的。
默认情况下requests
,如果状态代码不是200,则不会抛出任何内容。因此,如果状态代码错误,则您res.content
可能是无效的响应正文。
如果这样做,res.raise_for_status()
则requests
状态码不是200时将抛出错误,从而避免了可能的问题。
但是状态码为200并不一定意味着没有错误。某些服务器使用包含错误描述和状态码200的HTML进行响应。
另一个可能的问题是,下载URL缺少其中的授权令牌,因此您需要通过标头提供它。因此,而不是最后requests.get(...)
放置下一个代码:
res = requests.get(download_url, headers = {
**sess_headers, 'Authorization': 'Bearer ' + token})
另外,您还需要检查结果响应包含的内容类型,因此在lastres = response.get(...)
之后执行下一步:
print('headers:', res.headers)
并检查里面的东西。具体看一下字段Content-Type
,它应该具有某些二进制类型,例如application/octet-stream
或video/mp4
。但绝对不是某些文本格式,例如application/json
或text/html
,文本格式文件绝对不是视频文件。如果要text/html
尝试重命名文件,test.html
然后在浏览器中打开文件以查看其中的内容,则服务器可能会在此HTML内响应某些错误。
同样只是在视觉上比较一些查看器中两个文件的内容-通过脚本下载和通过某些下载器(例如浏览器)下载。也许有一些明显的问题是肉眼可见的。
视频的文件大小也应该很大。如果是这样,50KB
那么里面可能有一些不良数据。
更新:
终于解决了下一个解决方案,将最后一个替换requests.get(...)
为:
res = requests.get(download_url + '?access_token=' + token, headers=sess_headers)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句