查看: 1738|回复: 4

搜狐视频代理和采集得详解实例

 关闭 [复制链接]

该用户从未签到

鲜花(0) 鸡蛋(0)
发表于 2012-6-22 16:21 | 显示全部楼层 |阅读模式
你可以把 搜狐视频 的电影,电视剧 的视频 所在的网址复制起来,
然后粘帖到下面播放器中的输入文本枢,
最后按确定 就可以看到代理,或者采集的过程序了

备用2个测试地址
电视剧测试 http://tv.sohu.com/20120402/n339672627.shtml
电影测试 http://tv.sohu.com/20100706/n273317584.shtml
实例效果地址;http://www.flashcs5as3.com/bfs/搜狐视频代理.swf
源文件下载地址;[url]http://www.flashcs5as3.com/bfs/搜狐视频代理.zip[/url]
脚本如下
  1. /*-------------------搜狐视频 代理与采集-------------
  2.   |                 2012-06-18-日编                |
  3.   |              编  啊城  QQ 475830480            |
  4.   |               www.flashcs5as3.com              |
  5. ---------------------------------------------------*/
  6. //---------------------------常规参数设置---------------
  7. var i = 0;
  8. var 总片段数量;
  9. var ii = 1;
  10. var 剧集列表id;
  11. // 例子 http://tv.sohu.com/20120601/n344624004.shtml   http://tv.sohu.com/20120502/n342149564.shtml
  12. System.useCodepage = true;//防止乱码
  13. _root.bfs = new Object();//新建原始参数
  14. //--------搜狐管方内部的代理-----------------------------------------------------------
  15. _root.bfs.搜狐视频代理 = "http://hot.vrs.sohu.com/vrs_flash.action?vid=";
  16. _root.bfs.搜狐剧集列表 = "http://hot.vrs.sohu.com/vrs_videolist.action?playlist_id=";
  17. //本人开发的代理 http://q475830480.cn/bfs/代理程序/搜狐.asp?vid=
  18. //------------------------------------------------------------------------------------
  19. _root.bfs.mySound = new Sound();//新建声音
  20. _root.bfs.my_nc = new NetConnection();//新建视频连接
  21. _root.bfs.my_nc.connect(null);//插定连接为空
  22. _root.bfs.my_ns = new NetStream(_root.bfs.my_nc);//新建视频流
  23. _root.bfs.my_ns.setBufferTime(1);//设置续冲时间 值为 1 秒
  24. _root.bfs.buffer_ns = new NetStream(_root.bfs.my_nc);//新建副视频流
  25. _root.bfs.buffer_download = false;//设置 视频流 加载的装态
  26. _root.bfs.downloading = false;//视频流的长度 装态
  27. _root.bfs.musicPlayId = _root.bfs.listPlayId=_root.bfs.listOpenId="0";
  28. _root.bfs.vol_value = 80;//设为音量为40
  29. _root.bfs.isPlaying = true;
  30. _root.bfs.搜狐视频url = 输入地址.text;
  31. scrollList._visible = false;
  32. loadhtm();
  33. //-------------------输入按钮------------------------
  34. 确定输入按钮.onPress = function() {
  35. System.useCodepage = true;//防止乱码
  36. //----------清除文本枢内容----------
  37. 网页html的源文件.text = "";
  38. 视频代理编号.text = "";
  39. flv_多少集.text = "";
  40. flv_多少片段.text = "";
  41. 合并完整flvurl.text = "";
  42. 剧集txt.text = "";
  43. 剧集列表txt.text = "";
  44. flv_xml.text = "";
  45. 集数例表.text = "";
  46. _root.scene.cfvideo.close();//清除视频
  47. delete _root.bfs.my_nc;//清除视频流
  48. delete 搜狐代理htm_id;//清除 加载视频 的网页地址
  49. delete 搜狐代理xml;//清除 加载 XML 地址
  50. delete 剧集列表;//清除  剧集列表  XML
  51. _root.bfs.musicPlayId = _root.bfs.listPlayId=_root.bfs.listOpenId="0";
  52. _root.bfs.搜狐视频url = 输入地址.text;
  53. };
  54. 确定输入按钮.onRelease = function() {
  55. i = 0;
  56. ii = 1;
  57. loadhtm();
  58. };
  59. //----------------------load 视频网页 html---------------------------
  60. function loadhtm() {//加载视频所在的网页地址  
  61. var 搜狐代理htm_id:XML = new XML();//新建一个XML
  62. 搜狐代理htm_id.ignoreWhite = true;//防止xml中的空格参数
  63. 搜狐代理htm_id.load(_root.bfs.搜狐视频url);//加载 html
  64. 搜狐代理htm_id.onLoad = function(如果加载成功) {
  65.   if (如果加载成功) {//加载OK后,积行动作
  66.    网页html的源文件.text = 搜狐代理htm_id;// 所有的html 源文件的代码
  67.    var 代理编号 = 网页html的源文件.text.split("vid="")[1];//先找到 电影分之类 的位置
  68.    视频代理编号.text = 代理编号.split("";")[0];
  69.    if (网页html的源文件.text.lastIndexOf("vrs_playlist_id=""") != -1) {
  70.     flv_多少集.text = "1";
  71.     loadok();
  72.    } else {
  73.     var 剧集 = 网页html的源文件.text.split("vrs_playlist_id="")[1];
  74.     flv_多少集.text = 剧集.split("";")[0];
  75.     剧集列表m();
  76.    }
  77.   } else {
  78.    loadhtm();//如果没有加载成功,就接着再次加载
  79.   }
  80. };
  81. }
  82. //---------------------load  剧集列表-------------------------------------
  83. function 剧集列表m() {
  84. System.useCodepage = true;//防止乱码
  85. var 剧集列表:XML = new XML();//新建一个XML
  86. 剧集列表.ignoreWhite = true;//防止xml中的空格参数
  87. 剧集列表.load(_root.bfs.搜狐剧集列表+flv_多少集.text);//加载列表 xml
  88. 剧集列表.onLoad = function(加载列表xml) {
  89.   if (加载列表xml) {
  90.    剧集txt.text = 剧集列表;
  91.    剧集xml列表();
  92.   } else {
  93.    剧集列表m();
  94.   }
  95. };
  96. }
  97. function 剧集xml列表() {
  98. this.onEnterFrame = function() {
  99.   if (剧集txt.text.lastIndexOf("第"+ii+"集") != -1) {
  100.    剧集列表txt.text = 剧集txt.text.split("videoId":")[ii];//"relativeVideoId":
  101.   } else {
  102.    delete this.onEnterFrame;
  103.    剧集列表id = (ii-1);
  104.    flv_多少集.text = 剧集列表id;
  105.    loadok();
  106.    PlayList();
  107.    //trace(剧集列表id);
  108.   }
  109.   ii++;
  110. };
  111. }
  112. //--------------------------------------Play List------------------------------------
  113. function PlayList() {
  114. System.useCodepage = true;
  115. var _loc3;
  116. var _loc4 = new String("");
  117. var _loc5;
  118. var _loc5000;
  119. var _loc6 = flv_多少集.text;//剧集列表.firstChild.childNodes.length;
  120. var _loc2 = -1;
  121. var 影片名称 = 剧集txt.text.split("videoName":"")[1];
  122. var 当前影片名称 = 影片名称.split("第")[0];
  123. while (++_loc2<_loc6) {
  124.   var _loc3 = 当前影片名称+"  第"+(_loc2+1)+"集";
  125.   //---------------设定 点播后改变例表中的 色彩-----------------
  126.   _loc5 = "#ffffff";
  127.   if (_loc2 == _root.bfs.musicPlayId) {
  128.    if (_root.bfs.listPlayId == _root.bfs.listOpenId) {
  129.     _loc5 = "#00ff00";
  130.    }
  131.   }
  132.   _loc4 = _loc4+("<font color=""+_loc5+""><a href="asfunction:d,"+_loc2+""></a>"+(_loc2+1)+":  <a href="asfunction:p,"+_loc2+"">"+_loc3+"</a></font>"+"\n");
  133. }
  134. 集数例表.html = true;
  135. 集数例表.htmlText = _loc4;
  136. if (flv_多少集.text<=19) {
  137.   scrollList._visible = false;
  138. } else {
  139.   scrollList._visible = true;
  140. }
  141. //集数例表.setTextFormat(lrcFormat);
  142. false;
  143. if (_root.bfs.listPlayId == _root.bfs.listOpenId) {
  144.   集数例表.scroll = _root.bfs.musicPlayId-3;
  145. } else {
  146.   集数例表.scroll = 1;
  147. }
  148. if (_root.bfs.isPlaying) {
  149.   delete 搜狐代理xml;
  150.   Playflvxml();
  151. }
  152. }
  153. //-----------------------------------------------------------------------------
  154. function d(id) {
  155. 剧集列表.childNodes[0].childNodes[id].removeNode();
  156. //PlayList();
  157. }
  158. function p(id) {
  159. playThis(id);
  160. }
  161. function playThis(id) {
  162. _root.bfs.musicPlayId = id;
  163. _root.bfs.listPlayId = _root.bfs.listOpenId;
  164. _root.bfs.isPlaying = true;
  165. 剧集列表txt.text = "";
  166. PlayList();
  167. trace(_root.bfs.musicPlayId);
  168. }
  169. function Playflvxml() {
  170. _root.bfs.isPlaying = false;
  171. var mmtt = 剧集txt.text.split("videoId&quot;:")[_root.bfs.musicPlayId];
  172. 剧集列表txt.text = mmtt.split(",&quot;isNeedCaption")[0];
  173. loadok();
  174. }
  175. //---------------------------load  flv  xml ------------------------------------
  176. function loadok() {//加载代理中的XML相关 flv 信息
  177. System.useCodepage = false;
  178. var flvurl;
  179. var 搜狐代理xml = new XML();
  180. 搜狐代理xml.ignoreWhite = true;
  181. if (_root.bfs.musicPlayId == "0") {
  182.   搜狐代理xml.load(_root.bfs.搜狐视频代理+视频代理编号.text);
  183. } else {
  184.   搜狐代理xml.load(_root.bfs.搜狐视频代理+剧集列表txt.text);
  185. }
  186. 搜狐代理xml.onLoad = function(加载xml信息) {
  187.   if (加载xml信息) {
  188.    flv_xml.text = 搜狐代理xml;
  189.    var 总片段 = flv_xml.text.split("totalBlocks&quot;:")[1];
  190.    总片段数量 = 总片段.split(",&quot;ck&quot")[0];
  191.    flv_多少片段.text = 总片段数量;
  192.    //trace(总片段数量);
  193.    loadxml();
  194.   }
  195. };
  196. }
  197. function loadxml() {
  198. var flv_url = flv_xml.text.split("su&quot;:[&quot;")[1];
  199. var flvxml_t = flv_url.split("&quot;],&quot;sT&quot")[0];
  200. if (flv_xml.text.lastIndexOf("220.181.61.229") != -1) {//用字符串 搜索 视频源 的 服务器的 IP
  201.   var url = flvxml_t.split("&quot;,&quot;")[i];
  202.   flvurl = "http://220.181.61.229/?new="+url;//采用 ?new 防止 视频源 的 服务器 对客户方封锁IP (指观看影片者)
  203.   合并完整flvurl.text = flvurl;
  204.   //trace(flvurl);
  205. } else if (flv_xml.text.lastIndexOf("abcdefghijklmnopqrstuvwxyz0123456789") != -1) {//如果说 搜索不到 视频源 的 服务器的 IP 有可能是采用 别站 的资源
  206.   //采用别站的资源: 优酷  奇艺  乐视 腾讯
  207.   var video_flvURL;
  208.   var 优酷 = "http://www.youku.com/";
  209.   var 奇艺 = "http://www.iqiyi.com/";
  210.   var 乐视 = "http://www.letv.com/";
  211.   var 腾讯 = "http://v.qq.com/";
  212.   var 资源目录路径;
  213.   //------按时间来计算-调用 video 资源的路径-----------
  214.   var 本地时间 = new Date();
  215.   var 本地时间的值 = 本地时间.getHours();
  216.   if (本地时间的值<8) {
  217.    资源目录路径 = "Q";
  218.   } else if (本地时间的值<10) {
  219.    资源目录路径 = "W";
  220.   } else if (本地时间的值<12) {
  221.    资源目录路径 = "E";
  222.   } else if (本地时间的值<13) {
  223.    资源目录路径 = "R";
  224.   } else if (本地时间的值<14) {
  225.    资源目录路径 = "T";
  226.   } else if (本地时间的值<15) {
  227.    资源目录路径 = "Y";
  228.   } else if (本地时间的值<16) {
  229.    资源目录路径 = "U";
  230.   } else if (本地时间的值<17) {
  231.    资源目录路径 = "I";
  232.   } else if (本地时间的值<18) {
  233.    资源目录路径 = "O";
  234.   } else if (本地时间的值<19) {
  235.    资源目录路径 = "P";
  236.   } else if (本地时间的值<20) {
  237.    资源目录路径 = "A";
  238.   } else if (本地时间的值<21) {
  239.    资源目录路径 = "S";
  240.   } else if (本地时间的值<22) {
  241.    资源目录路径 = "D";
  242.   } else if (本地时间的值<23) {
  243.    资源目录路径 = "F";
  244.   } else {
  245.    资源目录路径 = "qwertyuiopasdfghjklzxcvbnm";
  246.   }
  247.   //---------------分析解密的路径------------------
  248.   loadurl(本地时间的值+"?new");//采用 ?new 防止 视频源 的 服务器 对客户方封锁IP
  249.   function loadurl(str) {
  250.    var _local2 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
  251.    var _local1 = 0;
  252.    var _local5 = new String("");
  253.    var _local11;
  254.    var _local7;
  255.    var _local4;
  256.    var _local6;
  257.    var _local10;
  258.    var _local9;
  259.    var _local8;
  260.    var _local12 = str.length;
  261.    while (_local1<_local12) {
  262.     _local11 = _local2.indexOf(str.charAt(_local1++));
  263.     _local7 = _local2.indexOf(str.charAt(_local1++));
  264.     _local4 = _local2.indexOf(str.charAt(_local1++));
  265.     _local6 = _local2.indexOf(str.charAt(_local1++));
  266.     _local10 = (_local11 << 2) | (_local7 >> 4);
  267.     _local5 = _local5+String.fromCharCode(_local10);
  268.     if (_local4 != 64) {
  269.      _local9 = ((_local7 & 15) << 4) | (_local4 >> 2);
  270.      _local5 = _local5+String.fromCharCode(_local9);
  271.     }
  272.     if (_local6 != 64) {
  273.      _local8 = ((_local4 & 3) << 6) | _local6;
  274.      _local5 = _local5+String.fromCharCode(_local8);
  275.     }
  276.    }
  277.    video_flvURL = _local5;
  278.    return (_local5);
  279.   }
  280.   //---------------结束 解密的路径------------------
  281.   //----------根据 各站的域名 来进行 合并完整视频的地址----------
  282.   if (flv_xml.text.lastIndexOf("youku") != -1) {
  283.    flvurl = 优酷+url+video_flvURL+"flv";
  284.   } else if (flv_xml.text.lastIndexOf("iqiyi") != -1) {
  285.    flvurl = 奇艺+url+video_flvURL+"flv";
  286.   } else if (flv_xml.text.lastIndexOf("letv") != -1) {
  287.    flvurl = 乐视+url+video_flvURL+"flv";
  288.   } else if (flv_xml.text.lastIndexOf("qq") != -1) {
  289.    flvurl = 腾讯+url+video_flvURL+"mp4";
  290.   } else {
  291.    trace("代理资源过期");
  292.   }
  293.   合并完整flvurl.text = flvurl;
  294. }
  295. playflv(flvurl,flvurl);//传达给 播放 接口
  296. i++;
  297. }
  298. //---------------------play video -------------------------------------
  299. function playflv(mu, t) {
  300. if (t == undefined) {
  301.   _root.bfs.my_ns_duration = 180;
  302. } else {
  303.   _root.bfs.my_ns_duration = t;
  304. }
  305. _root.bfs.my_ns.play(mu);
  306. if (_root.bfs.buffer_download) {//清除相关视频流通
  307.   _root.bfs.buffer_ns.close();
  308.   _root.bfs.my_ns.seek(0);
  309. }
  310. _root.bfs.my_ns.onMetaData = function(infoObject) {//检查回调 从中获取FLV文件的总时间长度
  311.   _root.bfs.my_ns_duration = infoObject.duration;//视频流的总长度
  312.   //---------显示当前的视频总时间参数-------
  313.   mmm = infoObject.duration;
  314.   tm1 = int(mmm/60);
  315.   tm2 = int(mmm%60);
  316.   tm1 = ((tm1<10) ? ("0"+tm1) : (tm1));
  317.   tm2 = ((tm2<10) ? ("0"+tm2) : (tm2));
  318.   tmm = (tm1+":")+tm2;
  319. };
  320. //---------显示当前的视频 已经播放时间参数-------
  321. function 纯环() {
  322.   mmm = _root.bfs.my_ns.time;
  323.   tta = int(mmm/60);
  324.   tts = int(mmm%60);
  325.   tta = ((tta<10) ? ("0"+tta) : (tta));
  326.   tts = ((tts<10) ? ("0"+tts) : (tts));
  327.   mmmm = (tta+":")+tts;
  328. }
  329. clearInterval(纯环事件目标);//先清除周期性时间值
  330. var 纯环事件目标 = setInterval(纯环, 100);//声明 一个含数的值为 周期性时间 计算方法:1000为1秒
  331. //------------------------检测视频流的播放状态-------
  332. _root.bfs.my_ns_downloaded = false;
  333. _root.bfs.my_ns.onStatus = function(infoObject) {
  334.   switch (infoObject.code) {
  335.    case "NetStream.Play.StreamNotFound" ://当视频流 播放时,是否可充全屏
  336.     //自己定义全屏接口();
  337.     break;
  338.    case "NetStream.Buffer.Empty" ://开始检查视频源 是否有效
  339.     if (_root.bfs.my_ns_downloaded) {//如果视频源出错
  340.      if (i<总片段数量) {
  341.       loadxml();
  342.      } else {
  343.       下一集();
  344.      }
  345.     } else {
  346.      var _local3 = setInterval(checkBufferTime, 100);//声明 一个含数的值为 周期性时间 计算方法:1000为1秒
  347.     }
  348.     break;
  349.    case "NetStream.Play.Start" ://播放后,续冲视频流不到位,进行续冲
  350.     var _local3 = setInterval(checkBufferTime, 100);
  351.     break;
  352.    case "NetStream.Buffer.Full" ://续冲完毕后,结束 周期性得设定时间值
  353.     clearInterval(_local3);//清除周期性时间值
  354.     break;
  355.    case "NetStream.Buffer.Flush" ://检查视频源 一切正常
  356.     _root.bfs.my_ns_downloaded = true;//传达值数 为正常
  357.     break;
  358.    case "NetStream.Play.Stop" ://检查视频流 是否播放 完
  359.     if (i<总片段数量) {
  360.      loadxml();
  361.     } else {
  362.      下一集();
  363.     }
  364.     break;
  365.    default :
  366.     break;
  367.   }
  368. };
  369. changesize(438,278);//定义 video 的宽与高
  370. sound.volset.setVol();//设置音量
  371. _root.scene.cfvideo.attachVideo(_root.bfs.my_ns);//设定视频流对象要显示给  video  视频输入
  372. _root.bfs.my_ns_mc.attachAudio(_root.bfs.my_ns);//执行 视频流对象
  373. _root.bfs.mySound = new Sound(_root.bfs.my_ns_mc);//从 视频流 中设定 Sound 声音
  374. //------------------------------  video  加载  与 缓冲-------------------------------
  375. function checkBufferTime() {
  376.   var _loc2 = Math.round(_root.bfs.my_ns.bufferLength/_root.bfs.my_ns.bufferTime*100);
  377.   ffff = Math.round(_root.bfs.my_ns.bytesLoaded/_root.bfs.my_ns.bytesTotal*100)+"%";
  378.   if (_loc2<100 && _root.bfs.my_ns.bytesLoaded != _root.bfs.my_ns.bytesTotal) {
  379.    _root.scene.bufferinfo.text = "缓冲 "+_loc2+"%";
  380.   } else {
  381.    _root.scene.bufferinfo.text = "";
  382.   }
  383. }
  384. function changesize(w, h) {
  385.   var _loc3 = w;
  386.   var _loc2 = h;
  387.   var _loc4 = mu;
  388.   if (cn(_loc4)) {
  389.    _loc3 = _loc3*_loc4/100;
  390.    _loc2 = _loc2*_loc4/100;
  391.   }
  392.   _root.scene.cfvideo.smoothing = true;//设置视频平滑
  393.   btn_play._visible = false;
  394.   btn_Stop._visible = true;
  395. }
  396. }
  397. //------------------------控制  播放 各 按钮--------------------------
  398. btn_play.onRelease = function() {
  399. ps = true;
  400. btn_play._visible = false;
  401. btn_Stop._visible = true;
  402. bfs_pause();
  403. };
  404. btn_Stop.onRelease = function() {
  405. ps = false;
  406. btn_play._visible = true;
  407. btn_Stop._visible = false;
  408. bfs_pause();
  409. };
  410. btn_nextFrame.onRelease = function() {
  411. 下一集();
  412. };
  413. btn_prevFrame.onRelease = function() {
  414. 上一集();
  415. };
  416. function bfs_pause() {
  417. if (ps) {
  418.   _root.bfs.my_ns.pause(false);
  419. } else {
  420.   _root.bfs.my_ns.pause(true);
  421. }
  422. }
  423. //---------------------------------------------
  424. function 下一集() {
  425. _root.bfs.musicPlayId++;
  426. _root.bfs.listPlayId = _root.bfs.listOpenId;
  427. _root.bfs.isPlaying = true;
  428. 剧集列表txt.text = "";
  429. PlayList();
  430. trace(_root.bfs.musicPlayId);
  431. }
  432. function 上一集() {
  433. _root.bfs.musicPlayId--;
  434. _root.bfs.listPlayId = _root.bfs.listOpenId;
  435. _root.bfs.isPlaying = true;
  436. 剧集列表txt.text = "";
  437. PlayList();
  438. trace(_root.bfs.musicPlayId);
  439. }
复制代码

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?中文注册

x

签到天数: 134 天

[LV.7]常住居民III

鲜花(171) 鸡蛋(0)
发表于 2012-6-22 18:23 | 显示全部楼层
感谢啊城分享~~辛苦了~~端午节快乐!

签到天数: 400 天

[LV.9]以坛为家II

鲜花(0) 鸡蛋(0)
发表于 2012-6-22 18:42 | 显示全部楼层
{:soso__8961432591078930798_3:}阿城太专业了  问好  端午快乐

签到天数: 54 天

[LV.5]常住居民I

鲜花(5) 鸡蛋(0)
发表于 2012-6-22 21:57 | 显示全部楼层
视频网站盗链需要这个,阿城高手啊!{:soso_e179:}

签到天数: 425 天

[LV.9]以坛为家II

鲜花(0) 鸡蛋(0)
发表于 2012-6-22 23:08 | 显示全部楼层
清音王梓 发表于 2012-6-22 21:57
视频网站盗链需要这个,阿城高手啊!

这个真的很专业!
您需要登录后才可以回帖 登录 | 中文注册

本版积分规则

网站地图|小黑屋|Archiver|中画网 ( 蜀ICP备11021737号-2 )|网站地图

GMT+8, 2024-9-28 07:27 , Processed in 0.057629 second(s), 17 queries , MemCached On.

上网要文明 发言要理性

Powered by Discuz! © 2008-2023 YinHuaBBS.CN

快速回复 返回顶部 返回列表