Скрипт для определения Google PageRank

Тема в разделе "Open Source", создана пользователем alexz, 2 апр 2007.

Статус темы:
Закрыта.
Модераторы: Amazko, Aste
  1. alexz

    alexz Постоялец

    Регистр.:
    12 сен 2006
    Сообщения:
    62
    Симпатии:
    36
    Код:
    <?php
    
    define('GOOGLE_MAGIC', 0xE6359A60);
    
    // На вход ссылка с http://
    function getPR($url)
    {
      $ch = GoogleCH(strord('info:'.$url));
      $file = 'http://www.google.com/search?client=navclient-auto&ch=6'.$ch.'&features=Rank&q=info:'.urlencode($url);
      $data = file($file);
      $rankarray = explode (':', $data[2]);
      $rank = $rankarray[2];
      return $rank;
    }
    
    function GoogleCH($url, $length=null, $init=GOOGLE_MAGIC) 
    {
      if(is_null($length))
        $length = sizeof($url);
    
      $a = $b = 0x9E3779B9;
      $c = $init;
      $k = 0;
      $len = $length;
      
      while($len >= 12) 
      {
        $a += ($url[$k+0] +($url[$k+1]<<8) +($url[$k+2]<<16) +($url[$k+3]<<24));
        $b += ($url[$k+4] +($url[$k+5]<<8) +($url[$k+6]<<16) +($url[$k+7]<<24));
        $c += ($url[$k+8] +($url[$k+9]<<8) +($url[$k+10]<<16)+($url[$k+11]<<24));
        $mix = mix($a,$b,$c);
        $a = $mix[0]; $b = $mix[1]; $c = $mix[2];
        $k += 12;
        $len -= 12;
      }
    
      $c += $length;
      switch($len)              
      {
        case 11: $c+=($url[$k+10]<<24);
        case 10: $c+=($url[$k+9]<<16);
        case 9 : $c+=($url[$k+8]<<8);
        case 8 : $b+=($url[$k+7]<<24);
        case 7 : $b+=($url[$k+6]<<16);
        case 6 : $b+=($url[$k+5]<<8);
        case 5 : $b+=($url[$k+4]);
        case 4 : $a+=($url[$k+3]<<24);
        case 3 : $a+=($url[$k+2]<<16);
        case 2 : $a+=($url[$k+1]<<8);
        case 1 : $a+=($url[$k+0]);
      }
    
      $mix = mix($a,$b,$c);
    
      return $mix[2];
    }
    
    function zeroFill($a, $b)
    {
      $z = hexdec(80000000);
      if ($z & $a)
      {
        $a = ($a>>1);
        $a &= (~$z);
        $a |= 0x40000000;
        $a = ($a>>($b-1));
      }
      else
        $a = ($a>>$b);
    
      return $a;
    }
    
    function mix($a,$b,$c) 
    {
      $a -= $b; $a -= $c; $a ^= (zeroFill($c,13));
      $b -= $c; $b -= $a; $b ^= ($a<<8);
      $c -= $a; $c -= $b; $c ^= (zeroFill($b,13));
      $a -= $b; $a -= $c; $a ^= (zeroFill($c,12));
      $b -= $c; $b -= $a; $b ^= ($a<<16);
      $c -= $a; $c -= $b; $c ^= (zeroFill($b,5));
      $a -= $b; $a -= $c; $a ^= (zeroFill($c,3));
      $b -= $c; $b -= $a; $b ^= ($a<<10);
      $c -= $a; $c -= $b; $c ^= (zeroFill($b,15));
    
      return array($a,$b,$c);
    }
    
    function strord($string) 
    {
      for($i=0;$i<strlen($string);$i++)
        $result[$i] = ord($string{$i});
    
      return $result;
    }
    
    ?>
    
     
  2. abody

    abody

    Регистр.:
    14 сен 2006
    Сообщения:
    239
    Симпатии:
    153
    что-то у меня он не пашет... попробую на другом хостинге....
     
  3. GenrihPadla

    GenrihPadla Создатель

    Регистр.:
    27 мар 2007
    Сообщения:
    45
    Симпатии:
    0
    А чем не устраивает тул бар от гугла?
     
  4. alexz

    alexz Постоялец

    Регистр.:
    12 сен 2006
    Сообщения:
    62
    Симпатии:
    36
  5. Jury

    Jury Прохожие

    Что то тоже не пашет у меня на хосте. Хз в чем дело :(
     
  6. cepik

    cepik Постоялец

    Регистр.:
    16 мар 2007
    Сообщения:
    138
    Симпатии:
    14
    Дык может IP забанен? Гугль за частые запросы в бан отправляет, не сайт а IP для запросов.
     
  7. alexz

    alexz Постоялец

    Регистр.:
    12 сен 2006
    Сообщения:
    62
    Симпатии:
    36
    У меня работает.
    Попробуй тот, что по ссылке выше. Там автор пишет:
    "I discovered that when I used this script on one server it would work fine, yet when I used it on another I discovered that google would throw me back a 403 - Forbidden error. At first, like others I believed this was due to google blocking the IP ranges of my servers therefore preventing abuse of the service.
    This was wrong. I soon discovered this after checking the checksum generated by the toolbar, then the checksums generated on working servers and non-working servers.
    The main issue was that my development server was running on a different platform than my production server. I discovered that the problem was down to the way the ch is generated by certain versions of PHP, and the way they handle bitwise operations."
     
  8. Sarmat

    Sarmat Постоялец

    Регистр.:
    3 апр 2007
    Сообщения:
    98
    Симпатии:
    1
    А хорошо бы ещё и сразу ТИЦ показывал
     
  9. alexz

    alexz Постоялец

    Регистр.:
    12 сен 2006
    Сообщения:
    62
    Симпатии:
    36
    Скрипт на PHP для получения ТИЦ:
    PHP:
    <?php
    // На вход ссылка с http://
    function getCY($url$param=0)
    {
    $domain explode('/'strtolower($url));
     
    switch (
    $param)
    {
    // максимальный из вариантов с www и без
    case 0
    $domain substr($domain[2], strpos($domain[2], 'www.')===04:0);
    preg_match("/value=\"(.\d*)\"/"join(''file('http://bar-navig.yandex.ru/u?ver=2&show=32&url=http://www.'.$domain)), $tic1);
    preg_match("/value=\"(.\d*)\"/"join(''file('http://bar-navig.yandex.ru/u?ver=2&show=32&url=http://'.$domain)), $tic2);
    $cy = (int)$tic1[1]>(int)$tic2[1]? $tic1[1]:$tic2[1];
    break;
    // с www
    case 1
    $domain substr($domain[2], strpos($domain[2], 'www.')===04:0);
    preg_match("/value=\"(.\d*)\"/"join(''file('http://bar-navig.yandex.ru/u?ver=2&show=32&url=http://www.'.$domain)), $tic);
    $cy $tic[1];
    break;
    // без www
    case 2
    $domain substr($domain[2], strpos($domain[2], 'www.')===04:0);
    preg_match("/value=\"(.\d*)\"/"join(''file('http://bar-navig.yandex.ru/u?ver=2&show=32&url=http://'.$domain)), $tic);
    $cy $tic[1];
    break;
    // как есть 
    default: 
    preg_match("/value=\"(.\d*)\"/"join(''file('http://bar-navig.yandex.ru/u?ver=2&show=32&url=http://'.$domain)), $tic);
    $cy $tic[1];
    }
     
    return (int)
    $cy;
    }
    ?>
     
  10. Sarmat

    Sarmat Постоялец

    Регистр.:
    3 апр 2007
    Сообщения:
    98
    Симпатии:
    1
    Спасибо alexzу за скрипт,
    Да вполне устраивает, но всётаки лучше видить сразу и ПР иТИЦ.
     
Статус темы:
Закрыта.