AJAX非同步從優酷專輯中採集所有視頻及資訊(JavaScript代碼)

來源:互聯網
上載者:User

個人覺得不甚滿意,因為VB.NET在.NET環境下執行採集,產生的網路連接與正則匹配消耗太大,而我最終的應用是在視頻採集提交上,所以就考慮用JS的AJAX+Regex來完成這個目標。
以前一直沒有系統地學習JS和正則,所以花費的時間比預想的要長,折騰了一個晚上,糊弄出了下面的代碼。=..= 複製代碼 代碼如下:<!--
夜聞香原創,轉載請保留此資訊,萬分感謝!
部落格: http://clso.cnblogs.com
首頁: http://cleclso.cn
QQ:315514678 E-mail:clso#qq.com
歡迎技術交流!
-->

<html>
<head>
<title>JavaScipt AJAX & Regex 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測試通過,但代碼比較隨意,所以相容性不是很好。如果你需要使用,請自行修改代碼。
夜聞香原創,轉載請保留此資訊
部落格: http://clso.cnblogs.com/
首頁: http://www.cleclso.cn/

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.