2012-01-17 2 views
1

아래 코드를 사용하고 있지만 시간 초과 오류가 발생했습니다. 내 IP는 차단되지 않았지만 firefox addon searchstatus를 통해 확인할 수 있습니다. 내가 사용하고있는 코드는 시대에 뒤진 것 같지 않고보기 흉하게 보인다. 그래서 제 질문은 내가 URL 페이지 순위를 얻을 수있는 방법이다와 C# 4.0URL을 얻는 방법 C#으로 Google 페이지 순위

 private const UInt32 GOOGLE_MAGIC = 0xE6359A60; 

    private static void _mix(ref UInt32 a, ref UInt32 b, ref UInt32 c) 
    { 
     a -= b; a -= c; a ^= c >> 13; 
     b -= c; b -= a; b ^= a << 8; 
     c -= a; c -= b; c ^= b >> 13; 
     a -= b; a -= c; a ^= c >> 12; 
     b -= c; b -= a; b ^= a << 16; 
     c -= a; c -= b; c ^= b >> 5; 
     a -= b; a -= c; a ^= c >> 3; 
     b -= c; b -= a; b ^= a << 10; 
     c -= a; c -= b; c ^= b >> 15; 
    } 

    public static string GoogleCH(string url) 
    { 
     url = string.Format("info:{0}", url); 

     int length = url.Length; 

     UInt32 a, b; 
     UInt32 c = GOOGLE_MAGIC; 

     int k = 0; 
     int len = length; 

     a = b = 0x9E3779B9; 

     while (len >= 12) 
     { 
      a += (UInt32)(url[k + 0] + (url[k + 1] << 8) + (url[k + 2] << 16) + (url[k + 3] << 24)); 
      b += (UInt32)(url[k + 4] + (url[k + 5] << 8) + (url[k + 6] << 16) + (url[k + 7] << 24)); 
      c += (UInt32)(url[k + 8] + (url[k + 9] << 8) + (url[k + 10] << 16) + (url[k + 11] << 24)); 
      _mix(ref a, ref b, ref c); 
      k += 12; 
      len -= 12; 
     } 
     c += (UInt32)length; 
     switch (len) /* all the case statements fall through */ 
     { 
      case 11: 
       c += (UInt32)(url[k + 10] << 24); 
       goto case 10; 
      case 10: 
       c += (UInt32)(url[k + 9] << 16); 
       goto case 9; 
      case 9: 
       c += (UInt32)(url[k + 8] << 8); 
       goto case 8; 
      /* the first byte of c is reserved for the length */ 
      case 8: 
       b += (UInt32)(url[k + 7] << 24); 
       goto case 7; 
      case 7: 
       b += (UInt32)(url[k + 6] << 16); 
       goto case 6; 
      case 6: 
       b += (UInt32)(url[k + 5] << 8); 
       goto case 5; 
      case 5: 
       b += (UInt32)(url[k + 4]); 
       goto case 4; 
      case 4: 
       a += (UInt32)(url[k + 3] << 24); 
       goto case 3; 
      case 3: 
       a += (UInt32)(url[k + 2] << 16); 
       goto case 2; 
      case 2: 
       a += (UInt32)(url[k + 1] << 8); 
       goto case 1; 
      case 1: 
       a += (UInt32)(url[k + 0]); 
       break; 
      default: 
       break; 
      /* case 0: nothing left to add */ 
     } 

     _mix(ref a, ref b, ref c); 

     return string.Format("6{0}", c); 
    } 

    public string getGooglePR(string url) 
    { 
     Uri myUri = new Uri(url); 
     string srUrl = myUri.AbsoluteUri.ToString(); 
     string checksum = GoogleCH(srUrl); 
     string query = string.Format("http://toolbarqueries.google.com/tbr?client=navclient-auto&features=Rank&ch={0}&features=Rank&q=info:{1}", checksum, srUrl); 

     try 
     { 
      HttpWebRequest request = (HttpWebRequest)WebRequest.Create(query); 
      string response = new StreamReader(request.GetResponse().GetResponseStream()).ReadToEnd(); 
      if (response.Length == 0) 
       return "01"; 
      else 
       return int.Parse(Regex.Match(response, "Rank_1:[0-9]:([0-9]+)").Groups[1].Value).ToString() + "0"; 
     } 
     catch (Exception E) 
     { 
      return E.Message.ToString(); 
     } 
    } 

# 4.0

통지 C : 문제는 URL에 특수 문자가 &

+0

파이어 폭스 – NotMe

+0

크리스 라이블리가 정확한 쿼리를 보내고 있는지 알아보기 위해 피들러를 실행하는 것을 고려해 볼 수는 있지만 오류가 발견되었습니다. 오류는 해시 함수입니다. URL에 특수 문자가있는 경우 & 실패합니다. 어떻게 해시 문제를 해결할 수 있습니까? – MonsterMMORPG

답변

0

그냥 체크 같이있을 때 발생 전체 URL 대신 특정 웹 사이트의 호스트에 대해

웹 사이트 URL 호스트에 &이 있습니까?

+0

어떻게 도움이 될까요? 여기서 목표는 전체 URL을 얻고 있습니다. pagerank – MonsterMMORPG

+0

안녕하세요, 게시 한 코드를 실행했는데 오류가 발생했습니다. 산술 오류. 위의 코드에서 PR을 얻지 못했지만 대신 검색 창에'info : domain'을 쿼리로 사용하여 웹 페이지를 반환하고 하나의 결과를 얻었습니다. 코드가 여전히 작동합니까, 아마도 당신이 그것을 도울 수 있습니다 – Smith

+0

예 코드가 작동합니다. 내 성공률은 약 90 % – MonsterMMORPG