Checking Google Pagerank with PHP

By | June 19, 2008

Today I’ll show you the script that allows to get Google Pagerank value for any site you like. Note, that Google limits the number of toolbar queries per IP per day.

<?php
function StrToNum($Str, $Check, $Magic) {
$Int32Unit = 4294967296;
$length = strlen($Str);
for ($i = 0; $i < $length; $i++) {
$Check *= $Magic;
if ($Check >= $Int32Unit) {
$Check = ($Check – $Int32Unit * (int) ($Check / $Int32Unit));
$Check = ($Check < -2147483648) ? ($Check + $Int32Unit) : $Check;
}
$Check += ord($Str{$i});
}
return $Check;
}

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);
}

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

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

return ‘7’.$CheckByte.$HashStr;
}

function getch($url) { return CheckHash(HashURL($url)); }

function check_pr($url)
{
$googlehost=’toolbarqueries.google.com’;
$user_agent=”Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.8.1.14) Gecko/20080404 Firefox/2.0.0.14″;

$ch = getch($url);
if ($ch)
{
$googleurl=’http://’.$googlehost.’/search?client=navclient-auto&ch=’.$ch.’&features=Rank&q=info:’.$url;
$ch=curl_init();
curl_setopt($ch, CURLOPT_URL, $googleurl);
curl_setopt($ch, CURLOPT_USERAGENT, $user_agent);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_TIMEOUT, 5);
$data = curl_exec($ch);
curl_close($ch);
if(!substr_count($data, “Rank_”))
return (‘n/a’);
else
{
$pos = strpos($data, “Rank_”);
$pr=substr($data, $pos + 9);
$pr=trim($pr);
$pr=str_replace(“n”,”,$pr);
return $pr;
}
}
}
?>

The most flexible function here is check_pr. Though it accepts ony one argument, you can modify it in the way you lilke. Especially, instead of $googlehost=’toolbarqueries.google.com’; you can enter any Google datacenter to query about pagerank.