zoukankan      html  css  js  c++  java
  • 从CNTV下载《小小智慧树》

    一、背景  

      孩子喜欢看央视的《小小智慧树》,在iPad上只能用优酷客户端看仅有的几段网友上传的,孩子姥姥姥爷年纪大了,在线播放操作起来不方便,干脆下载到iPad上看吧。

    二、在线观看视频过程分析

      首先用Fiddler截了在线看视频的通讯过程,大概是这样的:

      1,访问视频地址: http://tv.cntv.cn/video/C17195/VIDE100143519445,这是一个GET请求。

          反馈的内容中,有一段动态生成的javascript代码,重点在下面代码中的“7903311a7bc2440a83e0d4767e8aebd1”,我们将在后面用到。

    fo.addVariable("videoCenterId","7903311a7bc2440a83e0d4767e8aebd1");

      2,获取视频列表,又一个GET请求,完整的URL是这样子:

          http://vdn.apps.cntv.cn/api/getHttpVideoInfo.do?pid=4cd2a3992a004ed189bedbd4c3797e52&tz=-8&from=000donghua

          &url=http://tv.cntv.cn/video/C10406/VIDE100143558201&idl=32&idlr=32&modifyed=false

      pid参数的值就是上一步中取到的id。url参数就是上一步访问的视频地址。

      获取到的视频列表是通过json格式的数据,里面就是最终的视频下载地址,《小小智慧树》使用的是mp4文件格式。

      3,分段下载视频,下载完成后,用其他工具合并成一个文件,我用BoilsoftVideoJoiner,不改变编码,仅合并文件。

    三、下载在线视频代码

      Python3.3.0下使用。代码放在了gist上:https://gist.github.com/4203743

      支持命令行参数,比如在windows下运行:C:\Documents and Settings\codes\gist\4203743> python lrt.py 视频URL

      

    四、新发现的问题

      1,子站问题。上面2.2节获取视频列表的请求中有个from参数,动画子站的值是000donghua,体育子站的值是000sports,可能是在服务端生成播放器代码时写死的。

      2,编码问题,cntv的动画子站用的是utf8编码,而体育子站用的是gbk编码,在对网页内容做搜索时要分别解码。

      通过对url二级域名的比较,对这两个问题进行了野蛮的解决。

      今天(2013-2-8)又发现了个子站,而且下载地址全部集成到一个页面中,只是分成不同的pid。在这里

  • 相关阅读:
    反射API(二)
    反射API(一)
    session一二事
    自定义session的存储机制
    JavaScript 入门笔记
    PHP引用赋值
    九九乘法口诀表
    PHP流程控制笔记
    PHP函数总结 (七)
    Linux程序编辑器习题汇总
  • 原文地址:https://www.cnblogs.com/tara/p/2793895.html
Copyright © 2011-2022 走看看