Скрипт получения PageRank произвольной страницы
Прислано Alipapa November 26 2011 14:31:32
Привожу код скрипта на PHP, выводящего PR заданной веб-странцы. Его можно встроить в какой-либо информер, выводящий информацию о сайте (конечно, позаботиться о получении веб-адреса страницы - например, использовав суперглобальный массив $_SERVER):

<?php
class PageRankGrabber {
    public function getRank($url) {
        $pageUrl = $this->getRankUrlStingByPageUrl($url);
        $content = $this->getContentCurl($pageUrl);
        $parts   = explode(":", $content);
        return intval(@$parts[count($parts)-1]);
    }
    public function getContentCurl($url) {
       $ch = curl_init();
       curl_setopt($ch, CURLOPT_URL, $url);
       curl_setopt($ch, CURLOPT_HEADER, 0);
       curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
       curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
       $result = curl_exec($ch);
       curl_close($ch);
       return $result;        
    }

    public function getRankUrlStingByPageUrl($page) {
        $this->awesomeHash($page);
        $hash = "8" . $this->awesomeHash($page);
// Следующее выражение содержит строку запроса, которая иногда меняется. Поэтому, если скрипт перестанет выдавать правильные значения, причину ищите здесь в первую очередь (смотрите новости, связанные с google toolbar):
$url  = "http://toolbarqueries.google.com/tbr?sourceid=" .
"navclient-ff&features=Rank&client=navclient-auto-ff&";
        $url .= "ch=" . $hash . "&q=info:" . urlencode($page);
        return str_replace(' ', '', $url);        
    }

    private function toHex8($num) {
        $vector = "0123456789abcdef";
        return $vector[($num % 256) / 16] . $vector[$num % 16];
    }
    
    private function hexEncodeU32($num) {
        $result  = $this->toHex8($this->zerofillShift($num, 24));
        $result .= $this->toHex8($this->zerofillShift($num, 16) & 255);
        $result .= $this->toHex8($this->zerofillShift($num, 8) & 255);
        return $result . $this->toHex8($num & 255);
    }
 
    private function awesomeHash($value)  {
 
        $hashSeed = "Mining PageRank is AGAINST GOOGLE'S TERMS OF SERVICE." .
                    "Yes, I'm talking to you, scammer.";
        $intValue = 16909125;
        for($i = 0; $i < strlen($value); $i++ ){
            $intValue ^=
                $this->charCodeAt($hashSeed, $i % strlen($hashSeed)) ^
                $this->charCodeAt($value, $i);
            $intValue =
                $this->zerofillShift($intValue,  23) | $intValue << 9;
        }
        return $this->hexEncodeU32($intValue);
    }
    
    private function charCodeAt($value, $position) {
        $symbol = $value[$position];
        return ord($symbol);
    }
 
    private function zerofillShift($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;
    }   
}
$obj = new PageRankGrabber();
$rank = $obj->getRank('http://tagilsv.ru/news.php?readmore=31'); //сюда подставьте адрес интересующей веб-страницы
echo $rank;
?>

copyright © 2010