还没上线测试的来路统计和关键字统计

/================== 来路和关键字统计==================

在项目A的A.aspx页面实现功能,代码如下:

private void Page_Load(object sender, System.EventArgs e)
   {
    if(!IsPostBack)
    {
     string str=Request.QueryString["r"].ToString();
     if(str=="")
      str=null;
     this.GetKeyAndWeb(str);
    }
   }

//搜索引擎特征
   //begin
   private string[][] _Enginers = new string[][] {
                new string[]{"baidu","gb2312","wd"},
                new string[]{"google","utf8","q"},                           new string[]{"yahoo","utf8","p"},
                new string[]{"sogou","gb2312","query"},
                new string[]{"3721","gb2312","p"},
                new string[]{"yisou","utf8","search"},
                new string[]{"soso","gb2312","w"},
                new string[]{"zhongsou","gb2312","w"},
                new string[]{"live","utf8","q"},
                new string[]{"tom","gb2312","word"},
                new string[]{"163","gb2312","q"},
                new string[]{"iask","gb2312","k"},                           new string[]{"openfind","utf8","q"},
                new string[]{"alltheweb","utf8","q"},
                new string[]{"lycos","utf8","query"},
                new string[]{"onseek","utf8","q"}
               };
   //end

   //搜索引擎名称
   //begin
   private string _EngineName = "";
   public string EngineName
   {
    get
    {
     return _EngineName;
    }
   }
   //end

   //搜索引擎编码
   //begin
   private string _Coding = "utf8";
   public string Coding
   {
    get
    {
     return _Coding;
    }
   }
   //end
       
   //搜索引擎关键字查询参数名称
   //begin
   private string _RegexWord = "";
   public string RegexWord
   {
    get
    {
     return _RegexWord;
    }
   }
   //end

   //建立搜索关键字正则表达式
   //begin
   private string _Regex = @"(";
   public void EngineRegEx(string myString)
   {
    //提取地址里面的搜索引擎名
    for (int i = 0, j = _Enginers.Length; i < j; i++)
    {
     if (myString.IndexOf(_Enginers[i][0])>-1)      
     {
      _EngineName = _Enginers[i][0]; //搜索引擎的名称 如baidu,google
      _Coding = _Enginers[i][1];      //编码方式 uft-8,gb2312
      _RegexWord = _Enginers[i][2];   //参数 wd,u
      _Regex += _EngineName + @"".+.*[?/&]" + _RegexWord + @"[=:])(?<key>[^&]*)";
      break;
     }
    }
   }
   //end


   //得到搜索引擎关键字
   //begin
   public string SearchKey(string myString)
   {
    EngineRegEx(myString.ToLower()); //调用上面的方法
    if (_EngineName != "")
    {
     Regex myReg = new Regex(_Regex, RegexOptions.IgnoreCase);
     Match matche = myReg.Match(myString);
     myString = matche.Groups["key"].Value;
     //去处表示为空格的+
     myString = myString.Replace("+", " ");
     if(_Coding=="gb2312") //如果是中文的 如百度 就用该种解码方式
     {
      myString=HttpUtility.UrlDecode(myString,Encoding.GetEncoding("gb2312"));
     }
     else     //如 google 的解码方式
     {
      myString=HttpUtility.UrlDecode(myString,Encoding.GetEncoding("utf-8"));  
     }
    }
    return myString;
   }
   //end

//获取来路并提取关键字
   public void GetKeyAndWeb(string str)
   {
   
    string keys="";  
      string address=str;
    if(address!=null && _EngineName != "")
     keys = this.SearchKey(address);
    string dt=DateTime.Now.ToShortDateString();

    //转换成搜素引擎的中文名字 便于查阅
    string ChineseEngine="";  
    switch(_EngineName)
    {
     case "baidu":
      ChineseEngine="百度";
      break;
     case "google":
      ChineseEngine="谷歌";
      break;
     case "yahoo":
      ChineseEngine="雅虎";
      break;
     case "sogou":
      ChineseEngine="搜狗";
      break;
     case "3721":
      ChineseEngine="3721";
      break;
     case "163":
      ChineseEngine="网易";
      break;
     case "yisou":
      ChineseEngine="易搜";
      break;
     case "soso":
      ChineseEngine="搜搜";
      break;
     case "zhongsou":
      ChineseEngine="中搜";
      break;
     default://其他不常用的 不用转换
      ChineseEngine=_EngineName;
      break;
    }
    //

    //写入数据到数据库
    if(Session["sign"]==null)
    {
     Session["sign"]="sign";
       //下面的判断比较关键的
     if(address!=null) //来路不为空
     {
      new CountsPageBiz().WebCount(address,dt);
        if(keys!="") //关键字 防止来路是通过链接等来的
                   {
                            new CountsKeyBiz().KeyCount(keys, ChineseEngine, dt);
      
                    }

     }
     else
     {
        address="直接输入网址";
      new CountsPageBiz().WebCount(address,dt);

       }
    }

}

在项目B的B.aspx 的页面文件引用A.aspx

   < script id="tj"></script>

<script type="text/javascript">

     var o=document.GetelementByID("tj");

     o.src="/A/A.aspx?r="+document.referrer:

</script>

 

============================OK=============================

      刚开始在A.aspx里面统计来路,结果怎么弄来路都是B.aspx!这个问题困扰了我好几天,解决问题的关键就在B.aspx引用A.aspx的时候, 原来是直接这样做的:<script type="text/javascript" src="/A/A.aspx"></script>.也想到了在这里传个参数(B.aspx的来路即 document.referrer)给A.aspx,但是这个参数无法统计来路。?!

         我又想到在B.aspx.cs里面得到来路:address=Request.servervariables["Http_Referer"] ,然后这样写:<script type="text/javascript" src="/A/A.aspx?r=<%=%>"></script>,但是这样写比较麻烦,如果又很多页面需要统计,那 么每个页面都要这样写。!!

       终于,俊的一个同学刚好也在做这个,问题终于解决了!

      爽哉!轉

posted @ 2009-03-31 17:48  leeolevis  阅读(261)  评论(0编辑  收藏  举报