• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
    • 軟件測試技術
    • 軟件測試博客
    • 軟件測試視頻
    • 開源軟件測試技術
    • 軟件測試論壇
    • 軟件測試沙龍
    • 軟件測試資料下載
    • 軟件測試雜志
    • 軟件測試人才招聘
      暫時沒有公告

    字號: | 推薦給好友 上一篇 | 下一篇

    【編程】開源(OpenSource) - 反向鏈接(Referrers)系統

    發布: 2007-6-30 18:56 | 作者: admin | 來源: | 查看: 20次 | 進入軟件測試論壇討論

    領測軟件測試網 反向鏈接(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‘’>&nbsp;Rank&nbsp;</td>")
    Write("<td align=‘’center‘’>&nbsp;Refering Site&nbsp;</td>");
    Write("<td align=‘’center‘’>&nbsp;Times&nbsp;</td>");
    Write("<td align=‘’center‘’>&nbsp;Graph&nbsp;</td>")
    Write("<td align=‘’center‘’>&nbsp;Percent&nbsp;</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>&nbsp;&nbsp;</td><TD align=‘’center‘’>" + oData[i][1] + "</td>");
    }
    else
    {
    Write("<TD>&nbsp;" + oData[i][0] + "&nbsp;</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‘’>&nbsp;" + nPct + "%&nbsp;</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("‘’", "‘’‘’");
    }
    %>








    文章來源于領測軟件測試網 http://www.kjueaiud.com/


    關于領測軟件測試網 | 領測軟件測試網合作伙伴 | 廣告服務 | 投稿指南 | 聯系我們 | 網站地圖 | 友情鏈接
    版權所有(C) 2003-2010 TestAge(領測軟件測試網)|領測國際科技(北京)有限公司|軟件測試工程師培訓網 All Rights Reserved
    北京市海淀區中關村南大街9號北京理工科技大廈1402室 京ICP備10010545號-5
    技術支持和業務聯系:info@testage.com.cn 電話:010-51297073

    軟件測試 | 領測國際ISTQBISTQB官網TMMiTMMi認證國際軟件測試工程師認證領測軟件測試網

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>