Hoe check ik de Google Pagerank PR met PHP

Inleiding

Na lang zoeken eindelijk gevonden: Het PHP script waarmee je de google page rank van een site kan checken. Andere PR scripts werkte niet omdat er een verschil in checksum berekening geldt tussen 32bit en 64bits servers.

Het volgende script werkt voor beide typen:

Stappen

<?php

//PageRank Lookup v1.1 by HM2K (update: 31/01/07)
//based on an alogoritham found here: http://pagerank.gamesaga.net/

//settings - host and user agent
$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';

//convert a string to a 32-bit integer
function StrToNum($Str, $Check, $Magic) {
    $Int32Unit = 4294967296;  // 2^32

    $length = strlen($Str);
    for ($i = 0; $i < $length; $i++) {
        $Check *= $Magic; 	
        //If the float is beyond the boundaries of integer (usually +/- 2.15e+9 = 2^31), 
        //  the result of converting to integer is undefined
        //  refer to 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)&#160;? ($Check + $Int32Unit)&#160;: $Check;
        }
        $Check += ord($Str{$i}); 
    }
    return $Check;
}

//genearate a hash for a url
function HashURL($String) {
    $Check1 = StrToNum($String, 0x1505, 0x21);
    $Check2 = StrToNum($String, 0, 0x1003F);

    $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)) <<2 ) | ($Check2 & 0xF0F );
    $T2 = (((($Check1 & 0xFFFFC000) << 4) | ($Check1 & 0x3C00)) << 0xA) | ($Check2 & 0xF0F0000 );
	
    return ($T1 | $T2);
}

//genearate a checksum for the hash string
function CheckHash($Hashnum) {
    $CheckByte = 0;
    $Flag = 0;

    $HashStr = sprintf('%u', $Hashnum)&#160;;
    $length = strlen($HashStr);
	
    for ($i = $length - 1;  $i >= 0;  $i --) {
        $Re = $HashStr{$i};
        if (1===($Flag&#160;% 2)) {              
            $Re += $Re;     
            $Re = (int)($Re / 10) + ($Re&#160;% 10);
        }
        $CheckByte += $Re;
        $Flag ++;	
    }

    $CheckByte&#160;%= 10;
    if (0&#160;!==$CheckByte) {
        $CheckByte = 10 - $CheckByte;
        if (1===($Flag&#160;% 2) ) {
            if (1===($CheckByte&#160;% 2)) {
                $CheckByte += 9;
            }
            $CheckByte >>= 1;
        }
    }

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

//return the pagerank checksum hash
function getch($url) { return CheckHash(HashURL($url)); }

//return the pagerank figure
function getpr($url) {
	global $googlehost,$googleua;
	$ch = getch($url);
	$fp = fsockopen($googlehost, 80, $errno, $errstr, 30);
	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);
	   
	   //$pagerank = substr(fgets($fp, 128), 4); //debug only
	   //echo $pagerank; //debug only
	   while (!feof($fp)) {
			$data = fgets($fp, 128);
			//echo $data;
			$pos = strpos($data, "Rank_");
			if($pos===false){} else{
				$pr=substr($data, $pos + 9);
				$pr=trim($pr);
				$pr=str_replace("\n",<i>,$pr);</i>
				return $pr;
			}
	   }
	   //else { echo "$errstr ($errno)
\n"; } //debug only
	   fclose($fp);
	}
}

//generate the graphical pagerank
function pagerank($url,$width=40,$method='style') {
	if (!preg_match('/^(http:\/\/)?([^\/]+)/i', $url)) { $url='http://'.$url; }
	$pr=getpr($url);
	$pagerank="PageRank: $pr/10";

	//The (old) image method
	if ($method=='image') {
	$prpos=$width*$pr/10;
	$prneg=$width-$prpos;
	$html='<img src="http://www.google.com/images/pos.gif" width='.$prpos.' height=4 border=0 alt="'.$pagerank.'"><img src="http://www.google.com/images/neg.gif" width='.$prneg.' height=4 border=0 alt="'.$pagerank.'">';
	}
	//The pre-styled method
	if ($method=='style') {
	$prpercent=100*$pr/10;
	$html=$pagerank.'<div style="position: relative; width: '.$width.'px; padding: 0; background: #D9D9D9;"><strong style="width: '.$prpercent.'%; display: block; position: relative; background: #5EAA5E; text-align: center; color: #333; height: 4px; line-height: 4px;"><span></span></strong></div>';
<p>	}
</p><p>	$out='<a href="'.$url.'" title="'.$pagerank.'">'.$html.'</a>';
	return $out;
}
</p><p>//if ((!isset($_POST['url'])) && (!isset($_GET['url']))) { echo '<form action="" method="post"><input name="url" type="text"><input type="submit" name="Submit" value="Get Pagerank"></form>'; }
if (isset($_REQUEST['url'])) { echo pagerank($_REQUEST['url']); }
?>
</p>

Tips


Handige links