因为版主工作的需要,需要统计小版主的工作,以前总是用版主管理的回复查询手工统计,累的受不了了,用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>";