Created
July 13, 2012 11:50
-
-
Save masihyeganeh/3104508 to your computer and use it in GitHub Desktop.
Gets Google pagerank of a website
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?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