2012-01-17 12 views
1

私は以下のコードを使用していますが、タイムアウトエラーが発生しています。私のIPはブロックされていませんが、私はfirefox addon searchstatusで確認できます。私が使用している以下のコードは古いものであり、まともではないようです。だから私の質問は、私は、URLのページランクを取得することができる方法であるとC#4.0URLを取得するにはどうすればいいですか?C#

 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

正確なクエリがfirefox – NotMe

+0

によって送信されていることを確認するために、フィドラーを実行すると考えられます。Chris Livelyさんにお返事ありがとうございます。エラーはハッシュ関数です。好きなURLに特殊文字があると失敗します。では、どうすれば問題が解決するのですか? – MonsterMMORPG

答えて

0

だけチェック等がある場合に発生します完全なURLの代わりに特定のウェブサイトのホストのため

ウェブサイトのURLのホストは&ですか?

+0

どのように役立つでしょうか。ここでの目的は完全なURLを取得しています。pagerank – MonsterMMORPG

+0

こんにちは、私はあなたが投稿したコードを実行し、それはエラーを投げていた。算術誤差。私が調べたところ、上のコードはPRを得ていなかったのに対し、代わりに検索ボックスに 'info:domain'という名前のウェブページをクエリーとして返していました。コードはまだ動作します、おそらく私はそれをデバッグするのに役立ちます – Smith

+0

はいコードが動作します。私の成功率は約90% – MonsterMMORPG

関連する問題