Skip to content

Instantly share code, notes, and snippets.

@masihyeganeh
Created July 13, 2012 11:50
Show Gist options
  • Save masihyeganeh/3104508 to your computer and use it in GitHub Desktop.
Save masihyeganeh/3104508 to your computer and use it in GitHub Desktop.
Gets Google pagerank of a website
<?php
define("GOOGLE_MAGIC", 0xE6359A60);
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 ^= (zeroFill($c, 13));
$b -= $c;
$b -= $a;
$b ^= ($a << 8);
$c -= $a;
$c -= $b;
$c ^= (zeroFill($b, 13));
$a -= $b;
$a -= $c;
$a ^= (zeroFill($c, 12));
$b -= $c;
$b -= $a;
$b ^= ($a << 16);
$c -= $a;
$c -= $b;
$c ^= (zeroFill($b, 5));
$a -= $b;
$a -= $c;
$a ^= (zeroFill($c, 3));
$b -= $c;
$b -= $a;
$b ^= ($a << 10);
$c -= $a;
$c -= $b;
$c ^= (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 = 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 = 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;
}
function get_pagerank($url)
{
$ch = "6" . GoogleCH(strord("info:" . $url));
$pagerank = 0;
$fp = fsockopen("www.google.com", 80, $errno, $errstr, 30);
if (!$fp) {
echo "$errstr ($errno)\n";
} else {
$out = "GET /tbr?client=navclient-auto&ch=" . $ch . "&features=Rank&q=info:" . $url . " HTTP/1.1\r\n";
$out .= "Host: toolbarqueries.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 = substr($data, $pos + 9);
if (substr($pagerank, 0, 2) == "10") {
$pagerank = "10";
} else {
$pagerank = substr($pagerank, 0, 1);
}
}
}
fclose($fp);
}
return $pagerank;
}
print get_pagerank('www.google.com');
?>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment