<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title>Google PR &amp; Yandex QI (тИЦ)</title>
  <meta http-equiv="content-type" content="text/html; charset=windows-1251" />
  <style type="text/css">
      * {overflow: hidden;} 
      .prbg {
          height: 4px; 
          overflow: hidden; 
          position: relative;
          padding: 0; 
          background: #D9D9D9;
      }
      .prlevel{
          display: block; 
          position: relative; 
          background: #5EAA5E; 
          text-align: center; 
          color: #333; 
          height: 4px; 
          line-height: 4px;
      }
  </style>
</head>
<body>

<?php

// Конвертируем строку в 32-bit инт
function StrToNum($Str$Check$Magic) {
    
$Int32Unit 4294967296;  // 2^32

    
$length strlen($Str);
    for (
$i 0$i $length$i++) {
        
$Check *= $Magic;     
        
// если выпадаем за граници инта (обычно +/- 2.15e+9 = 2^31), 
        // то получим андеф, читать ниже по ссылке
        // http://www.php.net/manual/en/language.types.integer.php
        // потому танцуем с бубном
        
if ($Check >= $Int32Unit) {
            
$Check = ($Check $Int32Unit * (int) ($Check $Int32Unit));
            
//if the check less than -2^31
            
$Check = ($Check < -2147483648) ? ($Check $Int32Unit) : $Check;
        }
        
$Check += ord($Str{$i}); 
    }
    return 
$Check;
}

// Получаем хеш для урла
function HashURL($String) {
    
$Check1 StrToNum($String0x15050x21);
    
$Check2 StrToNum($String00x1003F);

    
$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)) <<) | ($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 (
=== ($Flag 2)) {              
            
$Re += $Re;     
            
$Re = (int)($Re 10) + ($Re 10);
        }
        
$CheckByte += $Re;
        
$Flag ++;    
    }

    
$CheckByte %= 10;
    if (
!== $CheckByte) {
        
$CheckByte 10 $CheckByte;
        if (
=== ($Flag 2) ) {
            if (
=== ($CheckByte 2)) {
                
$CheckByte += 9;
            }
            
$CheckByte >>= 1;
        }
    }

    return 
'7'.$CheckByte.$HashStr;
}

// Кушаем ПР с одного из сайтов гугла
// Заделываясь под мозиллку
function fetchpr($url) {    
    
$googlehost='toolbarqueries.google.com';
    
$googleua='Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.0.6) Gecko/20060728 Firefox/1.5';
    
    
$ch CheckHash(HashURL($url));
    
// Используя сокеты, вероятность бана снижается до 0, 
    // темболее что едим только 30 первых символов ;)
    
$fp fsockopen($googlehost80$errno$errstr30);
    if (
$fp) {
       
$out "GET /search?client=navclient-auto&ch=$ch&features=Rank&q=info:$url HTTP/1.1\r\n";
       
$out .= "User-Agent: $googleua\r\n";
       
$out .= "Host: $googlehost\r\n";
       
$out .= "Connection: Close\r\n\r\n";
    
       
fwrite($fp$out);
       
       while (!
feof($fp)) {
            
$data fgets($fp128);
            
// ПР идёт в строке Rank_1:1:Х где Х наш ПР
            
$pos strpos($data"Rank_");
            if(
$pos === false){} else{
                
fclose($fp);
                
$pr=substr($data$pos 9);
                
$pr=trim($pr);
                
$pr=str_replace("\n",'',$pr);
                return 
$pr;
            }
       }
      
fclose($fp);
    }
}

// Рисуем классический графичек
function getPR($url,$width=40) {
    if (!
preg_match('/^(http:\/\/)(.*)/i'$url)) { $url='http://'.$url; }
    
$pr=fetchpr($url);
    
$pr $pr $pr "0";
    
$pagerank="PageRank: $pr/10";
    
$prpercent=100*$pr/10;
    
$html='<div class="prbg" style="width: '.$width.'px;">
    <strong class="prlevel" style="width: '
.$prpercent.'%;">&nbsp;</strong></div>';
    
$out='<div title="'.$pagerank.'">'.$html.'</div>';
    return 
$out;
}

/*
function getQi($url){
    if (!preg_match('/^(http:\/\/)(.*)/i', $url)) { $url='http://'.$url; }
    $content=file_get_contents('http://bar-navig.yandex.ru/u?ver=2&url='.$url.'&target=_No__Name:5&show=32&thc=0');
    $create=xml_parser_create();
    xml_parse_into_struct($create,$content,$array);
    xml_parser_free($create);
    return @$array[3]['attributes']['VALUE'];
}
*/
function  GetTCY($url) {
    if (!
preg_match('/^(http:\/\/)(.*)/i'$url)) { $url='http://'.trim($url); }
    
$url="http://bar-navig.yandex.ru/u?ver=2&show=32&url=".$url;
    
$Result=file_get_contents($url);
    return 
$Result ? (int) substr(strstr($Result,'value="'),7):false;
}
  

if (isset(
$_GET['url'])) 
    echo 
getPR($_GET['url'])."<small>тИЦ: ".GetTCY($_GET['url'])."</small>";
?>
<? 
if (!isset($_GET["nostats"])):?>
<script type="text/javascript" src="/ga.js"></script>
<? endif; ?>
</body>
</html>