2010-10-21 87 views
2

我想找到最有效的方法来解析我的System.Web.HTTPRequest.UrlReferrer找到用于驱动访问者到我的网站的搜索字词,假设他们通过搜索到达我的网站引擎结果页面。解析搜索引擎关键字

我在想(希望)我会使用HttpUtility.ParseQueryString方法,但我的问题来试图找出什么变量来解析。我有以下列表,我需要检查。该列表显示了搜索引擎和每个使用的参数。

daum:q, 
eniro:search_word, 
naver:query, 
images.google:q, 
google:q, 
yahoo:p, 
msn:q, 
bing:q, 
aol:query, 
aol:encquery, 
lycos:query, 
ask:q, 
altavista:q, 
netscape:query, 
cnn:query, 
about:terms, 
mamma:query, 
alltheweb:q, 
voila:rdata, 
virgilio:qs, 
live:q, 
baidu:wd, 
alice:qs, 
yandex:text, 
najdi:q, 
aol:q, 
mama:query, 
seznam:q, 
search:q, 
wp:szukaj, 
onet:qt, 
szukacz:q, 
yam:k, 
pchome:q, 
kvasir:q, 
sesam:q, 
ozu:q, 
terra:query, 
mynet:q, 
ekolay:q, 
rambler:words 

因此,虽然我可以去通过每这样说

NameValueCollection query = HttpUtility.ParseQueryString(UrlReferrer); 
var referrer = Request.UrlReferrer.ToString(); 

if(referrer.Contains("google.com") 
    return (query["q"]); 
else if(referrer.Contains("yahoo.com") 
    return (query["p"]); 

我想必须有一个更好的办法,因为我有这个好听的名字/值对对着干,和ParseQueryString方法的功能,但我画了一个空白。

回答

6

嗯,我不满意,我认为我没有达到效率,但这是我最终做的。我仍然喜欢用更好的方法听取你们的意见。

private string GetKeywords(string urlReferrer) 
    { 
     var searchQuery = string.Empty; 
     var url = new Uri(urlReferrer); 
     var query = HttpUtility.ParseQueryString(urlReferrer); 
     switch (url.Host) 
     { 
      case "google": 
      case "daum": 
      case "msn": 
      case "bing": 
      case "ask": 
      case "altavista": 
      case "alltheweb": 
      case "live": 
      case "najdi": 
      case "aol": 
      case "seznam": 
      case "search": 
      case "szukacz": 
      case "pchome": 
      case "kvasir": 
      case "sesam": 
      case "ozu": 
      case "mynet": 
      case "ekolay": 
       searchQuery = query["q"]; 
       break; 
      case "naver": 
      case "netscape": 
      case "mama": 
      case "mamma": 
      case "terra": 
      case "cnn": 
       searchQuery = query["query"]; 
       break; 
      case "virgilio": 
      case "alice": 
       searchQuery = query["qs"]; 
       break; 
      case "yahoo": 
       searchQuery = query["p"]; 
       break; 
      case "onet": 
       searchQuery = query["qt"]; 
       break; 
      case "eniro": 
       searchQuery = query["search_word"]; 
       break; 
      case "about": 
       searchQuery = query["terms"]; 
       break; 
      case "voila": 
       searchQuery = query["rdata"]; 
       break; 
      case "baidu": 
       searchQuery = query["wd"]; 
       break; 
      case "yandex": 
       searchQuery = query["text"]; 
       break; 
      case "szukaj": 
       searchQuery = query["wp"]; 
       break; 
      case "yam": 
       searchQuery = query["k"]; 
       break; 
      case "rambler": 
       searchQuery = query["words"]; 
       break; 
      default: 
       searchQuery = query["q"]; 
       break; 
     } 
     return searchQuery; 
    }