Определение Google PR

Есть множество сервисов, позволяющих определить Google PR сайта, но иногда, возникает необходимость получения данных о PR в текстовом виде. Узнать Page Rank, присвоенный Гуглом определенной странице, невозможно, просто пройдя по ссылке, необходим специальный алгоритм. Ниже, опубликованы 2 рабочих скрипта, написанных на PHP (авторы этих скриптов, к сожалению, не известны), для определения PR.

В первых числах октября 2011 года, Google немного изменил адрес запроса для определения PageRank, с search на tbr. Если у вас не работает старый скрипт по определению PR, то эта информация может пригодиться:

Старый URL:
http://toolbarqueries.google.com/search?client=navclient-auto&features=Rank&ch=8f3b58e04&q=info:АДРЕС САЙТА

Новый URL:
http://toolbarqueries.google.com/tbr?client=navclient-auto&features=Rank&ch=8f3b58e04&q=info:АДРЕС САЙТА

PHP скрипты определения Google PR

Опубликованные ниже скрипты определения Google PageRank идентичны в работе, и отличаются только тем, что первый скрипт использует исключительно функции, а во втором применяется ООП.

Скрипт №1
// http://Petrenco.com

function StrToNum($Str, $Check, $Magic)
  {
  $Int32Unit = 4294967296;

  $length = strlen($Str);
  for ($i = 0; $i < $length; $i++)
    {
    $Check *= $Magic;
   
    if ($Check >= $Int32Unit)
      {
      $Check = ($Check - $Int32Unit * (int) ($Check / $Int32Unit));

      $Check = ($Check < -2147483648) ? ($Check + $Int32Unit) : $Check;
      }
    $Check += ord($Str{$i});
    }
  return $Check;
  }
 
function HashURL($String)
  {
  $Check1 = StrToNum($String, 0x1505, 0x21);
  $Check2 = StrToNum($String, 0, 0x1003F);

  $Check1 >>= 2;
  $Check1 = (($Check1 >> 4) & 0x3FFFFC0 ) | ($Check1 & 0x3F);
  $Check1 = (($Check1 >> 4) & 0x3FFC00 ) | ($Check1 & 0x3FF);
  $Check1 = (($Check1 >> 4) & 0x3C000 ) | ($Check1 & 0x3FFF);

  $T1 = (((($Check1 & 0x3C0) << 4) | ($Check1 & 0x3C)) <<2 ) | ($Check2 & 0xF0F );
  $T2 = (((($Check1 & 0xFFFFC000) << 4) | ($Check1 & 0x3C00)) << 0xA) | ($Check2 & 0xF0F0000 );

  return ($T1 | $T2);
  }
 
function CheckHash($Hashnum)
  {
  $CheckByte = 0;
  $Flag = 0;

  $HashStr = sprintf('%u', $Hashnum) ;
  $length = strlen($HashStr);

  for ($i = $length - 1;  $i >= 0;  $i --)
    {
    $Re = $HashStr{$i};
    if (1 === ($Flag % 2))
      {
      $Re += $Re;
      $Re = (int)($Re / 10) + ($Re % 10);
      }
    $CheckByte += $Re;
    $Flag ++;
    }

  $CheckByte %= 10;
  if (0 !== $CheckByte)
    {
    $CheckByte = 10 - $CheckByte;
    if (1 === ($Flag % 2) )
      {
      if (1 === ($CheckByte % 2))
        {
        $CheckByte += 9;
        }
      $CheckByte >>= 1;
      }
    }
  return '7'.$CheckByte.$HashStr;
  }
 
function getpagerank($url)
  {
  $fp = fsockopen("toolbarqueries.google.com", 80, $errno, $errstr, 30);
  if (!$fp)
    {
    }
  else
    {
    $out = "GET /tbr?client=navclient-auto&ch=".CheckHash(HashURL($url))
    ."&features=Rank&q=info:".$url."&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";
    fwrite($fp, $out);
    while (!feof($fp))
      {
      $data = fgets($fp, 128);
      $pos = strpos($data, "Rank_");
      if($pos === false)
        {
           
        }
      else
        {
        $pagerank = substr($data, $pos + 9);
        }
      }
    fclose($fp);
    }

  $pagerank = (strlen($pagerank) > 0) ? $pagerank : -1;
  $pagerank = intval($pagerank);
  return $pagerank;
  }

$url = 'petrenco.com';
echo 'PR сайта $url: '.getpagerank($url);
Скрипт №2
// http://Petrenco.com

class GooglePageRankChecker {

  // Track the instance
  private static $instance;

  // Constructor
  function getRank($page) {
    // Create the instance, if one isn't created yet
    if(!isset(self::$instance)) {
      self::$instance = new self();
    }
    // Return the result
    return self::$instance->check($page);
  }

  // Convert string to a number
  function stringToNumber($string,$check,$magic) {
    $int32 = 4294967296;  // 2^32
      $length = strlen($string);
      for ($i = 0; $i < $length; $i++) {
          $check *= $magic;
          //If the float is beyond the boundaries of integer (usually +/- 2.15e+9 = 2^31),
          //  the result of converting to integer is undefined
          //  refer to http://www.php.net/manual/en/language.types.integer.php
          if($check >= $int32) {
              $check = ($check - $int32 * (int) ($check / $int32));
              //if the check less than -2^31
              $check = ($check < -($int32 / 2)) ? ($check + $int32) : $check;
          }
          $check += ord($string{$i});
      }
      return $check;
  }

  // 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);
  }

  // Create checksum for hash
  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;
  }

  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;
    }
  }
}

$url = 'petrenco.com';
echo 'PR сайта $url: '.GooglePageRankChecker::getRank($url);
Опубликовано: 2011/10/09
HTML-код ссылки на эту страницу:
<a href="http://petrenco.com/php.php?txt=113" target="_blank">Определение Google PR</a>
10122
Добавить комментарий
Ваш e-mail: (не виден посетителям сайта)
Ваше имя:
Комментарий:
Символы с картинки:
Только выделенные поля формы добавления комментариев обязательны к заполнению.