因为版主工作的需要,需要统计小版主的工作,以前总是用版主管理的回复查询手工统计,累的受不了了,用javascript + xmlhttp + dom 写了个统计工具。 以下是代码,请在晚上或周末的时候进行统计,要不速度太慢统计不出来
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=gb2312"> <title>版主统计</title> <script language=javascript>
var xmlDoc = new ActiveXObject("Msxml2.DOMDocument.4.0"); xmlDoc.async = false;
function getSmallRoomList(doc,bigRoomId) //得到大版下的小版列表 { var url = "http://expert.csdn.net/Expert/deeptree/rooms/" + bigRoomId + "/list.xml" doc.load(url); var nodeList = doc.documentElement.selectNodes("//Tree/TreeNode"); var listArray = new Array(nodeList.length); for(var i=0;i<nodeList.length;i++) { listArray[i] = new Array(nodeList[i].getAttribute("NodeId"),nodeList[i].getAttribute("Title")); } return listArray; } function getSmallMasterList(doc,smallRoomId) //得到小版的版主列表 { var url = "http://expert.csdn.net/Expert/Rooms/small/" + smallRoomId + "/Forum_" + smallRoomId + "_1.xml" doc.load(url); var line2 = doc.documentElement.selectSingleNode("//Forum/Top/Line2"); var tmpStr = line2.text; var re=/\">[\S\s]*</ig; var smallMasterList=tmpStr.match(re) for(var i=0;i<smallMasterList.length;i++) { smallMasterList[i] = smallMasterList[i].substr(2,smallMasterList[i].length-3); } return smallMasterList }
function streamtochar(StrStream) {
var stream = new ActiveXObject("ADODB.Stream"); stream.type=1; stream.Mode=3; stream.Open() ; stream.Write(StrStream); stream.Position= 0; stream.Type= 2; stream.Charset="gb2312"; var result= stream.ReadText(); stream.Close(); stream = null; return result; }
function getTopicslist(ReplyUserName,roomId,type,month,year) //得到帖子数量列表 { var url = "http://expert.csdn.net/xxx/xxx.aspx?room=" + roomId + "&type=" + type + "&ReplyUserName=" + ReplyUserName + "&month=" + month + "&year=" + year; //这个地址CSDN还没有公开,所以我替换成xxx了,需要的朋友请找我要这个地址! var xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); xmlhttp.Open("GET",url, false);
try { xmlhttp.Send(); var result = xmlhttp.status; } catch(e) { return(false); }
if(result==200) { var tmp = streamtochar(xmlhttp.responseBody); var re = /<td colspan="4" align="left">[\S\s]*<font color=red>/ig; try { tmp = tmp.match(re); tmp = tmp[0] tmp = tmp.split(":")[1] tmp = tmp.split(",")[0] return tmp; } catch(e) { // } }
var xmlhttp = null;
}
function drawTable(sRoomList) //输出结果 { var resultStr = ""; resultStr += "<table border=1 width=\"100%\">"; for(var i = 0 ;i< sRoomList.length;i++) { resultStr += "<tr bgcolor=\"#00CCFF\">"; resultStr += "<td>" + sRoomList[i][1] + "版</td>"; resultStr += "</tr>";
resultStr += "<tr>"; resultStr += "<td>";
resultStr += "<table width=\"100%\" border=\"1\" cellpadding=\"0\" cellspacing=\"0\" bordercolor=\"#CCCCCC\">"; resultStr += "<tr>";
resultStr += "<td>版主</td>"; resultStr += "<td>参与的帖子</td>"; resultStr += "<td>得分的帖子</td>";
resultStr += "</tr>"; var smallRoomId = sRoomList[i][0].substr(8,sRoomList[i][0].length) var smallMasterList = getSmallMasterList(xmlDoc,smallRoomId) for(var j = 0;j <smallMasterList.length;j++) { if(smallMasterList[j]=="我要申请") continue; resultStr += "<tr>"; resultStr += "<td>" + smallMasterList[j] + "</td>"; resultStr += "<td>" + getTopicslist(smallMasterList[j],smallRoomId,"2","12","2003") + "</td>"; resultStr += "<td>"+ getTopicslist(smallMasterList[j],smallRoomId,"1","12","2003") +"</td>"; resultStr += "</tr>"; }
resultStr += "</table>"; resultStr += "</td>"; resultStr += "</tr>"; } resultStr += "</table>"; return resultStr; }
function doIt() { if(bigRoomId.value=="") { alert("请输入大版ID"); return; } var smallRoomList = getSmallRoomList(xmlDoc,bigRoomId.value) result.innerHTML = drawTable(smallRoomList); } </script> </head>
<body> <p align="center" class="style2">版主统计工具</p> <p align="left">作者:awaysrain(绝对零度)<br> 时间:2004年1月2日<br> 版本:1.0测试版<br> 运行环境:IE6</p> <p>请输入大版ID <input type="text" name="bigRoomId" value="3"> <input type="submit" name="Submit" value="开始统计" onclick="doIt()"> <span class="style1">(建议在晚上或者周末人少的时候进行统计,速度太慢了统计不出来)</span></p> <div id="result"></div> </body> </html>

|