推荐关注
› Meteor
› JSLint - a JavaScript code quality tool
› jsFiddle
› D3.js
› WebStorm
推荐书目
› JavaScript 权威指南第 5 版
› Closure: The Definitive Guide
Soar360

写了一个慕课网视频批量下载脚本生成脚本

  •  8
     
  •   Soar360 · Oct 9, 2015 · 15921 views
    This topic created in 4048 days ago, the information mentioned may be changed or developed.

    标题是不是很绕……
    其实就是一段 Javascript 代码,用来生成批量下载视频的 shell 代码。

    首先进入教程学习页面,比如这个: http://www.imooc.com/learn/514

    然后 F12 打开控制台( Chrome 浏览器),把写好的脚本粘贴执行。

    执行完毕后,再输入:“ document.cmd ”就可以拿到下载命令了。直接 shell 执行或者在 Windows 下搞一个 wget 放在同级目录即可。

    脚本如下:

    (function () {
        document.cmd = '';
        var dic = {};
        function getJsonCallback(json) {
            var result = json.data.result;
            var data = { name: result.name, id: result.mid, url: result.mpath[0] };
            var cmd = 'wget -O "' + dic[data.id] + " - " + data.name + '.mp4" ' + data.url;
            console.log(cmd);
            document.cmd += cmd;
            document.cmd += '\r\n';
        }
    
        var index = 1;
        $('.J-media-item').each(function () {
            var url = $(this).attr('href');
            var id = url.split('/')[2];
            var jsonPath = "http://www.imooc.com/course/ajaxmediainfo/?mid=" + id + "&mode=flash";
            dic[id] = index;
            $.getJSON(jsonPath, getJsonCallback);
            index++;
        });
    })();
    
    Supplement 1  ·  Oct 10, 2015

    2015 年 10 月 10 日:修正错误下载练习题的问题,感谢 @hronro 的反馈。

    (function () {
        document.cmd = '';
        var dic = {};
        function getJsonCallback(json) {
            var result = json.data.result;
            var data = { name: result.name, id: result.mid, url: result.mpath[0] };
            var cmd = 'wget -O "' + dic[data.id] + " - " + data.name + '.mp4" ' + data.url;
            console.log(cmd);
            document.cmd += cmd;
            document.cmd += '\r\n';
        }
    
        var index = 1;
        $('.J-media-item').each(function () {
            var url = $(this).attr('href');
            var data = url.split('/');
            var type = data[1];
            var id = data[2];
            if(type != 'video'){
                return;
            }
    
            var jsonPath = "http://www.imooc.com/course/ajaxmediainfo/?mid=" + id + "&mode=flash";
            dic[id] = index;
            $.getJSON(jsonPath, getJsonCallback);
            index++;
        });
    })();
    
    48 replies  •  2017-04-22 23:37:08 +08:00
    z742364692
    z742364692
    Oct 9, 2015 via Android
    1
    这个必须赞,电脑上就是不能下载,麻烦
    overlords
    overlords
    Oct 9, 2015❤️1
    2
    都已经免费了 就不要这样子搞么 投资人看到不好啊。
    Soar360
    Soar360
    OP
    Oct 9, 2015❤️1
    3
    @overlords 还是需要搞一下,方便离线看。
    uxstone
    uxstone
    Oct 9, 2015
    4
    慕课网靠什么赚钱?

    网易云课堂是含金钥匙出生的
    极客学院有 VIP 机制,
    慕课网全免费,靠什么盈利?
    ksupertu
    ksupertu
    Oct 9, 2015
    5
    @uxstone 教育部开过一个互联网+下一代教育大会
    Soar360
    Soar360
    OP
    Oct 9, 2015
    6
    @uxstone
    有啊、可以帮助推广开发组件啊。比如阿里云、测试平台什么的。
    lxjsmdc
    lxjsmdc
    Oct 9, 2015
    7
    正好下载了在跑步机上看
    iamcho
    iamcho
    Oct 9, 2015
    8
    赞一个
    Dsljlbaby
    Dsljlbaby
    Oct 9, 2015 via Android
    9
    顶一个
    dadaboy
    dadaboy
    Oct 9, 2015
    10
    Like.
    lxjsmdc
    lxjsmdc
    Oct 9, 2015❤️1
    11
    @Soar360 导出的顺序是乱序的 求改成按顺序从 1 开始的
    Soar360
    Soar360
    OP
    Oct 9, 2015
    12
    @lxjsmdc 下载的顺序是乱的,但是下载完后,观看是就是对得了。
    kappa
    kappa
    Oct 9, 2015
    13
    前端不熟悉,博览网 boolan.com 有办法搞定吗?
    lxjsmdc
    lxjsmdc
    Oct 9, 2015
    14
    @Soar360 最近正在学 JS 很奇怪这例子。获取到的是按顺序的,怎么打印输出顺序就不对了了,望赐教。


    还有,有什么方法,例如迅雷或者百度云等云空间,批量导入的同时支持自定义文件名的呢
    lxjsmdc
    lxjsmdc
    Oct 9, 2015
    15
    @Soar360 wget -O 的值是中文会乱码 求解决方法
    badcode
    badcode
    Oct 10, 2015 via iPhone
    16
    好吧! IDM 足矣
    wuhuaji
    wuhuaji
    Oct 10, 2015
    17
    @lxjsmdc 我这里并没有乱码,你可以说下你的具体什么情况
    Rico
    Rico
    Oct 10, 2015
    18
    太实用了,大赞!
    cszchen
    cszchen
    Oct 10, 2015
    19
    做成浏览器插件会不会好一点
    Soar360
    Soar360
    OP
    Oct 10, 2015
    20
    @cszchen 是会好一点,但是没做过……你可以试下,我毕竟不是专业搞前端的。
    del1214
    del1214
    Oct 10, 2015
    21
    好像没有效果啊
    del1214
    del1214
    Oct 10, 2015
    22
    用错地方了,还真好用
    Heavytiger
    Heavytiger
    Oct 10, 2015
    23
    真心好用。 thanks very much!
    Myflos
    Myflos
    Oct 10, 2015
    24
    大赞!要是能自动改名就更好了
    @Soar360
    Soar360
    Soar360
    OP
    Oct 10, 2015
    25
    @Myflos
    是自动更名啊。
    Rico
    Rico
    Oct 10, 2015
    26
    win 下把脚本放入一个 txt 文件然后

    ```
    @echo off
    for /f "tokens=*" %%i in (download.txt) do (start cmd /c %%i & ping -n 2 127.1>nul)
    pause
    ```

    保存成 bat
    就会批量下载了,wget 的多任务貌似不能同时
    nijux
    nijux
    Oct 10, 2015
    27
    移动端都有离线功能 可以下载下来的
    zjqzxc
    zjqzxc
    Oct 10, 2015
    28
    @Rico wget 单进程单线程,同时下载就多开几个 screen 。
    没试过能不能 axel 多线程,如果能的话其实一个一个下问题也不大。
    zjqzxc
    zjqzxc
    Oct 10, 2015
    29
    @Rico axel -n 10 单任务已经把带宽跑满了,,不打算纠结多任务了。
    第 7 行改为: var cmd = 'axel -n 10 -o "' + dic[data.id] + " - " + data.name + '.mp4" ' + data.url;
    -n 后面的值根据总带宽除以 wget 稳定后的速度再稍微富裕几个线程
    Soar360
    Soar360
    OP
    Oct 10, 2015
    30
    @zjqzxc 有的搞,谢谢。
    Rico
    Rico
    Oct 10, 2015
    31
    嗯.谢谢!
    Rico
    Rico
    Oct 10, 2015
    32
    @zjqzxc 嗯,谢谢
    intsilence
    intsilence
    Oct 10, 2015
    33
    很实用,感谢。
    M4ster
    M4ster
    Oct 10, 2015
    34
    用 Node.js 写了个 imooc 小爬虫
    https://github.com/monkeym4ster/imooc_crawler
    bozong
    bozong
    Oct 10, 2015
    35
    @M4ster 666666
    M4ster
    M4ster
    Oct 10, 2015
    36
    Screenshot:
    hronro
    hronro
    Oct 10, 2015
    37
    有个小 bug ,有的章节可能是练习题,但是还是把它解析成 MP4 了
    Soar360
    Soar360
    OP
    Oct 10, 2015
    38
    @hronro 能给个链接吗?
    fishlee
    fishlee
    Oct 10, 2015 via Android
    39
    谢谢,先拿去了
    angusun
    angusun
    Oct 10, 2015
    40
    mark
    hronro
    hronro
    Oct 10, 2015
    41
    @Soar360 嗯,找了个这种情况特别多的:
    http://www.imooc.com/learn/141
    https://ooo.0o0.ooo/2015/10/10/5618e212e3c6d.png
    Soar360
    Soar360
    OP
    Oct 10, 2015
    42
    @hronro 搞定了,谢谢。
    mgcnrx11
    mgcnrx11
    Oct 11, 2015
    43
    报告一下:使用 @M4ster 的 coffee 脚本在下载 337 课程的时候抱错,貌似是解析的问题
    M4ster
    M4ster
    Oct 11, 2015
    44
    @mgcnrx11 感谢反馈。已对文件名进行特殊符号替换为下划线处理 ;-)
    LSkyler
    LSkyler
    Oct 14, 2015
    45
    太实用了,大赞!o.
    fhefh
    fhefh
    Dec 4, 2015
    46
    正好有要下载的教程 嘿嘿
    zb3040
    zb3040
    Apr 21, 2017
    47
    请教楼主现在这个脚本还在更新吗? http://www.imooc.com/learn/822 ,这个视频用着段脚本获取不到 url
    Soar360
    Soar360
    OP
    Apr 22, 2017
    48
    @zb3040 已经被封杀了。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   1455 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 72ms · UTC 11:15 · PVG 19:15 · LAX 03:15 · JFK 06:15
    ♥ Do have faith in what you're doing.