Google pagerank checker script


stáhnout snippet
zobrazení: SyntaxHighlighter | GeSHi | Holý text
<?php
/******************
 * PageRankXor32 class created by MagicBeanDip
 * PageRank class was created by others
 * Look for updates at http://v1.magicbeandip.com/mbd-file/PageRankReport.php
 * This code is released into the Public Domain
 *
 * Sample use:
 * include('PageRankXor32.php');
 * $oPR=new PageRankXor32();
 * echo $oPR->getRank('http://www.amazon.com');
 *
 ******************/

define('GOOGLE_MAGIC', 0xE6359A60);

// Use this class if your server is having problems with bitwise operations
class PageRankXor32 extends PageRank {
    function xor32($a, $b) {
        return $this->int32($a) ^ $this->int32($b);
    }
    //return least significant 32 bits
    //works by telling unserialize to create an integer even though we provide a double value
    function int32($x) {
        return unserialize("i:$x;");
        //return intval($x); // This line doesn't work on all servers.
    }
    
    function mix($a,$b,$c) {
        $a -= $b; $a -= $c; $a = $this->xor32($a,$this->zeroFill($c,13));
        $b -= $c; $b -= $a; $b = $this->xor32($b,$a<<8);
        $c -= $a; $c -= $b; $c = $this->xor32($c,$this->zeroFill($b,13));
        $a -= $b; $a -= $c; $a = $this->xor32($a,$this->zeroFill($c,12));
        $b -= $c; $b -= $a; $b = $this->xor32($b,$a<<16);
        $c -= $a; $c -= $b; $c = $this->xor32($c,$this->zeroFill($b,5));
        $a -= $b; $a -= $c; $a = $this->xor32($a,$this->zeroFill($c,3));
        $b -= $c; $b -= $a; $b = $this->xor32($b,$a<<10);
        $c -= $a; $c -= $b; $c = $this->xor32($c,$this->zeroFill($b,15));
        return array($a,$b,$c);
    }
}    

//This class should work on most servers
class PageRank {
    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 ^= ($this->zeroFill($c,13));
        $b -= $c; $b -= $a; $b ^= ($a<<8);
        $c -= $a; $c -= $b; $c ^= ($this->zeroFill($b,13));
        $a -= $b; $a -= $c; $a ^= ($this->zeroFill($c,12));
        $b -= $c; $b -= $a; $b ^= ($a<<16);
        $c -= $a; $c -= $b; $c ^= ($this->zeroFill($b,5));
        $a -= $b; $a -= $c; $a ^= ($this->zeroFill($c,3));
        $b -= $c; $b -= $a; $b ^= ($a<<10);
        $c -= $a; $c -= $b; $c ^= ($this->zeroFill($b,15));
        return array($a,$b,$c);
    }
    
    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 = $this->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);
            /* the first byte of c is reserved for the length */
            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 = $this->mix($a,$b,$c);
        /* report the result */
        return $mix[2];
    }
    
    //converts a string into an array of integers containing the numeric value of the char
    function strord($string) {
        for($i=0;$i<strlen($string);$i++) {
            $result[$i] = ord($string{$i});
        }
        return $result;
        }

    //returns -1 if no page rank was found
    function getRank($url){
        $ch = "6".$this->GoogleCH($this->strord("info:" . $url));
        
        $pagerank=-1;
        $fp = fsockopen("www.google.com", 80, $errno, $errstr, 30);
        if (!$fp) {
            echo "$errstr ($errno)<br />\n";
        } else {
            $out = "GET /search?client=navclient-auto&ch=" . $ch .  "&features=Rank&q=info:" . $url . " HTTP/1.1\r\n" ;
            $out .= "Host: www.google.com\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 = trim(substr($data, $pos + 9));
                }
            }
            fclose($fp);
        }
        return $pagerank;
    }
} 
?>


Tagy:
php 142 řádků | 2008-02-04 20:46:34 | air.kadlec@seznam.cz