1

現在の Web サイトの PageRank と Alexa のランキングを表示する Mozilla Firefox ツールバーを作成しています。私が知るようになった 1 つの方法はXMLHttpRequest、JavaScript ファイルで を使用して、Web サイトのサーバーでホストされている PHP ページから情報を取得することです。

PHP クラスには次の関数があります。

function check($page) {

// Open a socket to the toolbarqueries address, used by Google Toolbar
$socket = fsockopen("toolbarqueries.google.com", 80, $errno, $errstr, 30);

// If a connection can be established
if($socket) {
  // Prep socket headers
  $out = "GET /tbr?client=navclient-auto&ch=".$this->checkHash($this->createHash($page)).
          "&features=Rank&q=info:".$page."&num=100&filter=0 HTTP/1.1\r\n";
  $out .= "Host: toolbarqueries.google.com\r\n";
  $out .= "User-Agent: Mozilla/4.0 (compatible; GoogleToolbar 2.0.114-big; Windows XP 5.1)\r\n";
  $out .= "Connection: Close\r\n\r\n";

  // Write settings to the socket
  fwrite($socket, $out);

  // When a response is received...
  $result = "";
  while(!feof($socket)) {
    $data = fgets($socket, 128);
    $pos = strpos($data, "Rank_");
    if($pos !== false){
      $pagerank = substr($data, $pos + 9);
      $result += $pagerank;
    }
  }
  // Close the connection
  fclose($socket);

  // Return the rank!
  return $result;
}

PHP サービスをホストせずに、カスタム Firefox ツールバーでページランクを取得するより良い方法はありますか?

 // Create a url hash
function createHash($string) {
$check1 = $this->stringToNumber($string, 0x1505, 0x21);
  $check2 = $this->stringToNumber($string, 0, 0x1003F);

$factor = 4;
$halfFactor = $factor/2;

  $check1 >>= $halfFactor;
  $check1 = (($check1 >> $factor) & 0x3FFFFC0 ) | ($check1 & 0x3F);
  $check1 = (($check1 >> $factor) & 0x3FFC00 ) | ($check1 & 0x3FF);
  $check1 = (($check1 >> $factor) & 0x3C000 ) | ($check1 & 0x3FFF);  

  $calc1 = (((($check1 & 0x3C0) << $factor) | ($check1 & 0x3C)) << $halfFactor ) | ($check2 & 0xF0F );
  $calc2 = (((($check1 & 0xFFFFC000) << $factor) | ($check1 & 0x3C00)) << 0xA) | ($check2 & 0xF0F0000 );

  return ($calc1 | $calc2);

}

// ハッシュのチェックサムを作成

function checkHash($hashNumber)
{
  $check = 0;
$flag = 0;

$hashString = sprintf('%u', $hashNumber) ;
$length = strlen($hashString);

for ($i = $length - 1;  $i >= 0;  $i --) {
  $r = $hashString{$i};
  if(1 === ($flag % 2)) {
    $r += $r;
    $r = (int)($r / 10) + ($r % 10);
  }
  $check += $r;
  $flag ++;
}

$check %= 10;
if(0 !== $check) {
  $check = 10 - $check;
  if(1 === ($flag % 2) ) {
    if(1 === ($check % 2)) {
      $check += 9;
    }
    $check >>= 1;
  }
}

return '7'.$check.$hashString;

}

4

1 に答える 1

0

PHP コードが HTTP リクエストのみを行う場合は、Firefox 拡張機能からも同じリクエストを行うことができます。

var request = new XMLHttpHeader();
request.open("http://toolbarqueries.google.com/tbr?client=navclient-auto&ch=...");
request.setRequestHeader("User-Agent", "Mozilla/4.0 (compatible; GoogleToolbar 2.0.114-big; Windows XP 5.1)");
request.send();

ただし、このような Google サーバーの使用 (特に Google ツールバーになりすますこと) が Google の利用規約に準拠しているかどうかを明確にする必要があります。そうしないと、法的措置に直面したり、少なくともこの Web サービスの動作方法が突然変更されたりする可能性があります。

ハッシュ関数に関しては、明らかに、このアルゴリズムを JavaScript に変換するか (見た目からすると非常に単純です)、誰かがすでにそれを行っているかどうかを調べることができます。たとえば、この JS ベースのハッシュ アルゴリズムの実装を見つけました (7 ではなく 8 で始まる別のアルゴリズムですが、このプレフィックスはハッシュ関数によって返されるのではなく、URL の一部であることに注意してください)。

于 2012-10-02T05:42:57.947 に答える