Foair / course-crawler

🎓 **大学MOOC、学堂在线、网易云课堂、好大学在线、爱课程 MOOC 课程下载。

Home Page:https://mooc.xoy.io

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

网易**大学MOOC视频格式变化了,下载不了了

121786404 opened this issue · comments

https://www.icourse163.org/learn/NUDT-1205969803?tid=1206265203

Traceback (most recent call last):
File "mooc.py", line 83, in
main()
File "mooc.py", line 72, in main
mooc.start(args.url, config, cookies)
File "D:\Program\course-crawler\moocs\icourse163.py", line 212, in start
get_resource(term_id)
File "D:\Program\course-crawler\moocs\icourse163.py", line 182, in get_resource
parse_res_list(video_list, rename, parse_resource, playlist.write)
File "D:\Program\course-crawler\moocs\utils.py", line 359, in parse_res_list
res.operation(*operator)
File "D:\Program\course-crawler\moocs\utils.py", line 63, in operation
func(self)
File "D:\Program\course-crawler\moocs\icourse163.py", line 76, in parse_resource
if WORK_DIR.need_download(file_name + ext, CONFIG["overwrite"]):
UnboundLocalError: local variable 'ext' referenced before assignment

video['format'] == 'mp4' 不成立了,变成hls了

唔 我看了下这个课程确实不能用,有空我试着改一下,如果急用可以临时使用这个mooc-dl

(仅限临时使用,功能不齐全,而且视频会直接下载,可能出现些小 bug 什么的)

算是临时修复了下@1c1d35c8b,但是该修复方式我并不是很满意,因为是使用的旧接口

在去年这个时候网易对视频获取接口进行了变动,旧接口获取的视频 url 全是错误的,但是按照 #27#20 中的方法对视频 url 进行修改是可以获得真实 url 的,但我考虑到这个接口可能在以后某个时刻被彻底放弃掉,就对新接口进行了支持,唯一麻烦的是,新接口需要 cookies ,不过我认为这样更稳妥一些,在几个版本后我彻底删掉了旧接口

现在因为新接口仅支持 m3u8 ,如果不想办法下载并合并的话,新接口是不适合的,所以暂时使用了旧接口

旧接口的使用方法的话,在第一次使用时要求输入 cookies 时按回车即可(注入空的 cookies),如果已经注入了 cookies ,请在运行时增加参数 -c 以重新输入 cookies (也是回车即可)

其实我也是有些其他的解决方案的,比如直接利用上面提到的手机端接口(mooc-dl),但我更倾向于重构整体代码以更好地支持下载器的调用,但限于时间与精力,初步尝试后我还是搁置了,emmmmmm 今后可能也没太多时间关注这边了

再次复现

(venv) $ python mooc.py https://www.icourse163.org/course/BIT-268001
Python语言程序设计 - 北京理工大学
【第0周】课程导学
  0.1 课程基本情况
    【视频】开课彩蛋: 新开始新征程 ...
    【视频】课程定位与目标
    【视频】课程教学安排
    【视频】课程学习建议
    【文档】0.1 课程基本情况
  0.2 全课程内容导学  (必看: 课程内容渐进式体验)
    【视频】课程内容概述
    【视频】课程内容渐进式体验
    【文档】0.2 课程内容导学
(此处由于太长,省略)
------> 实例12-政府工作报告词云源代码.zip
------> 1.1.1 开课彩蛋 新开始新征程 ....mp4
Traceback (most recent call last):
  File "mooc.py", line 87, in <module>
    main()
  File "mooc.py", line 62, in main
    icourse163.start(args.url, config)
  File "/home/billchenchina/桌面/venv/mooc/icourse163.py", line 175, in start
    get_resource(term_id)
  File "/home/billchenchina/桌面/venv/mooc/icourse163.py", line 151, in get_resource
    parse_res_list(video_list, rename, parse_resource, playlist.write)
  File "/home/billchenchina/桌面/venv/mooc/utils.py", line 337, in parse_res_list
    res.operation(*operator)
  File "/home/billchenchina/桌面/venv/mooc/utils.py", line 56, in operation
    func(self)
  File "/home/billchenchina/桌面/venv/mooc/icourse163.py", line 48, in parse_resource
    res_print(file_name + ext)
UnboundLocalError: local variable 'ext' referenced before assignment

@billchenchina 按我上面的方法重试了吗 更新到我的最新版本 使用参数 -c 清除cookies启动 ,并回车注入空cookies

如果该方法也无效 临时使用上面的 mooc-dl 吧

ps: 学完 Python 可以参与进来呢~我当年也是这门课入门滴:joy:

@billchenchina 按我上面的方法重试了吗 更新到我的最新版本 使用参数-c清除cookies启动 ,并回车注入空cookies

如果该方法也无效 临时使用上面的 mooc-dl吧

ps: 学完 Python 可以参与进来呢~我当年也是这门课入门滴

也无效呢~而且在 mooc.py 里面

from mooc import icourse163

好像少一行
cookies = store_cookies('icourse163.json')
加上也没用😂😂
之前我就用 mooc-dl 来着😂被你 redirect 到的这里
(会参与进来的)

我想起来啦,mooc-dl 你提过 pr 来着,我说头像有点熟悉的感觉~

不过你看的貌似不是我的分支呢,我的分支看这里,因为 Foair 销声匿迹好久了(我开始关注这个项目之后他就……不见了,之后只出现过一次),我只能在我的分支上做些小修复

如果真的旧接口也无效的话,我只能将比较稳定的手机端接口接进来了(也就是 mooc-dl)

我想起来啦,mooc-dl 你提过 pr 来着,我说头像有点熟悉的感觉~

不过你看的貌似不是我的分支呢,我的分支看这里,因为 Foair 销声匿迹好久了(我开始关注这个项目之后他就……不见了,之后只出现过一次),我只能在我的分支上做些小修复

如果真的旧接口也无效的话,我只能将比较稳定的手机端接口接进来了(也就是 mooc-dl)

介个貌似也不是很星QAQ
image

刚刚做了一下输出调试 qwq,
video['videoUrl']http://jdvodrvfb210d.vod.126.net/mooc-video/nos/hls/{yyyy}/{mm}/{dd}/{something}.m3u8?ak={something} 格式的,video['format']hls

我想起来啦,mooc-dl 你提过 pr 来着,我说头像有点熟悉的感觉~
不过你看的貌似不是我的分支呢,我的分支看这里,因为 Foair 销声匿迹好久了(我开始关注这个项目之后他就……不见了,之后只出现过一次),我只能在我的分支上做些小修复
如果真的旧接口也无效的话,我只能将比较稳定的手机端接口接进来了(也就是 mooc-dl)

介个貌似也不是很星QAQ
image

刚刚做了一下输出调试 qwq,
video['videoUrl']http://jdvodrvfb210d.vod.126.net/mooc-video/nos/hls/{yyyy}/{mm}/{dd}/{something}.m3u8?ak={something} 格式的,video['format']hls

行吧……我试了,中 M 真的彻底要拥抱 hls 了应该,这个把每一段下载下来不难、合并也不难,但是不适合放在这个框架里,因为这个框架是同时支持视频自行下载(Video.txt)和即时下载(aria2)的,而且自行下载优先,如果想要支持 m3u8 的话就必须放弃自行下载这种方式,这一点我不是特别想改

后续我可能会把 mooc-dl 接口放进来,但因为它暂时仅支持爱课程账号登录(暂时我只做到了这个)其实有点不太方便,像 mooc-dl 那种内置账号并不是特别合适,所以我的推荐是暂时先用 mooc-dl 过一段时间观察一下我再考虑合并的事

另外,移动端端接口真的好稳定的说,我去年初学那会儿开始到现在近 2 年了,PC 端大改了 2 次了都,移动端还是可用 😂

你好~~我想问下移动端的接口你是在哪里找的?

我想起来啦,mooc-dl 你提过 pr 来着,我说头像有点熟悉的感觉~
不过你看的貌似不是我的分支呢,我的分支看这里,因为 Foair 销声匿迹好久了(我开始关注这个项目之后他就……不见了,之后只出现过一次),我只能在我的分支上做些小修复
如果真的旧接口也无效的话,我只能将比较稳定的手机端接口接进来了(也就是 mooc-dl)

介个貌似也不是很星QAQ
image
刚刚做了一下输出调试 qwq,
video['videoUrl']http://jdvodrvfb210d.vod.126.net/mooc-video/nos/hls/{yyyy}/{mm}/{dd}/{something}.m3u8?ak={something} 格式的,video['format']hls

行吧……我试了,中 M 真的彻底要拥抱 hls 了应该,这个把每一段下载下来不难、合并也不难,但是不适合放在这个框架里,因为这个框架是同时支持视频自行下载(Video.txt)和即时下载(aria2)的,而且自行下载优先,如果想要支持 m3u8 的话就必须放弃自行下载这种方式,这一点我不是特别想改

后续我可能会把 mooc-dl 接口放进来,但因为它暂时仅支持爱课程账号登录(暂时我只做到了这个)其实有点不太方便,像 mooc-dl 那种内置账号并不是特别合适,所以我的推荐是暂时先用 mooc-dl 过一段时间观察一下我再考虑合并的事

另外,移动端端接口真的好稳定的说,我去年初学那会儿开始到现在近 2 年了,PC 端大改了 2 次了都,移动端还是可用 😂

你好~~我想问下移动端的接口你是在哪里找的?

@czt475297133 使用 Fiddler 抓包,详情自行搜索引擎搜索「移动端抓包」