AJAX异步从优酷专辑中采集所有视频及信息(JavaScript代码)

上次写了一个 .NET从优酷专辑中采集所有视频及信息(VB.NET代码) http://www.cnblogs.com/clso/archive/2010/01/09/1642952.html

 

个人觉得不甚满意,因为VB.NET在.NET环境下执行采集,产生的网络连接与正则匹配消耗太大,而我最终的应用是在视频采集提交上,所以就考虑用JS的AJAX+正则表达式来完成这个目标。

以前一直没有系统地学习JS和正则,所以花费的时间比预想的要长,折腾了一个晚上,糊弄出了下面的代码。=..=

 

代码
<!--
 夜闻香原创,转载请保留此信息,万分感谢!
 博客: http://clso.cnblogs.com
 主页: http://cleclso.cn
 QQ:315514678 E-mail:clso#qq.com
 欢迎技术交流!
-->


< html >
< head >
< title > JavaScipt AJAX & 正则表达式 test </ title >
< script  type ="text/javascript"  language ="javascript" >

function  wrt(s){
    subret.value 
=  s  +   " \n "   +  subret.value;
    
// subret.value += "\n" + s;
}

var  objRequest;  // 定义一个XML请求对象
var  previd  =   "" ,nowid  = 0 ,listid  =   "" ,iscancel = false // 其他变量

function  getlid(){
    
var  listid  =  weburl.value.match( / playlist_show\ / . * ( ?= id_(\d + )). * \.html$ / i);
     if ( ! listid){
        
return   null ;
    } 
else  {
        
return  listid[ 1 ];
    }
}
function  retweb(){
    
if (objRequest.readyState  ==   4   &&  objRequest.status  ==   200 ){
        
//  获得回调
         var  webstr  =  objRequest.responseText;
        vid 
=  webstr.match( / var\s+videoId\s*=\s*"(\d+)"\s*; / )[ 1 ];
        vtitle 
=  webstr.match( / <title>(.+) - (.+) - 视频 - 优酷视频 - 在线观看( - )?<\ / title > / )[2];
        wrt(nowid  +   " : "   +  vtitle  +   " = "   +  vid);
        
if (previd  ==  vid)  return ;
        previd 
=  vid;
        nowid 
+=   1 ;
        
//  开始新循环
         if (iscancel)  return ;
        tstart();
    } 
else  {
        
// alert("回调失败!");
         return ; // "error: " + objRequest.statusText;
    }
}
function  getweb(u){
    objRequest 
=   new  XMLHttpRequest();  // new ActiveXObject("Msxml2.XMLHTTP"); //IE5&6初始化XMLHTTP对象
    objRequest.onreadystatechange  =  retweb;  // 异步回调方法
    objRequest.open( " GET " ,u, true );
    objRequest.send(
null );
}
function  tstart(){
    
if (listid == "" ){
        listid
= getlid();
    }
    url 
=   " http://v.youku.com/v_playlist/f "   +  listid  +   " o1p "   +  nowid  +   " .html " ;
    getweb(url);
}


</ script >
</ head >
< body >
< input  type ="text"  id ="weburl"  value ="http://www.youku.com/playlist_show/id_2350764.html"  style ="width:640"   />< br  />
< textarea  id ="subret"  readonly ="readonly"  style ="width:640; height:360;" > #star </ textarea >
< br />
< input  type =button  value ="开始提取专辑"  onclick ="if(iscancel)iscancel=false;tstart();"   />
< input  type =button  value ="清除文本"  onclick ="subret.value='';nowid =0;preid='';listid='';"   />
< input  type =button  value ="暂停"  onclick ="iscancel=true;"   />
</ body >
</ html >

 

 

思路基本跟上次的一样,所以就不多赘述了。

用VB.NET一个页面的采集时间一般在1秒钟左右,而这个代码依靠客户端脚本,每个页面采集在0.3~0.5秒左右,依据用户的电脑配置而不同。

个人用IE7测试通过,但代码比较随意,所以兼容性不是很好。如果你需要使用,请自行修改代码。

转载于:https://www.cnblogs.com/clso/archive/2010/02/05/1664092.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值