Скрипт для определения 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 Перейти по ссылке 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 Перейти по ссылке."
     
  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у за скрипт,
    Да вполне устраивает, но всётаки лучше видить сразу и ПР иТИЦ.
     
Статус темы:
Закрыта.