反向链接(referrers)系统可以很好的显示反向链接,目前很多站点上显示的最新来源(referer)统计都是用的是stephen的referrer统计系统,比如 booso 反向链接(referrers)统计系统,还有一个朱传伟的反向链接统计服务不知道是不是他自己实现的。
总之,网上提供这些反向链接(referrers)系统不是服务不好,就是定制性不好,所以,干脆,我烦了,自己花一天时间写了一个,并且公开源代码,基本上架构和功能都用了,但是还需要完善。
由于我没有支持 asp + access 的主机,所以无法为大家提供服务,希望有哪个同仁可以提供这个服务?或者 csdn 会提供这个服务给我?效果图如下:
基本架构:
采用 asp + access
用下列脚本在需要统计的页面增加反向链接记录
<script language=javascript src="/lib/refadd.js"></script>
用下列脚本在需要显示的页面增加反向链接显示
<script language=javascript src="/lib/refcnt.js"></script>
数据库:
数据库只需要一张表即可
id:整数
ip:字符串(255)
agent:字符串(255)
to:字符串(255)
name:字符串(255)
from:字符串(255)
date:日期时间
其中"name"字段的值是对 from 处理后的结果,比如 from="http://www.google.com/" 则name="google"
分析:
只需要简单一个 sql 查询即可:
select [name],count(*) from [referrer] group by [name] order by count(*) desc"
如果需要,还可以加上必要的条件,比如显示访问次数大于3次的记录:
select [name],count(*) from [referrer] group by [name] having count(*)>3 order by count(*) desc"
基本功能:
反向链接记录
反向链接显示(支持多种参数)
文件列表:
lib/refadd.asp
lib/refadd.js
lib/refcnt.asp
lib/refcnt.js
lib/refcon.asp
lib/images/percent.gif
dat/refdb.mdb
源代码:
由于 csdn 不提供文件下载功能,所以我还要找一个地方上传源代码,不知道哪里有,各位同仁请告知道
default.asp
<html>
<head>
<title>top 100 refering sites</title>
<meta http-equiv="content-type" content="text/html; charset=gb2312">
</head>
<body>
<script language=javascript src="/lib/refadd.js"></script>
<script language=javascript src="/lib/refcnt.js"></script>
</body>
</html>
refadd.asp
<%@language=javascript%>
<!–#include file="refcon.asp" –>
<%
function makeurl(sname,surl)
{
if(surl.indexof("http://") == 0)
{
surl = surl.substring(7);
}
return "<a href=\\\"http://" + surl + "\\\">" + sname+ "</a>";
}
function getname(sip, surl)
{
var sname = surl.tolowercase();
if(sname == "")
{
sname = makeurl("direct refrence", sip);
}
else
{
if(sname.indexof("http://") == 0)
{
sname = sname.substring(7);
}
if(sname.indexof("www.") == 0)
{
sname = sname.substring(4);
}
var nindex = sname.indexof("/");
if(nindex > 0)
{
sname = sname.substring(0, nindex);
}
if(sname.indexof(".") == 0)
{
sname = makeurl("not avalible", surl);
}
else
{
if(sname.indexof("google") == 0)
{
sname = makeurl("google", surl);
}
else
if(sname.indexof("yahoo") == 0)
{
sname = makeurl("yahoo", surl);
}
else
{
sname = makeurl(surl, surl);
}
}
}
return sname.substring(0,255);
}
var nct = parseint("" + request.querystring("ct")); if(isnan(nct)) nct = 8;
var sip = "" + request.servervariables("remote_addr"); if(sip == "undefined" || sip == "null") sip = "";
var sql = "select [id] from [referrer] where [ip]=" + sip + " and datediff(h,[date],now())<" + nct;
var ors = oconnect.execute(sql)
if(ors.eof && ors.bof)
{
var srf = "" + request.querystring("fr"); if(srf == "undefined" || srf == "null") srf = "";
var sto = "" + request.querystring("to"); if(sto == "undefined" || sto == "null") sto = "";
var sag = "" + request.servervariables("http_user_agent");
srf = srf.substring(0,255);
sto = sto.substring(0,255);
sag = sag.substring(0,255);
sql = "insert into [referrer]([date],[ip],[name],[from],[to],[agent])values("
+ "now()"
+ "," + sip + ""
+ "," + sqlstr(getname(sip,srf)) + ""
+ "," + sqlstr(srf) + ""
+ "," + sqlstr(sto) + ""
+ "," + sqlstr(sag) + ""
+ ")";
oconnect.execute(sql);
}
ors.close();ors = null;
oconnect.close();oconnect = null;
%>
refadd.js
function __refadd()
{
document.write("<sc");
document.write("ript language=javascript src=/lib/refadd.asp?ct=8&fr=" + document.referrer + "&to=" + document.location + ">");
document.write("</sc");
document.write("ript>");
}
__refadd();
refcnt.asp
<%@language=javascript%>
<!–#include file="refcon.asp" –>
document.write("<table width=\"100%\"><tr><td width=\"100%\" align=center valign=top height=520><font size=\"+2\"><strong>");
<%
var sto = "" + request.querystring("to"); if(sto == "undefined" || sto == "null") sto = ""; else sto = sto.substring(0,255);
var sql;
var ors;
var spr = " where [to]=" + sqlstr(sto) + "";
var sst = "" + request.querystring("st"); if(sst == "undefined" || sst == "null") sst = "";
if(sst != "")
{
spr += " and [date]>=#" + sst + "#";
var sed = "" + request.querystring("ed"); if(sed == "undefined" || sed == "null") sed = "";
if(sed != "")
{
spr += " and [date]<=#" + sqlstr(sed) + "#"
}
}
else
{
var nct = parseint("" + request.querystring("ct")); if(isnan(nct)) nct = 0;
if(nct > 0)
{
spr += " and datediff(h,[date],now())<" + nct;
}
}
sql = "select count(*) from [referrer]" + spr;
ors = oconnect.execute(sql)
if(!ors.eof)
{
ntotal = ors(0).value;
}
ors.close();
sql = "select [name],count(*) from [referrer]" + spr + " group by [name] order by count(*) desc";
ors = oconnect.execute(sql);
var n = 0;
var odata = new array();
while(!ors.eof)
{
odata[n] = new array();
odata[n][0] = ors(0).value;
odata[n][1] = ors(1).value;
n++;
ors.movenext();
}
ors.close();
if(n > 0)
{
disptop();
}
else
{
dispnone();
}
ors = null;
oconnect.close(); oconnect = null;
function write(shtml)
{
response.write("document.write(\"" + shtml + "\");\n");
}
function makeurl(sname,surl)
{
if(surl.indexof("http://") == 0)
{
surl = surl.substring(7);
}
return "<a href=\\\"http://" + surl + "\\\">" + sname + "</a>";
}
function dispnone()
{
write("<h1><br>there is no data in the range you requested</h1>");
}
function disptop()
{
// 显示
write("<br><font color=#0080ff face=georgia, times new roman, times, serif>top refering sites</font><br><br>");
write("<table>");
write("<tr><td align=center> rank </td>")
write("<td align=center> refering site </td>");
write("<td align=center> times </td>");
write("<td align=center> graph </td>")
write("<td align=center> percent </td></tr>");
for(i=0;i<n;i++)
{
if(odata[i][1] > 0)
{
write("<tr>");
write("<td align=center>" + (i + 1) + "</td>");
if(odata[i][0] == "not avalible")
{
write("<td> </td><td align=center>" + odata[i][1] + "</td>");
}
else
{
write("<td> " + odata[i][0] + " </td><td align=center>" + odata[i][1] + "</td>");
}
write("<td>");
// 百分比
var npct = odata[i][1]/ntotal*100;
write("<img src=/lib/images/percent.gif border=0 height=10px width=" + npct*2 + "px>");
write("</td>");
write("<td align=center> " + npct + "% </td>");
write("</tr>");
}
}
write("</table>");
}
%>
document.write("</strong></font></td><td> </td></tr></table>");
refcnt.js
function __refcnt()
{
document.write("<sc");
document.write("ript language=javascript src=/lib/refcnt.asp?to=" + document.location + ">");
document.write("</sc");
document.write("ript>");
}
__refcnt();
refcon.asp
<%
var oconnect = server.createobject("adodb.connection");
oconnect.open("provider=microsoft.jet.oledb.4.0;data source=e:\\osproject\\public\\referrer\\dat\\refdb.mdb;persist security info=false");
function sqlstr(ssql)
{
return ssql.replace("", "");
}
%>
